From ca11c6c0323d2a7a5fc597c41cc5be7e2c6a1e58 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 28 Jan 2021 15:04:57 +0100 Subject: [PATCH] PDMC OK --- QMC.org | 201 ++++++++++++++++++++++----------- docs/org-info.js | 288 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 426 insertions(+), 63 deletions(-) create mode 100644 docs/org-info.js diff --git a/QMC.org b/QMC.org index 75543c9..61bca43 100644 --- a/QMC.org +++ b/QMC.org @@ -1,9 +1,7 @@ #+TITLE: Quantum Monte Carlo #+AUTHOR: Anthony Scemama, Claudia Filippi -# SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-readtheorg.setup -# SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-bigblow.setup #+LANGUAGE: en -#+INFOJS_OPT: toc:t mouse:underline path:http://orgmode.org/org-info.js +#+INFOJS_OPT: toc:t mouse:underline path:org-info.js #+STARTUP: latexpreview #+LATEX_CLASS: report #+LATEX_HEADER_EXTRA: \usepackage{minted} @@ -47,7 +45,7 @@ computes a statistical estimate of the expectation value of the energy associated with a given wave function. Finally, we introduce the diffusion Monte Carlo (DMC) method which - gives the exact energy of the hydrogen atom and of the $H_2$ molecule. + gives the exact energy of the hydrogen atom and of the H_2 molecule. Code examples will be given in Python and Fortran. You can use whatever language you prefer to write the program. @@ -1156,17 +1154,17 @@ gfortran hydrogen.f90 qmc_stats.f90 qmc_uniform.f90 -o qmc_uniform initial position $\mathbf{r}_0$, we will realize a random walk as follows: $$ - \mathbf{r}_{n+1} = \mathbf{r}_{n} + \tau \mathbf{u} + \mathbf{r}_{n+1} = \mathbf{r}_{n} + \delta t\, \mathbf{u} $$ - where $\tau$ is a fixed constant (the so-called /time-step/), and + where $\delta t$ is a fixed constant (the so-called /time-step/), and $\mathbf{u}$ is a uniform random number in a 3-dimensional box $(-1,-1,-1) \le \mathbf{u} \le (1,1,1)$. We will then add the accept/reject step that guarantees that the distribution of the $\mathbf{r}_n$ is $\Psi^2$: 1) Compute $\Psi$ at a new position $\mathbf{r'} = \mathbf{r}_n + - \tau \mathbf{u}$ + \delta t\, \mathbf{u}$ 2) Compute the ratio $R = \frac{\left[\Psi(\mathbf{r'})\right]^2}{\left[\Psi(\mathbf{r}_{n})\right]^2}$ 3) Draw a uniform random number $v \in [0,1]$ 4) if $v \le R$, accept the move : set $\mathbf{r}_{n+1} = \mathbf{r'}$ @@ -1213,15 +1211,15 @@ gfortran hydrogen.f90 qmc_stats.f90 qmc_uniform.f90 -o qmc_uniform from hydrogen import * from qmc_stats import * -def MonteCarlo(a,nmax,tau): +def MonteCarlo(a,nmax,dt): # TODO return energy/nmax, N_accep/nmax # Run simulation a = 0.9 nmax = 100000 -tau = 1.3 -X0 = [ MonteCarlo(a,nmax,tau) for i in range(30)] +dt = 1.3 +X0 = [ MonteCarlo(a,nmax,dt) for i in range(30)] # Energy X = [ x for (x, _) in X0 ] @@ -1236,11 +1234,11 @@ print(f"A = {A} +/- {deltaA}") *Fortran* #+BEGIN_SRC f90 :tangle none -subroutine metropolis_montecarlo(a,nmax,tau,energy,accep) +subroutine metropolis_montecarlo(a,nmax,dt,energy,accep) implicit none double precision, intent(in) :: a integer*8 , intent(in) :: nmax - double precision, intent(in) :: tau + double precision, intent(in) :: dt double precision, intent(out) :: energy double precision, intent(out) :: accep @@ -1257,7 +1255,7 @@ end subroutine metropolis_montecarlo program qmc implicit none double precision, parameter :: a = 0.9d0 - double precision, parameter :: tau = 1.3d0 + double precision, parameter :: dt = 1.3d0 integer*8 , parameter :: nmax = 100000 integer , parameter :: nruns = 30 @@ -1266,7 +1264,7 @@ program qmc double precision :: ave, err do irun=1,nruns - call metropolis_montecarlo(a,nmax,tau,X(irun),Y(irun)) + call metropolis_montecarlo(a,nmax,dt,X(irun),Y(irun)) enddo call ave_error(X,nruns,ave,err) @@ -1288,13 +1286,13 @@ gfortran hydrogen.f90 qmc_stats.f90 qmc_metropolis.f90 -o qmc_metropolis from hydrogen import * from qmc_stats import * -def MonteCarlo(a,nmax,tau): +def MonteCarlo(a,nmax,dt): energy = 0. N_accep = 0 - r_old = np.random.uniform(-tau, tau, (3)) + r_old = np.random.uniform(-dt, dt, (3)) psi_old = psi(a,r_old) for istep in range(nmax): - r_new = r_old + np.random.uniform(-tau,tau,(3)) + r_new = r_old + np.random.uniform(-dt,dt,(3)) psi_new = psi(a,r_new) ratio = (psi_new / psi_old)**2 v = np.random.uniform() @@ -1308,8 +1306,8 @@ def MonteCarlo(a,nmax,tau): # Run simulation a = 0.9 nmax = 100000 -tau = 1.3 -X0 = [ MonteCarlo(a,nmax,tau) for i in range(30)] +dt = 1.3 +X0 = [ MonteCarlo(a,nmax,dt) for i in range(30)] # Energy X = [ x for (x, _) in X0 ] @@ -1328,11 +1326,11 @@ print(f"A = {A} +/- {deltaA}") *Fortran* #+BEGIN_SRC f90 :exports code -subroutine metropolis_montecarlo(a,nmax,tau,energy,accep) +subroutine metropolis_montecarlo(a,nmax,dt,energy,accep) implicit none double precision, intent(in) :: a integer*8 , intent(in) :: nmax - double precision, intent(in) :: tau + double precision, intent(in) :: dt double precision, intent(out) :: energy double precision, intent(out) :: accep @@ -1346,11 +1344,11 @@ subroutine metropolis_montecarlo(a,nmax,tau,energy,accep) energy = 0.d0 n_accep = 0_8 call random_number(r_old) - r_old(:) = tau * (2.d0*r_old(:) - 1.d0) + r_old(:) = dt * (2.d0*r_old(:) - 1.d0) psi_old = psi(a,r_old) do istep = 1,nmax call random_number(r_new) - r_new(:) = r_old(:) + tau * (2.d0*r_new(:) - 1.d0) + r_new(:) = r_old(:) + dt * (2.d0*r_new(:) - 1.d0) psi_new = psi(a,r_new) ratio = (psi_new / psi_old)**2 call random_number(v) @@ -1368,7 +1366,7 @@ end subroutine metropolis_montecarlo program qmc implicit none double precision, parameter :: a = 0.9d0 - double precision, parameter :: tau = 1.3d0 + double precision, parameter :: dt = 1.3d0 integer*8 , parameter :: nmax = 100000 integer , parameter :: nruns = 30 @@ -1377,7 +1375,7 @@ program qmc double precision :: ave, err do irun=1,nruns - call metropolis_montecarlo(a,nmax,tau,X(irun),Y(irun)) + call metropolis_montecarlo(a,nmax,dt,X(irun),Y(irun)) enddo call ave_error(X,nruns,ave,err) @@ -1477,12 +1475,12 @@ end subroutine random_gauss Now, if instead of drawing uniform random numbers we choose to draw Gaussian random numbers with zero mean and variance - $\tau$, the transition probability becomes: + $\delta t$, the transition probability becomes: \[ T(\mathbf{r}_{n} \rightarrow \mathbf{r}_{n+1}) = - \frac{1}{(2\pi\,\tau)^{3/2}} \exp \left[ - \frac{\left( - \mathbf{r}_{n+1} - \mathbf{r}_{n} \right)^2}{2\tau} \right] + \frac{1}{(2\pi\,\delta t)^{3/2}} \exp \left[ - \frac{\left( + \mathbf{r}_{n+1} - \mathbf{r}_{n} \right)^2}{2\delta t} \right] \] @@ -1500,19 +1498,19 @@ end subroutine random_gauss The numerical scheme becomes a drifted diffusion: \[ - \mathbf{r}_{n+1} = \mathbf{r}_{n} + \tau \frac{\nabla + \mathbf{r}_{n+1} = \mathbf{r}_{n} + \delta t\, \frac{\nabla \Psi(\mathbf{r})}{\Psi(\mathbf{r})} + \chi \] where $\chi$ is a Gaussian random variable with zero mean and - variance $\tau$. + variance $\delta t$. The transition probability becomes: \[ T(\mathbf{r}_{n} \rightarrow \mathbf{r}_{n+1}) = - \frac{1}{(2\pi\,\tau)^{3/2}} \exp \left[ - \frac{\left( + \frac{1}{(2\pi\,\delta t)^{3/2}} \exp \left[ - \frac{\left( \mathbf{r}_{n+1} - \mathbf{r}_{n} - \frac{\nabla - \Psi(\mathbf{r}_n)}{\Psi(\mathbf{r}_n)} \right)^2}{2\,\tau} \right] + \Psi(\mathbf{r}_n)}{\Psi(\mathbf{r}_n)} \right)^2}{2\,\delta t} \right] \] @@ -1570,14 +1568,14 @@ end subroutine drift from hydrogen import * from qmc_stats import * -def MonteCarlo(a,nmax,tau): +def MonteCarlo(a,nmax,dt): # TODO # Run simulation a = 0.9 nmax = 100000 -tau = 1.3 -X0 = [ MonteCarlo(a,nmax,tau) for i in range(30)] +dt = 1.3 +X0 = [ MonteCarlo(a,nmax,dt) for i in range(30)] # Energy X = [ x for (x, _) in X0 ] @@ -1592,14 +1590,14 @@ print(f"A = {A} +/- {deltaA}") *Fortran* #+BEGIN_SRC f90 :tangle none -subroutine variational_montecarlo(a,tau,nmax,energy,accep_rate) +subroutine variational_montecarlo(a,dt,nmax,energy,accep_rate) implicit none - double precision, intent(in) :: a, tau + double precision, intent(in) :: a, dt integer*8 , intent(in) :: nmax double precision, intent(out) :: energy, accep_rate integer*8 :: istep - double precision :: sq_tau, chi(3) + double precision :: sq_dt, chi(3) double precision :: psi_old, psi_new double precision :: r_old(3), r_new(3) double precision :: d_old(3), d_new(3) @@ -1612,7 +1610,7 @@ end subroutine variational_montecarlo program qmc implicit none double precision, parameter :: a = 0.9 - double precision, parameter :: tau = 1.0 + double precision, parameter :: dt = 1.0 integer*8 , parameter :: nmax = 100000 integer , parameter :: nruns = 30 @@ -1621,7 +1619,7 @@ program qmc double precision :: ave, err do irun=1,nruns - call variational_montecarlo(a,tau,nmax,X(irun),accep(irun)) + call variational_montecarlo(a,dt,nmax,X(irun),accep(irun)) enddo call ave_error(X,nruns,ave,err) print *, 'E = ', ave, '+/-', err @@ -1641,23 +1639,23 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis from hydrogen import * from qmc_stats import * -def MonteCarlo(a,nmax,tau): +def MonteCarlo(a,nmax,dt): energy = 0. accep_rate = 0. - sq_tau = np.sqrt(tau) + sq_dt = np.sqrt(dt) r_old = np.random.normal(loc=0., scale=1.0, size=(3)) d_old = drift(a,r_old) d2_old = np.dot(d_old,d_old) psi_old = psi(a,r_old) for istep in range(nmax): chi = np.random.normal(loc=0., scale=1.0, size=(3)) - r_new = r_old + tau * d_old + sq_tau * chi + r_new = r_old + dt * d_old + sq_dt * chi d_new = drift(a,r_new) d2_new = np.dot(d_new,d_new) psi_new = psi(a,r_new) # Metropolis prod = np.dot((d_new + d_old), (r_new - r_old)) - argexpo = 0.5 * (d2_new - d2_old)*tau + prod + argexpo = 0.5 * (d2_new - d2_old)*dt + prod q = psi_new / psi_old q = np.exp(-argexpo) * q*q if np.random.uniform() < q: @@ -1673,8 +1671,8 @@ def MonteCarlo(a,nmax,tau): # Run simulation a = 0.9 nmax = 100000 -tau = 1.3 -X0 = [ MonteCarlo(a,nmax,tau) for i in range(30)] +dt = 1.3 +X0 = [ MonteCarlo(a,nmax,dt) for i in range(30)] # Energy X = [ x for (x, _) in X0 ] @@ -1693,20 +1691,20 @@ print(f"A = {A} +/- {deltaA}") *Fortran* #+BEGIN_SRC f90 -subroutine variational_montecarlo(a,tau,nmax,energy,accep_rate) +subroutine variational_montecarlo(a,dt,nmax,energy,accep_rate) implicit none - double precision, intent(in) :: a, tau + double precision, intent(in) :: a, dt integer*8 , intent(in) :: nmax double precision, intent(out) :: energy, accep_rate integer*8 :: istep - double precision :: sq_tau, chi(3), d2_old, prod, u + double precision :: sq_dt, chi(3), d2_old, prod, u double precision :: psi_old, psi_new, d2_new, argexpo, q double precision :: r_old(3), r_new(3) double precision :: d_old(3), d_new(3) double precision, external :: e_loc, psi - sq_tau = dsqrt(tau) + sq_dt = dsqrt(dt) ! Initialization energy = 0.d0 @@ -1718,7 +1716,7 @@ subroutine variational_montecarlo(a,tau,nmax,energy,accep_rate) do istep = 1,nmax call random_gauss(chi,3) - r_new(:) = r_old(:) + tau * d_old(:) + chi(:)*sq_tau + r_new(:) = r_old(:) + dt * d_old(:) + chi(:)*sq_dt call drift(a,r_new,d_new) d2_new = d_new(1)*d_new(1) + d_new(2)*d_new(2) + d_new(3)*d_new(3) psi_new = psi(a,r_new) @@ -1726,7 +1724,7 @@ subroutine variational_montecarlo(a,tau,nmax,energy,accep_rate) prod = (d_new(1) + d_old(1))*(r_new(1) - r_old(1)) + & (d_new(2) + d_old(2))*(r_new(2) - r_old(2)) + & (d_new(3) + d_old(3))*(r_new(3) - r_old(3)) - argexpo = 0.5d0 * (d2_new - d2_old)*tau + prod + argexpo = 0.5d0 * (d2_new - d2_old)*dt + prod q = psi_new / psi_old q = dexp(-argexpo) * q*q call random_number(u) @@ -1746,7 +1744,7 @@ end subroutine variational_montecarlo program qmc implicit none double precision, parameter :: a = 0.9 - double precision, parameter :: tau = 1.0 + double precision, parameter :: dt = 1.0 integer*8 , parameter :: nmax = 100000 integer , parameter :: nruns = 30 @@ -1755,7 +1753,7 @@ program qmc double precision :: ave, err do irun=1,nruns - call variational_montecarlo(a,tau,nmax,X(irun),accep(irun)) + call variational_montecarlo(a,dt,nmax,X(irun),accep(irun)) enddo call ave_error(X,nruns,ave,err) print *, 'E = ', ave, '+/-', err @@ -1845,7 +1843,7 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis - a rate equation for the potential. The diffusion equation can be simulated by a Brownian motion: - \[ \mathbf{r}_{n+1} = \mathbf{r}_{n} + \sqrt{\tau}\, \chi \] + \[ \mathbf{r}_{n+1} = \mathbf{r}_{n} + \sqrt{\delta t}\, \chi \] where $\chi$ is a Gaussian random variable, and the rate equation can be simulated by creating or destroying particles over time (a so-called branching process). @@ -1871,7 +1869,7 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis \left[ -\frac{1}{2} \Delta \psi(\mathbf{r},\tau) + V(\mathbf{r}) \psi(\mathbf{r},\tau) \right] \Psi_T(\mathbf{r}) \] - Defining $\Pi(\mathbf{r},t) = \psi(\mathbf{r},\tau) + Defining $\Pi(\mathbf{r},\tau) = \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r})$, \[ @@ -1881,10 +1879,15 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis \right] + E_L(\mathbf{r}) \Pi(\mathbf{r},\tau) \] + The new "kinetic energy" can be simulated by the drifted diffusion + scheme presented in the previous section (VMC). The new "potential" is the local energy, which has smaller fluctuations - as $\Psi_T$ tends to the exact wave function. The new "kinetic energy" - can be simulated by the drifted diffusion scheme presented in the - previous section (VMC). + when $\Psi_T$ gets closer to the exact wave function. It can be simulated by + changing the number of particles according to $\exp\left[ -\delta t\, + \left(E_L(\mathbf{r}) - E_\text{ref}\right)\right]$ + where $E_{\text{ref}}$ is a constant introduced so that the average + of this term is close to one, keeping the number of particles rather + constant. This equation generates the /N/-electron density $\Pi$, which is the product of the ground state with the trial wave function. It @@ -1895,7 +1898,7 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis systems where the wave function has nodes (systems with 3 or more electrons), this scheme introduces an error known as the /fixed node error/. - + *** Appendix : Details of the Derivation \[ @@ -1942,15 +1945,87 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis \right] + E_L(\mathbf{r}) \Pi(\mathbf{r},\tau) \] + +** Fixed-node DMC energy + + Now that we have a process to sample $\Pi(\mathbf{r},\tau) = + \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r})$, we can compute the exact + energy of the system, within the fixed-node constraint, as: + + \[ + E = \lim_{\tau \to \infty} \frac{\int \Pi(\mathbf{r},\tau) E_L(\mathbf{r}) d\mathbf{r}} + {\int \Pi(\mathbf{r},\tau) d\mathbf{r}} = \lim_{\tau \to + \infty} E(\tau). + \] + + Indeed, this is equivalent to + + \[ + E(\tau) = \frac{\int \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r}) E_L(\mathbf{r}) d\mathbf{r}} + {\int \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r}) d\mathbf{r}} + = \frac{\int \psi(\mathbf{r},\tau) \hat{H} \Psi_T(\mathbf{r}) d\mathbf{r}} + {\int \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r}) d\mathbf{r}} + = \frac{\langle \psi_\tau | \hat{H} | \Psi_T \rangle} + {\langle \psi_\tau | \Psi_T \rangle} + \] + + As $\hat{H}$ is Hermitian, + + \[ + E(\tau) = \frac{\langle \psi_\tau | \hat{H} | \Psi_T \rangle} + {\langle \psi_\tau | \Psi_T \rangle} + = \frac{\langle \Psi_T | \hat{H} | \psi_\tau \rangle} + {\langle \Psi_T | \psi_\tau \rangle} + = E[\psi_\tau] \frac{\langle \Psi_T | \psi_\tau \rangle} + {\langle \Psi_T | \psi_\tau \rangle} + = E[\psi_\tau] + \] + + So computing the energy within DMC consists in generating the + density $\Pi$, and simply averaging the local energies computed + with the trial wave function. + ** Pure Diffusion Monte Carlo + Instead of having a variable number of particles to simulate the + branching process, one can choose to sample $[\Psi_T(\mathbf{r})]^2$ instead of + $\psi(\mathbf{r},\tau) \Psi_T(\mathbf{r})$, and consider the term + $\exp \left( -\delta t\,( E_L(\mathbf{r}) - E_{\text{ref}} \right)$ as a + cumulative product of branching weights: + + \[ + W(\mathbf{r}_n, \tau) + = \exp \left( \int_0^\tau - (E_L(\mathbf{r}_t) - E_{\text{ref}}) dt \right) + \approx \prod_{i=1}^{n} \exp \left( -\delta t\, (E_L(\mathbf{r}_i) - E_{\text{ref}}) \right). + \] + + The wave function becomes + + \[ + \psi(\mathbf{r},\tau) = \Psi_T(\mathbf{r}) W(\mathbf{r},\tau) + \] + + and the expression of the fixed-node DMC energy is + + \begin{eqnarray*} + E(\tau) & = & \frac{\int \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r}) E_L(\mathbf{r}) d\mathbf{r}} + {\int \psi(\mathbf{r},\tau) \Psi_T(\mathbf{r}) d\mathbf{r}} \\ + & = & \frac{\int \left[ \Psi_T(\mathbf{r}) \right]^2 W(\mathbf{r},\tau) E_L(\mathbf{r}) d\mathbf{r}} + {\int \left[ \Psi_T(\mathbf{r}) \right]^2 W(\mathbf{r},\tau) d\mathbf{r}} \\ + \end{eqnarray*} + + This algorithm is less stable than the branching algorithm: it + requires to have a value of $E_\text{ref}$ which is close to the + fixed-node energy, and a good trial wave function. Its big + advantage is that it is very easy to program starting from a VMC code. + ** TODO Hydrogen atom *** Exercise #+begin_exercise Modify the Metropolis VMC program to introduce the PDMC weight. - In the limit $\tau \rightarrow 0$, you should recover the exact + In the limit $\delta t \rightarrow 0$, you should recover the exact energy of H for any value of $a$. #+end_exercise @@ -2094,7 +2169,7 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis : A = 0.78861366666666655 +/- 3.5096729498002445E-004 -** TODO Dihydrogen +** TODO H_2 We will now consider the H_2 molecule in a minimal basis composed of the $1s$ orbitals of the hydrogen atoms: @@ -2108,7 +2183,7 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc_metropolis.f90 -o vmc_metropolis the nuclei. -* Appendix :noexport: +* Old sections to be removed :noexport: ** Gaussian sampling :noexport: :PROPERTIES: diff --git a/docs/org-info.js b/docs/org-info.js new file mode 100644 index 0000000..91e61e3 --- /dev/null +++ b/docs/org-info.js @@ -0,0 +1,288 @@ +function OrgNode(e,h,f,g,d,b,j){var i=this;i.D=e;i.I=b;i.J=-1;i.H=h;i.L=f;i.HH=false; +i.P=d;i.DRT=false;i.ST=OrgNode.SF;i.TOC=j;i.DEPTH=g;i.F=null;i.CH=new Array();i.NAV=""; +i.BS=null;if(null!=i.P){i.P.addChild(this);i.hide();}var a=document.getElementById("text-"+i.I); +if(null==a&&b){var c=b.substring(4);a=document.getElementById("text-"+c);}if(null!=a){i.F=a; +}i.iTF=new Object();i.iTF["#"+i.I]=2;OrgNode.fTI(i.iTF,i.H,1);OrgNode.fTI(i.iTF,i.F,3); +}OrgNode.SF=0;OrgNode.SH=1;OrgNode.SU=2;OrgNode.fTI=function(f,c,e){if(c){var b=c.getElementsByTagName("a"); +if(b){for(var d=0;d2){this.P.show(); +}};OrgNode.prototype.sAC=function(){for(var a=0;a]+>/i,ORGTAGX:/^(.*)(]+>[^<]+<\/span>)+<\/span>/i,TRIMMER:/^(\s*)([^\s].*)(\s*)$/,TOC:null,RUNS:0,H:new Array(50),HI:0,SKIP_H:false,FIXED_TOC:false,C:null,CI:null,CL:null,CO:"50px",OCCUR:"",SCX:"",SC_HLX:new RegExp('()([^<]*?)()',"gi"),Mg:0,MgI:1,MgT:2,Hg:false,Rg:false,RC:"",RC_NULL:"_0",RC_H:"_1",RC_O:"_2",RC_P:"_03",LVM:0,TAB_INDEX:1000,SHO:false,TAGS:{},ST:new Array(),TAGS_INDEX:null,CTO:null,SN_MAP:{},TL:null,HOOKS:{run_hooks:false,onShowSection:[],onReady:[]},setup:function(){var d=this; +if(window.orgInfoHooks){for(var c in orgInfoHooks){d.HOOKS[c]=orgInfoHooks[c];}d.HOOKS.run_hooks=false; +}if(location.search){var e=location.search.substring(1).split("&");for(var c=0;cUp / ':"")+((d.LINK_HOME&&d.LINK_HOME!=document.URL)?'HOME / ':"")+'HELP / '; +d.LOAD_CHECK=window.setTimeout("OrgHtmlManagerLoadCheck()",50);},trim:function(a){var b=this.TRIMMER.exec(a); +return RegExp.$2;},rT:function(a){if(a){while(a.match(this.UNTAGX)){a=a.substr(0,a.indexOf("<"))+a.substr(a.indexOf(">")+1); +}}return a;},rOT:function(a){if(a.match(this.ORGTAGX)){var b=this.ORGTAGX.exec(a); +return b[1];}return a;},init:function(){var m=this;m.RUNS++;m.B=document.getElementById("content"); +if(null==m.B){if(5>m.RUNS){m.LOAD_CHECK=window.setTimeout("OrgHtmlManagerLoadCheck()",m.RUN_INTERVAL); +return;}else{m.B=document.getElementsByTagName("body")[0];}}if(!m.W){m.W=document.createElement("div"); +m.W.style.marginBottom="40px";m.W.id="org-info-js-window";}var l=document.getElementById("table-of-contents"); +if(!m.initFromTOC()){if(m.RUNS
 
 
'; +m.C.style.position="relative";m.C.style.marginTop="-"+m.CO;m.C.style.top="-"+m.CO; +m.C.style.left="0px";m.C.style.width="100%";m.C.style.height="40px";m.C.style.overflow="hidden"; +m.C.style.verticalAlign="middle";m.C.style.zIndex="9";m.C.style.border="0px solid #cccccc"; +m.C.id="org-info-js_console-container";m.B.insertBefore(m.C,m.B.firstChild);m.Mg=false; +m.CL=document.getElementById("org-info-js_console-label");m.CI=document.getElementById("org-info-js_console-input"); +document.onkeypress=OrgHtmlManagerKeyEvent;if(m.VIEW==m.INFO_VIEW){m.iV(d);m.ss(d); +window.setTimeout(function(){window.scrollTo(0,0);},100);}else{if(m.VIEW==m.SLIDE_VIEW){m.sV(d); +m.ss(d);}else{var k=m.VIEW;m.pV(d,1);m.R.DRT=true;m.R_STATE=OrgNode.SU;m.tG();if(k>m.PLAIN_VIEW){m.tG(); +}if(k==m.ALL_VIEW){m.tG();}if(f){m.ss(d);}}}if(""!=m.OCCUR){m.CI.value=m.OCCUR;m.RC="o"; +m.eRC();}if(m.STARTUP_MESSAGE){m.warn("This page uses org-info.js. Press '?' for more information.",true); +}m.HOOKS.run_hooks=true;m.runHooks("onReady",this.N);},initFromTOC:function(){var k=this; +if(k.RUNS==1||!k.R){var b=document.getElementById("table-of-contents");if(null!=b){var m=null; +var d=0;for(d;m==null&&d<7;++d){m=b.getElementsByTagName("h"+d)[0];}m.onclick=function(){org_html_manager.fold(0); +};m.style.cursor="pointer";if(k.MOUSE_HINT){m.onmouseover=function(){org_html_manager.hH(0); +};m.onmouseout=function(){org_html_manager.unhH(0);};}if(k.FIXED_TOC){m.setAttribute("onclick","org_html_manager.tG();"); +k.R=new OrgNode(null,k.B.getElementsByTagName("h1")[0],"javascript:org_html_manager.go(0);",0,null); +k.TOC=new OrgNode(b,m,"javascript:org_html_manager.go(0);",d,null);k.N=k.R;}else{k.R=new OrgNode(null,k.B.getElementsByTagName("h1")[0],"javascript:org_html_manager.go(0);",0,null); +if(k.HIDE_TOC){k.TOC=new OrgNode(b,"","javascript:org_html_manager.go(0);",d,null); +k.N=k.R;OrgNode.hE(b);}else{k.TOC=new OrgNode(b,m,"javascript:org_html_manager.go(0);",d,k.R); +k.TOC.J=0;k.N=k.TOC;k.S.push(k.TOC);}}if(k.TOC){k.TOC.F=document.getElementById("text-table-of-contents"); +}}else{return false;}}var j=k.TOC.F.getElementsByTagName("ul")[0];if(!k.ulToOutlines(j)){return false; +}var h=document.getElementById("footnotes");if(h){var a=null;var f=h.childNodes;for(var d=0; +dthis.TOC_DEPTH){a.removeChild(g); +}else{this.cutToc(g,f);}}}}}},mkNodeFromHref:function(g){s=g.href;if(s.match(this.REGEX)){var k=this.REGEX.exec(s); +var c=k[2];var l=document.getElementById(c);if(null==l){return(false);}var a=l.parentNode; +var m=this.S.length;var f=a.className.substr(8);l.onclick=function(){org_html_manager.fold(""+m); +};l.style.cursor="pointer";if(this.MOUSE_HINT){l.onmouseover=function(){org_html_manager.hH(""+m); +};l.onmouseout=function(){org_html_manager.unhH(""+m);};}var o="javascript:org_html_manager.go("+m+")"; +if(f>this.N.DEPTH){this.N=new OrgNode(a,l,o,f,this.N,c,g);}else{if(f==2){this.N=new OrgNode(a,l,o,f,this.R,c,g); +}else{var b=this.N;while(b.DEPTH>f){b=b.P;}this.N=new OrgNode(a,l,o,f,b.P,c,g);}}this.S.push(this.N); +var n=l.getElementsByTagName("span");if(n){for(var e=0;e'+this.LINKS+'toggle view'; +if(d>0){c+='Previous | '; +}else{c+="Previous | ";}if(dNext'; +}else{c+="Next";}c+=''; +if(d>0&&this.S[d].P.P){c+=''+this.S[d].P.H.innerHTML+""; +}else{c+=''+this.S[d].H.innerHTML+""; +}c+=''; +c+=(d+1)+"";this.S[d].BS=document.createElement("div");this.S[d].BS.innerHTML='
'+this.LINKS+'toggle view
'; +if(this.S[d].F){this.S[d].D.insertBefore(this.S[d].BS,this.S[d].H);}else{if(this.S[d].D.hasChildNodes()){this.S[d].D.insertBefore(this.S[d].BS,this.S[d].D.firstChild); +}}if(!this.VIEW_BUTTONS){OrgNode.hE(this.S[d].BS);}this.S[d].NAV=c;if(0'+this.rT(this.rOT(this.S[d].CH[b].H.innerHTML))+""; +}c+="";a.innerHTML=c;if("above"==this.LOCAL_TOC){if(this.S[d].F){this.S[d].F.insertBefore(a,this.S[d].F.firstChild); +}else{this.S[d].D.insertBefore(a,this.S[d].D.getElementsByTagName("h"+this.S[d].DEPTH)[0].nextSibling); +}}else{if(this.S[d].F){this.S[d].F.appendChild(a);}else{this.S[d].D.appendChild(a); +}}}}this.ST.sort();},set:function(eval_key,eval_val){if("VIEW"==eval_key){var pos=eval_val.indexOf("_"); +if(-1!=pos){this.IT=eval_val.substr(pos+1);eval_val=eval_val.substr(0,pos);}var overview=this.PLAIN_VIEW; +var content=this.CONTENT_VIEW;var showall=this.ALL_VIEW;var info=this.INFO_VIEW;var info_title_above=this.INFO_VIEW; +var slide=this.SLIDE_VIEW;eval("this."+eval_key+"="+eval_val+";");}else{if("HELP"==eval_key){eval("this.STARTUP_MESSAGE="+eval_val+";"); +}else{if(eval_val){eval("this."+eval_key+"='"+eval_val+"';");}else{eval("this."+eval_key+"=0;"); +}}}},convertLinks:function(){var f=(this.HIDE_TOC?0:1);var e;var a=this.S.length-1; +var d=document.getElementsByTagName("a");for(e=0;ethis.N.J){d=true; +}if(null==g){d=true;}if(d){for(var a=this.S[f].F.firstChild;null!=a;a=a.nextSibling){if("UL"==a.nodeName){var j=a.getElementsByTagName("li"); +for(var c=1;c0){if(OrgNode.isHidden(b)){OrgNode.uhE(b);if(c<(j.length-1)){k=false; +}if(00){b.go(a-1);}else{b.warn("Already first section.");}},go:function(b){var a=this; +if(a.Rg){a.eR();a.hC();}else{if(a.Mg){a.rW();}}if(a.VIEW==a.SLIDE_VIEW){a.adjustSlide(b); +}a.puH(b,a.N.J);a.ss(b);},puH:function(c,a){var b=this;if(!b.SKIP_H){b.H[b.HI]=new Array(c,a); +b.HI=(b.HI+1)%50;}b.SKIP_H=false;b.CI.value="";},poH:function(c){var a=this;if(c){if(a.H[a.HI]){var b=parseInt(a.H[a.HI][0]); +if(!isNaN(b)||"?/toc/?"==a.H[a.HI][0]){a.ss(a.H[a.HI][0]);a.CI.value="";}else{a.SKIP_H=true; +a.CI.value=a.H[a.HI][0];a.getKey();}a.HI=(a.HI+1)%50;a.HBO=0;}else{if(a.HFO&&history.length){history.forward(); +}else{a.HFO=1;a.warn("History: No where to foreward go from here. Any key and `B' to move to next file in history."); +}}}else{if(a.H[a.HI-1]){a.HI=a.HI==0?49:a.HI-1;var b=parseInt(a.H[a.HI][1]);if(!isNaN(b)||"?/toc/?"==a.H[a.HI][1]){a.ss(a.H[a.HI][1]); +a.CI.value="";}else{a.SKIP_H=true;a.CI.value=a.H[a.HI][1];a.getKey();}a.HFO=0;}else{if(a.HBO&&history.length){history.back(); +}else{a.HBO=1;a.warn("History: No where to back go from here. Any key and `b' to move to previous file in history."); +}}}},warn:function(c,d,b){var a=this;if(null==b){b="";}a.CI.value=b;if(!d){a.CL.style.color="red"; +}a.CL.innerHTML=""+c+"(press any key to proceed)"; +a.sC();window.setTimeout(function(){org_html_manager.CI.value=b;},50);},sR:function(e,b,d,a){var c=this; +if(null==d){d="";}if(null==a){a="";}c.RC=e;c.Rg=true;c.CL.innerHTML=""+b+"("+a+"RET to close)"; +c.sC();document.onkeypress=null;c.CI.focus();c.CI.onblur=function(){org_html_manager.CI.focus(); +};window.setTimeout(function(){org_html_manager.CI.value=d;},50);},eR:function(c,a){var b=this; +b.Rg=false;b.RC="";b.CI.onblur=null;b.CI.blur();document.onkeypress=OrgHtmlManagerKeyEvent; +},rW:function(){var a=this;a.CL.style.color="#333333";a.hC();},sC:function(){var a=this; +if(!a.Mg){if(a.VIEW==a.PLAIN_VIEW){a.B.removeChild(a.B.firstChild);a.N.D.insertBefore(a.C,a.N.D.firstChild); +a.N.D.scrollIntoView(true);a.Mg=a.MgI;}else{a.Mg=a.MgT;window.scrollTo(0,0);}a.C.style.marginTop="0px"; +a.C.style.top="0px";}},hC:function(){var a=this;if(a.Mg){a.C.style.marginTop="-"+a.CO; +a.C.style.top="-"+a.CO;a.CL.innerHTML="";a.CI.value="";if(a.MgI==a.Mg){a.N.D.removeChild(a.N.D.firstChild); +a.B.insertBefore(a.C,a.B.firstChild);if(a.N.J!=0){a.N.D.scrollIntoView();}}a.Mg=false; +}},getKey:function(){var b=this;var c=b.CI.value;if(0==c.length){if(b.Hg){b.showHelp(); +return;}if(b.Mg&&!b.Rg){b.rW();}return;}if(b.Mg&&!b.Rg){b.rW();return;}else{if(b.Hg){b.showHelp(); +b.CI.value="";return;}else{if(b.Rg){return;}}}b.CI.value="";b.CI.blur();if(b.HIDE_TOC&&b.TOC==b.N&&"v"!=c&&"V"!=c&&"\t"!=c){c="b"; +}else{if("\t"==c){return true;}else{c=b.trim(c);}}if(1==c.length){if("b"==c){b.poH(); +}else{if("B"==c){b.poH(true);}else{if("c"==c){b.rSH();if(b.VIEW==b.INFO_VIEW||b.VIEW==b.SLIDE_VIEW){b.ss(b.N.J); +}}else{if("i"==c){if(!b.FIXED_TOC){if(b.HIDE_TOC){b.go("?/toc/?");}else{if(0!=b.N.J){b.go(0); +}}}if(null!=b.TL){b.TL.focus();}}else{if("m"==c){b.toggleView(b.N.J);return;}else{if("x"==c){b.sV(b.N.J); +}else{if("n"==c){if(b.N.ST==OrgNode.SF&&b.VIEW==b.PLAIN_VIEW){b.ss(b.N.J);}else{if(b.N.J=e){if(b.S[a].DEPTH==e){b.go(a); +return;}++a;}}b.warn("No next sibling.");return;}else{if("p"==c){if(b.N.J>0){b.go(b.N.J-1); +}else{b.warn("Already first section.");return;}}else{if("P"==c){if(b.N.J>0){var e=b.N.DEPTH; +var a=b.N.J-1;while(a>=0&&b.S[a].DEPTH>=e){if(b.S[a].DEPTH==e){b.go(a);return;}--a; +}}b.warn("No previous sibling.");}else{if("q"==c){if(window.confirm("Really close this file?")){window.close(); +}}else{if("<"==c||"t"==c){if(0!=b.N.J){b.go(0);}else{window.scrollTo(0,0);}}else{if(">"==c||"E"==c||"e"==c){if((b.S.length-1)!=b.N.J){b.go(b.S.length-1); +}else{b.S[b.S.length-1].D.scrollIntoView(true);}}else{if("v"==c){if(window.innerHeight){window.scrollBy(0,window.innerHeight-30); +}else{if(document.documentElement.clientHeight){window.scrollBy(0,document.documentElement.clientHeight-30); +}else{window.scrollBy(0,document.body.clientHeight-30);}}}else{if("V"==c){if(window.innerHeight){window.scrollBy(0,-(window.innerHeight-30)); +}else{if(document.documentElement.clientHeight){window.scrollBy(0,-(document.documentElement.clientHeight-30)); +}else{window.scrollBy(0,-(document.body.clientHeight-30));}}}else{if("u"==c){if(b.N.P!=b.R){b.N=b.N.P; +b.ss(b.N.J);}}else{if("W"==c){b.pV(b.N.J);b.R.DRT=true;b.R_STATE=OrgNode.SU;b.tG(); +b.tG();b.tG();window.print();}else{if("f"==c){if(b.VIEW!=b.INFO_VIEW){b.N.fold(); +b.N.D.scrollIntoView(true);}}else{if("F"==c){if(b.VIEW!=b.INFO_VIEW){b.tG();b.N.D.scrollIntoView(true); +}}else{if("?"==c||"¿"==c){b.showHelp();}else{if("C"==c){if(b.ST.length){b.showTagsIndex(); +}else{b.warn("No Tags found.");}}else{if("H"==c&&b.LINK_HOME){window.document.location.href=b.LINK_HOME; +}else{if("h"==c&&b.LINK_UP){window.document.location.href=b.LINK_UP;}else{if("l"==c){if(""!=b.OCCUR){b.sR(b.RC_H,"Choose HTML-link type: 's' = section, 'o' = occur"); +}else{b.sR(c,"HTML-link:",''+document.title+", Sec. '"+b.rT(b.N.H.innerHTML)+"'","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}return;}else{if("L"==c){if(""!=b.OCCUR){b.sR(b.RC_O,"Choose Org-link type: 's' = section, 'o' = occur"); +}else{b.sR(c,"Org-link:","[["+b.BU+b.dT()+"]["+document.title+", Sec. '"+b.rT(b.N.H.innerHTML)+"']]","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}return;}else{if("U"==c){if(""!=b.OCCUR){b.sR(b.RC_P,"Choose Org-link type: 's' = section, 'o' = occur"); +}else{b.sR(c,"Plain URL Link:",b.BU+b.dT(),"C-c to copy, ");window.setTimeout(function(){org_html_manager.CI.select(); +},100);}return;}else{if("g"==c){b.sR(c,"Enter section number:");return;}else{if("o"==c){if(""!=b.OCCUR){b.sR(c,"Occur:",b.OCCUR,"RET to use previous, DEL "); +}else{b.sR(c,"Occur:",b.OCCUR);}window.setTimeout(function(){org_html_manager.CI.value=org_html_manager.OCCUR; +org_html_manager.CI.select();},100);return;}else{if("s"==c){if(""!=b.OCCUR){b.sR(c,"Search forward:",b.OCCUR,"RET to use previous, DEL "); +}else{b.sR(c,"Search forward:",b.OCCUR);}window.setTimeout(function(){org_html_manager.CI.value=org_html_manager.OCCUR; +org_html_manager.CI.select();},100);return;}else{if("S"==c){if(""==b.OCCUR){c="s"; +b.sR(c,"Search forward:");}else{b.RC=c;b.eRC();}return;}else{if("r"==c){if(""!=b.OCCUR){b.sR(c,"Search backwards:",b.OCCUR,"RET to use previous, DEL "); +}else{b.sR(c,"Search backwards:",b.OCCUR);}window.setTimeout(function(){org_html_manager.CI.value=org_html_manager.OCCUR; +org_html_manager.CI.select();},100);return;}else{if("R"==c){if(""==b.OCCUR){c="r"; +b.sR(c,"Search backwards:");}else{b.RC=c;b.eRC();}return;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}return; +},eRC:function(){var j=this;var a=j.RC;var k=j.trim(j.CI.value);j.eR();if(""==a||""==k){j.hC(); +return;}if(a=="g"){var f=j.SN_MAP[k];if(null!=f){j.hC();j.go(f.J);return;}j.warn("Goto section: no such section.",false,k); +return;}else{if(a=="s"){if(""==k){return false;}if(j.SHO){j.rSH();}var g=j.OCCUR; +var e=0;if(k==j.OCCUR){e++;}j.OCCUR=k;j.mSR();for(var d=j.N.J+e;d-1;--d){if(j.sIO(d)){j.hC(); +j.go(j.S[d].J);return;}}j.warn("Search backwards: text not found.",false,j.OCCUR); +j.OCCUR=g;return;}else{if(a=="R"){for(var d=j.N.J-1;d>-1;--d){k=j.rT(j.S[d].H.innerHTML); +if(j.sIO(d)){j.hC();j.go(j.S[d].J);return;}}j.warn("Search backwards: text not found.",false,j.OCCUR); +return;}else{if(a=="o"){if(""==k){return false;}if(j.SHO){j.rSH();}var g=j.OCCUR; +j.OCCUR=k;j.mSR();var b=new Array();for(var d=0;d=1;--d){OrgNode.sE(j.S[b[d]].F); +}j.ss(b[0]);}else{if(a==j.RC_O){var h=k.charAt(0);if("s"==h){j.sR(j.RC_NULL,"Org-link to this section:","[["+j.BU+j.dT()+"]["+document.title+", Sec. '"+j.rT(j.N.H.innerHTML)+"']]","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{if("o"==h){j.sR(j.RC_NULL,"Org-link, occurences of ""+j.OCCUR+"":","[["+j.BU+"?OCCUR="+j.OCCUR+"]["+document.title+", occurences of '"+j.OCCUR+"']]","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{j.warn(h+": No such link type!"); +}}}else{if(a==j.RC_H){var h=k.charAt(0);if("s"==h){j.sR(j.RC_NULL,"HTML-link to this section:",''+document.title+", Sec. '"+j.rT(j.N.H.innerHTML)+"'","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{if("o"==h){j.sR(j.RC_NULL,"HTML-link, occurences of ""+j.OCCUR+"":",''+document.title+", occurences of '"+j.OCCUR+"'","C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{j.warn(h+": No such link type!"); +}}}else{if(a==j.RC_P){var h=k.charAt(0);if("s"==h){j.sR(j.RC_NULL,"Plain-link to this section:",j.BU+j.dT(),"C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{if("o"==h){j.sR(j.RC_NULL,"Plain-link, occurences of ""+j.OCCUR+"":",j.BU+"?OCCUR="+j.OCCUR,"C-c to copy, "); +window.setTimeout(function(){org_html_manager.CI.select();},100);}else{j.warn(h+": No such link type!"); +}}}}}}}}}}}},dT:function(b){if(null==b){b=this.N;}var c="#"+this.N.I;for(var a in b.iTF){if(!a.match(this.SIDX)){c=a; +break;}}return c;},mSR:function(){var a=this.OCCUR.replace(/>/g,">").replace(/]").replace(/\"/g,"""); +this.SCX=new RegExp(">([^<]*)?("+a+")([^>]*)?<","ig");},sIO:function(c){var b=this; +var a=false;if(null!=b.S[c]){if(b.SCX.test(b.S[c].H.innerHTML)){a=true;b.sSH(b.S[c].H); +b.S[c].HH=true;b.SHO=true;}if(b.SCX.test(b.S[c].F.innerHTML)){a=true;b.sSH(b.S[c].F); +b.S[c].HH=true;b.SHO=true;}return a;}return false;},sSH:function(b){var a=b.innerHTML; +b.innerHTML=a.replace(this.SCX,'>$1$2$3<'); +},rSH:function(){var c=this;for(var b=0;bclick here to proceed.

Keyboard Shortcuts

org-info.js, v. 0.1.7.1
? / ¿show this help screen
Moving around
n / pgoto the next / previous section
N / Pgoto the next / previous sibling
t / Egoto the first / last section
ggoto section...
ugo one level up (parent section)
i / Cshow table of contents / tags index
b / Bgo back to last / forward to next visited section.
h / Hgo to main index in this directory / link HOME page
View
m / xtoggle the view mode between info and plain / slides
f / Ffold current section / whole document (plain view only)
Searching
s / rsearch forward / backward....
S / Rsearch again forward / backward
ooccur-mode
cclear search-highlight
Misc
l / L / Udisplay HTML link / Org link / Plain-URL
v / Vscroll down / up
WPrint

Press any key or click here to proceed.'; +window.scrollTo(0,0);}else{if(a.PLAIN_VIEW==a.LVM){a.pV();}else{if(a.SLIDE_VIEW==a.LVM){a.sV(); +}}a.ss(a.N.J);}},showTagsIndex:function(){var e=this;if(e.Rg){e.eR();}else{if(e.Mg){e.rW(); +}}e.Hg=e.Hg?0:1;if(e.Hg){e.LVM=e.VIEW;if(e.PLAIN_VIEW==e.VIEW){e.iV(true);}if(null==e.TAGS_INDEX){e.TAGS_INDEX='Press any key or click here to proceed.

Click the headlines to expand the contents.

Index of Tags

'; +for(var d=0;d

"+b+'

";}e.TAGS_INDEX+='
Press any key or click here to proceed.'; +}e.W.innerHTML=e.TAGS_INDEX;window.scrollTo(0,0);}else{if(e.PLAIN_VIEW==e.LVM){e.pV(); +}else{if(e.SLIDE_VIEW==e.LVM){e.sV();}}e.ss(e.N.J);}},runHooks:function(b,a){if(this.HOOKS.run_hooks&&this.HOOKS[b]){for(var c=0; +c=0; +--b){if(this.HOOKS[a][b]==c){this.HOOKS[a].splice(b,1);}}}}};function OrgHtmlManagerKeyEvent(b){var d; +if(!b){b=window.event;}if(b.which){d=b.which;}else{if(b.keyCode){d=b.keyCode;}}if(b.ctrlKey){return; +}var a=String.fromCharCode(d);if(b.shiftKey){org_html_manager.CI.value=org_html_manager.CI.value+a; +}else{org_html_manager.CI.value=org_html_manager.CI.value+a.toLowerCase();}org_html_manager.getKey(); +}function OrgHtmlManagerLoadCheck(){org_html_manager.init();} \ No newline at end of file