From 514169ec583156fbf6962d014c725937e83477be Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:40:52 +0100
Subject: [PATCH 01/12] Added redmund style for jquery-ui

---
 .../images/ui-bg_flat_0_aaaaaa_40x100.png     | Bin 0 -> 180 bytes
 .../images/ui-bg_flat_55_fbec88_40x100.png    | Bin 0 -> 182 bytes
 .../images/ui-bg_glass_75_d0e5f5_1x400.png    | Bin 0 -> 124 bytes
 .../images/ui-bg_glass_85_dfeffc_1x400.png    | Bin 0 -> 123 bytes
 .../images/ui-bg_glass_95_fef1ec_1x400.png    | Bin 0 -> 119 bytes
 .../ui-bg_gloss-wave_55_5c9ccc_500x100.png    | Bin 0 -> 3457 bytes
 .../ui-bg_inset-hard_100_f5f8f9_1x100.png     | Bin 0 -> 104 bytes
 .../ui-bg_inset-hard_100_fcfdfd_1x100.png     | Bin 0 -> 88 bytes
 .../images/ui-icons_217bc0_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_2e83ff_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_469bdd_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_6da8d5_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_cd0a0a_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_d8e7f3_256x240.png        | Bin 0 -> 4369 bytes
 .../images/ui-icons_f9bd01_256x240.png        | Bin 0 -> 4369 bytes
 media/css/redmond/jquery-ui-1.8.14.custom.css | 568 ++++++++++++++++++
 16 files changed, 568 insertions(+)
 create mode 100644 media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
 create mode 100644 media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png
 create mode 100644 media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
 create mode 100644 media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png
 create mode 100644 media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png
 create mode 100644 media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
 create mode 100644 media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
 create mode 100644 media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
 create mode 100644 media/css/redmond/images/ui-icons_217bc0_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_2e83ff_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_469bdd_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_6da8d5_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_cd0a0a_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_d8e7f3_256x240.png
 create mode 100644 media/css/redmond/images/ui-icons_f9bd01_256x240.png
 create mode 100644 media/css/redmond/jquery-ui-1.8.14.custom.css

diff --git a/media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/media/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4
GIT binary patch
literal 180
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^
z$vje}<irI&an_s0pV!D+$FtuP31JO&3=I&aE+u|=5A)Hv$*VMh&S3C#^>bP0l+XkK
DSH>_4

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png b/media/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..47acaadd737478ddb090f47f618810712163317b
GIT binary patch
literal 182
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fsaj7L$B>N1x91EQ8x$BA993)+
za~~)OO5|O5sDCi_{N8&XlRv*c;OQ6|AR59NN?mFzWBXJVGojypu|S6~c)I$ztaD0e
F0syyrGF|`x

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png b/media/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fb564f8d0a117f17aa6b844490309dadbd94821
GIT binary patch
literal 124
zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|on978O6-=0_GYj6;7zWBfT
zzjhI`OjAO{6(N>+Em!s|xjZW|^1EO|(5d{JeUmv{p6fa-GJh;t>KCH4`R~7(L8qj}
Y_egNRQF(If70@^aPgg&ebxsLQ0Qgob)Bpeg

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/media/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..014951529c315d6042e72febc310a4d2db5b4a82
GIT binary patch
literal 123
zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|lm978O6-<~(*YA_IRxoBVf
zfAX@vsV!R#l$@#*eLnw)_Sv|_?i7P!ORnX)SxaXh+BPpZ!Fw~yjr&#G|Jw^YMHDhV
X&EsZx`7bsSXc~j3tDnm{r-UW|&(SK+

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/media/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab
GIT binary patch
literal 119
zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER
z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38&#8k_!`W=^oo1w6ixmPC4R1b
Tyd6G3lNdZ*{an^LB{Ts5`idse

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/media/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..81ecc362d50ef5abbc0420aacd5345822f1f6098
GIT binary patch
literal 3457
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
POMny9)vos2J3syt(aqlh

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/media/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f3faf8aa8b1054ef1b18b80ab58f670b406a794
GIT binary patch
literal 104
zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l)k5nV~E7m<R8BtKd)C~V`FPe
z^ffRtGB7YSFfcMOd?b?G;%#7X=!+3wPjRL<14F_FmL0`{@$Z0I89ZJ6T-G@yGywp_
Co*P~O

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/media/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..38c38335d0919ceb7b0dd09e88a86be90a966ef3
GIT binary patch
literal 88
zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l)R^lV~E7m<R72EzpqzgV`FO*
mbT@c3B{fBc=iOpSMuu`pmi>1R+}Z$C%HZkh=d#Wzp$Pz8A{XNT

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_217bc0_256x240.png b/media/css/redmond/images/ui-icons_217bc0_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f4bd87c041453ef037c4a9a1a698f0105d02eba
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_2e83ff_256x240.png b/media/css/redmond/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_469bdd_256x240.png b/media/css/redmond/images/ui-icons_469bdd_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd2cf079add1ca236adeb509698adabbffb08acb
GIT binary patch
literal 4369
zcmd^?`8O2)_s3^p#%>t<I$5%B*(%$RifAlJDl()+*_W)tkR^Mivc*^<vL;zGk~JZc
zvCJ4vq%n2|WBYo)Ki|(^@p+urx%YK{x#!$_?me&PE5RCdk&{h?4FCXenwy#00sz3{
zD`1rcd~6Bkmv)cclC`DXdDHCa|DDrcAYFJ|I4Zyvbp;><JH^Ce-TpXBRm#o>c^56h
z`;7ykFJNMJN#e#ybz9|Ft@x<U2Yo|5r%lD$n!+nSl%%|^d@p~1lUZSdfYORwUlvq*
z%;a7$^on?P|Ne;C0RX@qYi??67yNq3DaCcFfd|rORz4T=TqVq%cEjTAy^ZG{568VK
zvsK=X2AGd;k&b*JSSDX11mb+1%+!vXg&|00*-)ZG5Afn;e{U}V%x6uz5t~~GAoxRm
z+E-)mpWw>`UI}T5QRij?pZ}<iF>6v#Srs793k0w~#4dRsO_y8vaKB*UbCk3l9Lh&v
zS5!q|FV83GvJ|wlWy2IQI27&mA~vn>kbZHR1lRB?uEUiLWJ2Rgpr(9;PtX|H61Y%8
z>>Yvu=(<$fHnjpCX`E;Qw8u0=3KGsNhap}(`<L3D#x*ma9$(ls<d=1+Q*sdCDidxB
zF3Al8n=lq`mdNB|5lB1on0vF?nA-1I*NKud44w271(6OEGhejn`Qjc$+d;r9Y$Yeu
zjNASMPIh9Fmja9})Ei#^vD&dbIxAJU#-IS#*(Tg2pLRR7v%CF2G_FPF!@gmyko^zv
zG;MCgW}3(*Yl5vSv`Gvp|KfD^G~d)Yw|IJ2`7p7dT6r327lm|hJs9S3WlHe#Rd<Q<
z;Bq*z$=3jV!Ke|>ul7lx-)UB6U7Rt{a^<^*Xbmf7)2^xf*8T2&U<6)1vO~m1F!2^L
zin5`}H)*h3_*XzG*7fMOwuHkuK2hW)$!EE#jpyRaiy2tEzf~(B-PTBkPS$@K<m+5}
zSocG_ljAK?*^jlWpzm$D=|+V@jU9L`JkRQNEFW@?%?hQ$GnUnV(8tPDx?S@8*VBU~
z==x1BB#mGTY%R!g*yJ<!1Sb)b<beqvW(zJL`jIb;YF7=^Nxb<iK7p3cGWG6B$c)S)
zbp}7iYznf)Sb(8uk^Td);c$Bk0(l=XRy4QIYXOJZW4(CzdAp=s-bhuXvG2;lJfcOB
zs=!AHGHOw)S8r|pgmGLHg!Y~VLZ#8U==|phY+&>|y8w%~JYu8>vRGGA=Z$>guC|z6
zYkPw1&xf?FV0;xWt*`eV2oI-ePL2>on#}}WB8O9XBtD6GWYHw9TuY06(#pZ&TR3xK
zNc7;n$4wnDC1?2MVtE1Zp2zT~^LboWF^niS1c$xMo}Gq?!`2q?IncFGB{AFxiTH7M
zW6Wg6!H-Orl|zm+8G{^~&Fg2IE-7Q;uqGzAXEz)n_H1kYekmQLMJ)H_N1Ou8dug}I
zg*SK#Fw;F<!rp`9Z@f7^UD15ZDy3I6v<>agf;H2=cerAvd2^*^YFJ_1850U&t}@Ts
z-Ut9ox+Q;6E(XDZh@X=Gp(SPg)l4tQCH^(ZRf@E#KwlZPL;7ULUU0tSrvtn6Xt=Bl
zG)w2|kn&t0Rld8d(t&f+-Jt5c7!Jl(SI2y<(E*K?=rQ%uV%4h0>FKm&7~0UnkICBc
z3tgbbnW=GN@m656hHUzj6+go+`f^?6f@&?MiRslUz(!JYo`t%GZBP|O5#B?8Q!s!E
z9<c(2wv1In>^Ae>??aVeK~d<8G-`&+;~iK=r$D=se~1hP`y1FFARfPyp)iel=Nft8
znC=6UJHKKc>@v6^BHUgm$;1MCFRkRU9c7-T4r93DR+husFU7$gur@@f0$OZ1L9tGX
zFTXe+OLbvyc&y1PF}4L`4x@XUJmE|_sn56h!ty42=@$~}wrWyVWoN^*yMa(A8bATs
zAQRl8t3PnEeTy?M>ryqZSZwydvk3EmU|_Uk0Qsgqf@$HLq<cVt)@g41u2!E41nh?g
za-^my;h6^Rz9-P0)k308o?_3LAcRK0LoS;|vAXjW$KZrELjW8=OlI7aA-?aMUvTkS
z0`cGr+$TJAN6!RL=}F_)n{}-XtWNR+B_H5!gUT$T8gL9Dt$=)pr08ZS{+Wh&+{Fm7
z{JO&#9&~D293i`N7fiJv_rb$i2VNL5GuoyK>Z+||@PwmP+C~J3t-;t^A+ZQlqV5wK
z%GQPfh`B@R4>AFJqdaImV^e(7#NPh2=V`CA9k=gtO&aqe{dJo=cvqPvaG92p)a~Xp
z00|*>BOjuss)}zZTg6iEpZ?)}$XnxQ1Qg_)<m?hc^-#_vuW6br@Q#Q^csmnFKshv?
z1@H?9_l}IgF8f%iWPas53u=VgT@+a6V->cP)Z6UQ6-ntKI-zNkl5kLs$#d)vS?t#w
z!<uEqASS!|wq>8oVgTG*33YBWB19B(GJxaF`p4zLTN+P(%31kt_<`l{r>rZ!6_mdb
zQ2G)orW{~?O-?TSj+obv!+*!zpy&O)wRPJ8Pk81{)Oy2}-GFV2upGunf@d9Zj*xDj
z7qF*O&^J3$XB&xT{P@0?J=lOEoWxAgO<1qa2@7S(ulwn5`u0ZIhxiRM`xz@Lwi5}}
zFmUKSu+FHdbWSZRbH=Njjqlg3bI?_^<)xC@N6|xn{jq-rBH;45p?jA-NO#)90~=We
z`1WnuC0t?^F?mXMxB<>OFqV<tY#Z6VyX3%rTS`e0$ANn4v57<N@iE=M-F_i}D_$R^
zq^E*eAS62kOuUrAmUQOddVQShQEFU@;?hh6UhX{JnOx1#{tTgxXr%kD7x+_via1;5
zDKyDy@Hsv249^x=I#_E=OzU%$XziH=>HH<;)^|gPGvusmW>aZ#v=NEbmy8<+L~aEq
zb?!#AginWl{)d^|4v}nB`B(4jVKZ7Iy1CIhSv^hQOhf!s#z}J5u3$Wazo9+lhXzoV
zU?V3N$vi_HH+t<c**V_$Qt4!oU)aHeM$|Jnxvr&(JAYnlUx8!tYbUx41^kngj8$!8
zpPH$BlFx+L-Cyh}>N(o4dYLvo%axH{x=B;;WvxFYfHT^zTRZS-)ilGp4vP-#pjR+3
z0%AL(^7El8`jyby7DPOXkyc9c@x89GcL(I`x;OT9C2(7J_wbGq>f4s{1-f8d15uu8
z8f6E6ysykf?j%`qVZfG_d47Alp4Qq)&Ed7VJi!ZzB~Xpz+p&9z!3a}h*ZhBHMI8ME
z`sT7cRIrw++gd-2I&ZoXq5sH{RaSX(4>Xgl28_+db^7dda<7Wp{^21-MnKeV;U}j1
zJlbMKy?iK~xdXZZeWGbO-RdG-&TvR$TLq8$SdU1N2V4uxE|G#`^e#F>j_3sou4UZn
z{C$_N4Ze9WA?dkJU0fKh9qCKOiFvSv``rOim|N#5oQb^^FtmwEeS9tP@DabN`@-&g
zimf*(7!$`vRmhu|WqK+rjfNHtN5|W0pW_z?HkS*h88fw>@(*n6h;?a81CT{n{I7>-
zw)`=8;Bv=1(tJ@D7qPxosVY+7!w>N=h7e~49~ZKrd98AX6llP7)?3wvc|(^&|FRC#
zm9&_;h5z)KIJl{%c3uuW{QBtIlSS~S52Hh?4HeeoZjq-G;6Cq;^mUA?2&V}!)H5jT
zKrwiWx-cfD+5-NhGnt}u5wMMwtfXC-yRp|6MTzZFAQItktp4`(v7X4^_2{~i;(sv8
zGkpL3!V-Ai-ycXut#0|8o<z&B)N`xT)%3yLhuOtN{zWTqXE19lsyyI%WKY?Y|6|?3
zPo-8<IQwOYDT9G^(Z&tAqzVHbiB4}ik(-1ww-~EGJT<a*fJ#I#6*r;@_}zIBvY@j%
zmA}Q3lxK*X3Di~x@-Fh=ttb7Drn`Vq+R?>e4TJ7QUV~Do&p{zVG3v90J>;eENX2w?
z$`}Ppr0ft|Zp)w~g{!onDe?@5CcjhC($cq8IM%2O?{Sub8>170^%I69aO+A8&Z&BD
zgG+l-HBZPNSO59Ce~-or33^w(Q*U1mHc-Y7c>~Y9et7S1V$SEVbmSSq9Wv|A@EF?V
zoP27TfvhVv%A0&@V8B4UGLGc+dc9a<hxNhhcnK5SbMLaYD>4FJBD)l_bZ##HH_vnc
z5uC}#FmQiORque`?w?#K6-*)a9uAKX-OqH<F+aQ|&0{CHSj&jJRlXFv_-v<jz%^Ob
zPI^3xe8N{k?7UOxl;dh}8r$9X6Lcvj@0xMBK;Gfs6(4c~5+8=)AL$t{0=}Ko{23RN
zhYc#Tjg)kj-mZ0M;f8UL<bzAMN0QWhWgFnU3%l1u8`;YayI69121KXt`z(EV=xk00
zIwbD)$hnsGG1Trl2#^lzEX3*V^-{-ula{8$*_^X%b;mzpJ{9nHfs;(e_G_oTYp?{U
zv#|gh-hJVx+PIU<nA1<`g^buyt-K!!=#3W&(Ksd=&|94XwxH}f)V;9K`jA%82|$Jg
zD7cQLu#V^BA7)RQk+G;e@X=1u)scwgnn6!yOT0W9?yYvhYyAjXT;s{@kcd?|E^QBx
zn!63W`H3BiaO(+*GQfLLu>Y?AUdoQYTafr%B>#SB>Q67K{M@<(#;PhLl`o?5`vwPv
z;YkLv3FfS>7&%-e=_!*VvjMU8a!T+$b_h1o9(Qs@^ircOb^M0YY-y!n>Di)^q4Cgj
z5IOL{sLD(nyg859i=2xJ;iPM|R!#<PWE^s&l%nmY(xE{xAid&yqV)Dbs5R0ilM`il
zO6}+%?2V(hLMr_QU=b*CZ6`S=!X-*G*b*Pac~;QbhNPEFGw@0L*}C8sz*5>N0a|vH
zI}K@UZv9M*&=i}!VrxAmUNEWCy|T3%5~+mC9{NYcI*9J?VqXjh+Egl5Pm-Gb*!~SO
zzW+D8H$3YhoTXOmc=gtYw!k@=oeiMmKJaz8r)%e;z1ORe$@QRI4oCa8Imz(dcoLo8
z^y{}ols#&09(EWKFND_x<kGkbCnv~@5B2q4m#cj}k1;wgp?LiM&RQWDWit_bDGT=w
zU#p#Ihg3=EWcJTf+wQX6jy1)|awLx5W0KjjS^ju2PnYhUidA56H3NVJLsvO2HAt>L
z&4gxpi)Mk9t&j{}^_frnHu6jB_}_d{Fugq2t)_RvnL%6W<RK{2S?zIF1}Zto7C(20
z(k7U%(?jGezKR=R>Y5;D&m?%xbpLEisZuPhT|(X^A|G5mlj0d)w-`54(J%ZTc<Q4%
zQ~JWV=||wvb#WQMFD61p28O=mb^-hAXw#?td${ZgQ@0DS#*c<s2YW4;i*#(*40L+C
z1^JH}J=UXdY^L+f5KU~n<zs@)0<<IWk|x{B;Xqc<&hDqnbnnmL#<q|B5mex#kQPjV
zC;whhs6Ih=i~r?{m!$QX9l!2t5094Cq5=)_-&WUzSJ0ft!Cq|#izMbyTKjtp5=1(j
oqJYi09hkelwsW4<{@F3=oA(!!)DN^i{^|qF&!bGMOwiH)2WwGkY5)KL

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_6da8d5_256x240.png b/media/css/redmond/images/ui-icons_6da8d5_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f3eafaab0f048da81e1e072c3091282742c4980
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_cd0a0a_256x240.png b/media/css/redmond/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_d8e7f3_256x240.png b/media/css/redmond/images/ui-icons_d8e7f3_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad2dc6f9dbeeabbda9ae6917659b6df07817ec35
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/images/ui-icons_f9bd01_256x240.png b/media/css/redmond/images/ui-icons_f9bd01_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..78625024d94a74eb1aceb327f45059faf439fece
GIT binary patch
literal 4369
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

literal 0
HcmV?d00001

diff --git a/media/css/redmond/jquery-ui-1.8.14.custom.css b/media/css/redmond/jquery-ui-1.8.14.custom.css
new file mode 100644
index 0000000..49dc0ab
--- /dev/null
+++ b/media/css/redmond/jquery-ui-1.8.14.custom.css
@@ -0,0 +1,568 @@
+/*
+ * jQuery UI CSS Framework 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Resizable 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }	
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.14
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+	list-style:none;
+	padding: 2px;
+	margin: 0;
+	display:block;
+	float: left;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+	margin:0;
+	padding: 0;
+	zoom: 1;
+	float: left;
+	clear: left;
+	width: 100%;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration:none;
+	display:block;
+	padding:.2em .4em;
+	line-height:1.5;
+	zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file

From e8eb8772295d5669679237f4f88bd4e43e9ccefc Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:45:45 +0100
Subject: [PATCH 02/12] Changed to regex to make 2003 expo logbooks parse

---
 parsers/logbooks.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/parsers/logbooks.py b/parsers/logbooks.py
index e6b553b..af01f46 100644
--- a/parsers/logbooks.py
+++ b/parsers/logbooks.py
@@ -146,7 +146,7 @@ def Parseloghtmltxt(year, expedition, txt):
     for trippara in tripparas:
         
         s = re.match('''(?x)(?:\s*<div\sclass="tripdate"\sid=".*?">.*?</div>\s*<p>)?  # second date
-                            \s*(?:<a\s+id="(.*?)"\s*/>)?
+                            \s*(?:<a\s+id="(.*?)"\s*/>\s*</a>)?
                             \s*<div\s+class="tripdate"\s*(?:id="(.*?)")?>(.*?)</div>(?:<p>)?
                             \s*<div\s+class="trippeople">\s*(.*?)</div>
                             \s*<div\s+class="triptitle">\s*(.*?)</div>

From 85318ac6661f464ac504712b1e4aee88c616fd8a Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:48:13 +0100
Subject: [PATCH 03/12] Add ability to views caves via their cave slug.  Not
 recommended until links are fixed.

---
 urls.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/urls.py b/urls.py
index 3dc4bc2..24df04b 100644
--- a/urls.py
+++ b/urls.py
@@ -44,6 +44,7 @@ actualurlpatterns = patterns('',
     url(r'^getLogBookEntries/(?P<expeditionslug>.*)', views_logbooks.get_logbook_entries, name = "get_logbook_entries"),
 
     url(r'^cave/(?P<cave_id>[^/]+)/?$', views_caves.cave, name="cave"),
+    url(r'^caveslug/([^/]+)/?$', views_caves.caveSlug, name="caveSlug"),
     url(r'^cavedescription/(?P<cavedescription_name>[^/]+)/?$', views_caves.cave_description, name="cavedescription"),
     url(r'^cavedescription/?$', object_list, {'queryset':CaveDescription.objects.all(),'template_name':'object_list.html'}, name="cavedescriptions"),
     #url(r'^cavehref/(.+)$',     views_caves.cave,       name="cave"),url(r'cave'),

From c4194be5f1ee3734a4ce5e2a063a3111e0b366c0 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:52:18 +0100
Subject: [PATCH 04/12] Added url to cave and turned entrances station names
 and removed the previous SurveyStation model.

Note caves should be rendered in the directory of their original url to make links work.
Note SurveyStations appeared to duplicate SurvexStations.
Note Given we want to be running from a mercurial repository, it is easiest to store the names of survey stations rather than foreign keys.
---
 core/models.py | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/core/models.py b/core/models.py
index f8e7400..1c08a25 100644
--- a/core/models.py
+++ b/core/models.py
@@ -368,6 +368,7 @@ class Cave(TroggleModel):
     extent = models.CharField(max_length=100,blank=True,null=True)
     survex_file = models.CharField(max_length=100,blank=True,null=True)
     description_file = models.CharField(max_length=200,blank=True,null=True)
+    url = models.CharField(max_length=200,blank=True,null=True)
 
     #class Meta:
     #    unique_together = (("area", "kataster_number"), ("area", "unofficial_number"))
@@ -466,11 +467,7 @@ class OtherCaveName(TroggleModel):
     cave = models.ForeignKey(Cave)
     def __unicode__(self):
         return unicode(self.name)
-
-class SurveyStation(TroggleModel):
-    name = models.CharField(max_length=200)
-    def __unicode__(self):
-        return unicode(self.name)
+    
 
 class Entrance(TroggleModel):
     slug = models.SlugField(max_length=50, unique = True)
@@ -504,9 +501,9 @@ class Entrance(TroggleModel):
     alt = models.TextField(blank=True, null=True)
     northing = models.TextField(blank=True, null=True)
     easting = models.TextField(blank=True, null=True)
-    tag_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="tag_station")
-    exact_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="exact_station")
-    other_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="other_station")
+    tag_station = models.TextField()
+    exact_station = models.TextField()
+    other_station = models.TextField()
     other_description = models.TextField(blank=True,null=True)
     bearings = models.TextField(blank=True,null=True)
     def __unicode__(self):
@@ -623,7 +620,7 @@ class DPhoto(TroggleImageModel):
     is_mugshot = models.BooleanField(default=False)
     contains_cave = models.ForeignKey(Cave,blank=True,null=True)
     contains_entrance = models.ForeignKey(Entrance, related_name="photo_file",blank=True,null=True)
-    nearest_survey_point = models.ForeignKey(SurveyStation,blank=True,null=True)
+    #nearest_survey_point = models.ForeignKey(SurveyStation,blank=True,null=True)
     nearest_QM = models.ForeignKey(QM,blank=True,null=True)
     lon_utm = models.FloatField(blank=True,null=True)
     lat_utm = models.FloatField(blank=True,null=True)

From b70995d3148f84185c92b2f467082ff5d8d3098f Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:53:32 +0100
Subject: [PATCH 05/12] Added THREEDTOPOS setting for survexs 3dtopos program

---
 localsettingsserver.py  | 1 +
 localsettingsubuntu.py  | 1 +
 localsettingswindows.py | 1 +
 3 files changed, 3 insertions(+)

diff --git a/localsettingsserver.py b/localsettingsserver.py
index 1cde267..7e7a67f 100644
--- a/localsettingsserver.py
+++ b/localsettingsserver.py
@@ -10,6 +10,7 @@ DATABASE_PORT = ''             # Set to empty string for default. Not used with
 
 SURVEX_DATA = '/home/expo/loser/'
 CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
 EXPOWEB = '/home/expo/expoweb/'
 SURVEYS = '/home/expo/'
 SURVEY_SCANS = '/home/expo/expoimages/'
diff --git a/localsettingsubuntu.py b/localsettingsubuntu.py
index 0d1fe62..63e3ce6 100644
--- a/localsettingsubuntu.py
+++ b/localsettingsubuntu.py
@@ -16,6 +16,7 @@ EXPOWEB_URL = 'http://expo.survex.com/'
 PUBLIC_SITE = False
 
 CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
 EXPOWEB = '/home/goatchurch/expoweb/'
 SURVEYS_URL = ''
 
diff --git a/localsettingswindows.py b/localsettingswindows.py
index 168a39a..c5cb682 100644
--- a/localsettingswindows.py
+++ b/localsettingswindows.py
@@ -7,6 +7,7 @@ DATABASE_PORT = ''             # Set to empty string for default. Not used with
 
 SURVEX_DATA = 'c:\\Expo\\loser\\'
 CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
 EXPOWEB = 'C:\\Expo\\expoweb\\'
 SURVEYS = 'E:\\surveys\\'
 SURVEY_SCANS = 'E:\\surveys\\surveyscans'

From 10351fc65b10584afe235deca43a6ff66397093a Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:55:54 +0100
Subject: [PATCH 06/12] Removed SurveyStation model (not SurvexStation)

---
 core/admin.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/core/admin.py b/core/admin.py
index 8dfa7ca..be4045a 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -108,7 +108,6 @@ admin.site.register(Cave, CaveAdmin)
 admin.site.register(Area)
 #admin.site.register(OtherCaveName)
 admin.site.register(CaveAndEntrance)
-admin.site.register(SurveyStation)
 admin.site.register(NewSubCave)
 admin.site.register(CaveDescription)
 admin.site.register(Entrance, EntranceAdmin)

From 425d38727d4142af42a9dc3ddf66ff2add095392 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Sun, 10 Jul 2011 23:57:31 +0100
Subject: [PATCH 07/12] Removed modelforms for Caves started to add normal
 forms

---
 core/forms.py | 61 +++++++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 29 deletions(-)

diff --git a/core/forms.py b/core/forms.py
index 2a54428..ec639b0 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -7,46 +7,49 @@ import string
 from datetime import date
 from tinymce.widgets import TinyMCE
 
-class CaveForm(ModelForm):
-    class Meta:
-        model = Cave
+#class CaveForm(ModelForm):
+#    class Meta:
+#        model = Cave
 
-class PersonForm(ModelForm):
-    class Meta:
-        model = Person
+#class PersonForm(ModelForm):
+#    class Meta:
+#        model = Person
 
-class LogbookEntryForm(ModelForm):
-    class Meta:
-        model = LogbookEntry
+#class LogbookEntryForm(ModelForm):
+#    class Meta:
+#        model = LogbookEntry#
 
-    def wikiLinkHints(LogbookEntry=None):
-        """
-        This function returns html-formatted paragraphs for each of the
-        wikilink types that are related to this logbookentry. Each paragraph
-        contains a list of all of the related wikilinks.
-        
-        Perhaps an admin javascript solution would be better.
-        """
-        res = ["Please use the following wikilinks, which are related to this logbook entry:"]
-	
-        res.append(r'</p><p style="float: left;"><b>QMs found:</b>')
-	for QM in LogbookEntry.instance.QMs_found.all():
-            res.append(QM.wiki_link())
+#    def wikiLinkHints(LogbookEntry=None):
+#        """
+#        This function returns html-formatted paragraphs for each of the
+#        wikilink types that are related to this logbookentry. Each paragraph
+#        contains a list of all of the related wikilinks.
+#        
+#        Perhaps an admin javascript solution would be better.
+#        """
+#        res = ["Please use the following wikilinks, which are related to this logbook entry:"]
+#	
+#        res.append(r'</p><p style="float: left;"><b>QMs found:</b>')
+#	for QM in LogbookEntry.instance.QMs_found.all():
+#            res.append(QM.wiki_link())
 
-        res.append(r'</p><p style="float: left;"><b>QMs ticked off:</b>')
-	for QM in LogbookEntry.instance.QMs_ticked_off.all():
-            res.append(QM.wiki_link())
+#        res.append(r'</p><p style="float: left;"><b>QMs ticked off:</b>')
+#	for QM in LogbookEntry.instance.QMs_ticked_off.all():
+#            res.append(QM.wiki_link())
 	
 #        res.append(r'</p><p style="float: left; "><b>People</b>')
 #	for persontrip in LogbookEntry.instance.persontrip_set.all():
 #            res.append(persontrip.wiki_link())
 #	res.append(r'</p>')
 	
-	return string.join(res, r'<br />')
+#	return string.join(res, r'<br />')
 
-    def __init__(self, *args, **kwargs):
-	super(LogbookEntryForm, self).__init__(*args, **kwargs)
-        self.fields['text'].help_text=self.wikiLinkHints()
+#    def __init__(self, *args, **kwargs):
+#	super(LogbookEntryForm, self).__init__(*args, **kwargs)
+#        self.fields['text'].help_text=self.wikiLinkHints()#
+
+class CaveForm(forms.Form):
+    html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) 
 
 def getTripForm(expedition):
 

From 06efab7d73a5107352a7473c93c963ac11808409 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 11 Jul 2011 00:01:12 +0100
Subject: [PATCH 08/12] Added parsing of all.svx, along side parsing individual
 caves. Added the making and parsing of all.pos to determine the location of
 stations. Mare work is required so the caves are parsed and stored only once.
 Survex parsing appears to include bugs, that print out errors.

---
 core/models_survex.py | 19 ++++++++++++
 parsers/survex.py     | 72 ++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 84 insertions(+), 7 deletions(-)

diff --git a/core/models_survex.py b/core/models_survex.py
index ed21658..efd3022 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -52,10 +52,20 @@ class SurvexFile(models.Model):
 class SurvexEquate(models.Model):
     cave        = models.ForeignKey('Cave', blank=True, null=True)
 
+class SurvexStationLookUpManager(models.Manager):
+    def lookup(self, name):
+        blocknames, sep, stationname = name.rpartition(".")
+        return self.get(block = SurvexBlock.objects.lookup(blocknames),
+                        name = stationname)
+
 class SurvexStation(models.Model):
     name        = models.CharField(max_length=20)   
     block       = models.ForeignKey('SurvexBlock')
     equate      = models.ForeignKey('SurvexEquate', blank=True, null=True)
+    objects = SurvexStationLookUpManager()
+    x = models.FloatField(blank=True, null=True)
+    y = models.FloatField(blank=True, null=True)
+    z = models.FloatField(blank=True, null=True)
 
 class SurvexLeg(models.Model):
     block       = models.ForeignKey('SurvexBlock')
@@ -70,7 +80,16 @@ class SurvexLeg(models.Model):
 #
 # Single SurvexBlock 
 # 
+class SurvexBlockLookUpManager(models.Manager):
+    def lookup(self, name):
+        blocknames = name.split(".")
+        block = SurvexBlock.objects.get(parent=None, survexfile__path="all")
+        for blockname in blocknames:
+            block = SurvexBlock.objects.get(parent=block, name=blockname)
+        return block
+
 class SurvexBlock(models.Model):
+    objects = SurvexBlockLookUpManager()
     name       = models.CharField(max_length=100)
     parent     = models.ForeignKey('SurvexBlock', blank=True, null=True)
     text       = models.TextField()
diff --git a/parsers/survex.py b/parsers/survex.py
index f8ec6d4..2e0b8d3 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -1,5 +1,8 @@
 import troggle.settings as settings
 import troggle.core.models as models
+import troggle.settings as settings
+
+from subprocess import call, Popen, PIPE
 
 from troggle.parsers.people import GetPersonExpeditionNameLookup
 import re
@@ -14,7 +17,13 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
     
     survexleg = models.SurvexLeg(block=survexblock, stationfrom=ssfrom, stationto=ssto)
     if stardata["type"] == "normal":
-        survexleg.tape = float(ls[stardata["tape"]])
+        try:
+            survexleg.tape = float(ls[stardata["tape"]])
+        except ValueError: 
+            print "Tape misread in", survexblock.survexfile.path
+            print "Stardata:", stardata
+            print "Line:", ls
+            survexleg.tape = 1000
         lclino = ls[stardata["clino"]]
         lcompass = ls[stardata["compass"]]
         if lclino == "up":
@@ -24,7 +33,13 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
             survexleg.compass = 0.0
             survexleg.clino = -90.0
         elif lclino == "-" or lclino == "level":
-            survexleg.compass = float(lcompass)
+            try:
+                survexleg.compass = float(lcompass)
+            except ValueError:
+                print "Compass misread in", survexblock.survexfile.path
+                print "Stardata:", stardata
+                print "Line:", ls
+                survexleg.compass = 1000
             survexleg.clino = -90.0
         else:
             assert re.match("[\d\-+.]+$", lcompass), ls
@@ -37,7 +52,10 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
     
     itape = stardata.get("tape")
     if itape:
-        survexblock.totalleglength += float(ls[itape])
+        try:
+            survexblock.totalleglength += float(ls[itape])
+        except ValueError:
+            print "Length not added"
         survexblock.save()
         
 def LoadSurvexEquate(survexblock, sline):
@@ -86,6 +104,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
                 LoadSurvexLineLeg(survexblock, stardata, sline, comment)
             elif stardata["type"] == "passage":
                 LoadSurvexLinePassage(survexblock, stardata, sline, comment)
+            #Missing "station" in stardata.
             continue
         
         # detect the star command
@@ -151,8 +170,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
             for i in range(0, len(ls)):
                 stardata[stardataparamconvert.get(ls[i], ls[i])] = i - 1
             if ls[0] in ["normal", "cartesian", "nosurvey"]:
-                assert "from" in stardata, line
-                assert "to" in stardata, line
+                assert (("from" in stardata and "to" in stardata) or "station" in stardata), line
             elif ls[0] == "default":
                 stardata = stardatadefault
             else:
@@ -162,7 +180,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
             LoadSurvexEquate(survexblock, sline)
         
         else:
-            assert cmd.lower() in [ "sd", "equate", "include", "units", "entrance", "fix", "data", "flags", "title", "export", "instrument", "calibrate", ], (cmd, line, survexblock)
+            assert cmd.lower() in [ "sd", "equate", "include", "units", "entrance", "fix", "data", "flags", "title", "export", "instrument", "calibrate", "set", "infer"], (cmd, line, survexblock)
         
         
 
@@ -186,6 +204,30 @@ def ReloadSurvexCave(survex_cave):
 
 
 def LoadAllSurvexBlocks():
+    models.SurvexBlock.objects.all().delete()
+    models.SurvexFile.objects.all().delete()
+    models.SurvexDirectory.objects.all().delete()
+    models.SurvexEquate.objects.all().delete()
+    models.SurvexLeg.objects.all().delete()
+    models.SurvexTitle.objects.all().delete()
+    models.SurvexPersonRole.objects.all().delete()
+
+    survexfile = models.SurvexFile(path="all", cave=None)
+    survexfile.save()
+    survexfile.SetDirectory()
+
+    #Load all
+    survexblockroot = models.SurvexBlock(name="root", survexpath="", begin_char=0, cave=None, survexfile=survexfile, totalleglength=0.0)
+    survexblockroot.save()
+    fin = survexfile.OpenFile()
+    textlines = [ ]
+    RecursiveLoad(survexblockroot, survexfile, fin, textlines)
+    survexblockroot.text = "".join(textlines)
+    survexblockroot.save()
+
+
+    #Load each cave, 
+    #FIXME this should be dealt with load all above
     caves = models.Cave.objects.all()
     for cave in caves:
         if cave.kataster_number and os.path.isdir(os.path.join(settings.SURVEX_DATA, "caves", cave.kataster_number)):
@@ -193,4 +235,20 @@ def LoadAllSurvexBlocks():
                 print "loading", cave
                 ReloadSurvexCave(cave.kataster_number)
     
-
+poslineregex = re.compile("^\(\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*)\s*\)\s*([^\s]+)$")
+def LoadPos():
+    call([settings.CAVERN, "--output=%s/all.3d" % settings.SURVEX_DATA, "%s/all.svx" % settings.SURVEX_DATA])
+    call([settings.THREEDTOPOS, '%sall.3d' % settings.SURVEX_DATA], cwd = settings.SURVEX_DATA)
+    posfile = open("%sall.pos" % settings.SURVEX_DATA)
+    posfile.readline()#Drop header
+    for line in posfile.readlines():
+        r = poslineregex.match(line)                
+        if r:
+            x, y, z, name = r.groups()
+            try:
+                ss = models.SurvexStation.objects.lookup(name)
+            except:
+                pass
+            ss.x = float(x)
+            ss.y = float(y)
+            ss.z = float(z)

From 203719375eefd31a2010baa0f1bdee9aea669d6a Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 11 Jul 2011 00:03:36 +0100
Subject: [PATCH 09/12] slug views, start of cave eidt form, cavelist splitting
 up by kataster area etc.

---
 core/views_caves.py | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/core/views_caves.py b/core/views_caves.py
index e24e6c2..24a85c7 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -1,6 +1,9 @@
 from troggle.core.models import Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription
+from troggle.core.forms import CaveForm
 import troggle.core.models as models
 import troggle.settings as settings
+from troggle.helper import login_required_if_public
+
 from django.forms.models import formset_factory
 from django.core.urlresolvers import reverse
 from utils import render_with_context # see views_logbooks for explanation on this.
@@ -21,15 +24,31 @@ def caveindex(request):
     caves = Cave.objects.all()
     notablecavehrefs = [ "161", "204", "258", "76" ]  # could detect notability by trips and notability of people who have been down them
     notablecaves = [Cave.objects.get(kataster_number=kataster_number)  for kataster_number in notablecavehrefs ]
-    return render_with_context(request,'caveindex.html', {'caves': caves, 'notablecaves':notablecaves})
+    caves1623 = Cave.objects.filter(area__short_name = "1623")
+    caves1626 = Cave.objects.filter(area__short_name = "1626")
+    return render_with_context(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
 
 def cave(request, cave_id='', offical_name=''):
     cave=getCave(cave_id)
+    if cave.non_public and not request.user.is_authenticated():
+        return render_with_context(request,'nonpublic.html', {'instance': cave, 'cavepage': True})
+    else:
+        return render_with_context(request,'cave.html', {'cave': cave, 'cavepage': True})
+
+def caveSlug(request, slug):
+    cave = Cave.objects.get(slug = slug)
     if cave.non_public and not request.user.is_authenticated():
         return render_with_context(request,'nonpublic.html', {'instance': cave})
     else:
         return render_with_context(request,'cave.html', {'cave': cave})
-    
+
+@login_required_if_public
+def editCave(request, slug=None):
+    form = CaveForm()
+    return render_with_context(request, 
+                               'editcave.html', 
+                               {'form': form})
+
 def qm(request,cave_id,qm_id,year,grade=None):
     year=int(year)
     try:
@@ -43,6 +62,7 @@ def qm(request,cave_id,qm_id,year,grade=None):
         return HttpResponseRedirect(url)
     
 
+
 def ent(request, cave_id, ent_letter):
     cave = Cave.objects.filter(kataster_number = cave_id)[0]
     cave_and_ent = CaveAndEntrance.objects.filter(cave = cave).filter(entrance_letter = ent_letter)[0]
@@ -50,6 +70,13 @@ def ent(request, cave_id, ent_letter):
                                                 'entrance': cave_and_ent.entrance,
                                                 'letter': cave_and_ent.entrance_letter,})
 
+def entranceSlug(request, slug):
+    entrance = Entrance.objects.get(slug = slug)
+    if entrance.non_public and not request.user.is_authenticated():
+        return render_with_context(request,'nonpublic.html', {'instance': entrance})
+    else:
+        return render_with_context(request,'entranceslug.html', {'entrance': entrance})
+
 def survexblock(request, survexpath):
     survexpath = re.sub("/", ".", survexpath)
     print "jjjjjj", survexpath

From 4a88493afa2e4c663848cdc296d2bc76195daaf9 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 11 Jul 2011 00:04:30 +0100
Subject: [PATCH 10/12] Removed links to removed forms

---
 core/views_logbooks.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/views_logbooks.py b/core/views_logbooks.py
index 4495f03..007086f 100644
--- a/core/views_logbooks.py
+++ b/core/views_logbooks.py
@@ -5,7 +5,7 @@ import troggle.settings as settings
 import django.db.models
 from troggle.parsers.logbooks import LoadLogbookForExpedition
 from troggle.parsers.people import GetPersonExpeditionNameLookup
-from troggle.core.forms import PersonForm, getTripForm, get_name
+#from troggle.core.forms import PersonForm, getTripForm, get_name
 from  django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect, HttpResponse
 from django.template import Context, loader

From db2d954b1d8d3a7454d51a7f6eebd88aa102e64c Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 11 Jul 2011 00:13:06 +0100
Subject: [PATCH 11/12] Added flat pages for entrance and special flatpage
 redirects.

Enetrances should probably store their urls like cavers.  Maybe the flatpages should be handled by the app Aaron installed.
---
 flatpages/admin.py  |  5 +++++
 flatpages/models.py | 11 ++++++++++-
 flatpages/views.py  | 39 +++++++++++++++++++++++++++++++++++++--
 3 files changed, 52 insertions(+), 3 deletions(-)
 create mode 100644 flatpages/admin.py

diff --git a/flatpages/admin.py b/flatpages/admin.py
new file mode 100644
index 0000000..2bb1f84
--- /dev/null
+++ b/flatpages/admin.py
@@ -0,0 +1,5 @@
+from troggle.flatpages.models import Redirect, EntranceRedirect
+from django.contrib import admin
+
+admin.site.register(Redirect)
+admin.site.register(EntranceRedirect)
diff --git a/flatpages/models.py b/flatpages/models.py
index 71a8362..1c97851 100644
--- a/flatpages/models.py
+++ b/flatpages/models.py
@@ -1,3 +1,12 @@
 from django.db import models
+from core.models import Cave, Entrance
 
-# Create your models here.
+class Redirect(models.Model):
+    originalURL = models.CharField(max_length=200, unique=True)
+    newURL = models.CharField(max_length=200)
+
+class EntranceRedirect(models.Model):
+    originalURL = models.CharField(max_length=200)
+    entrance = models.ForeignKey(Entrance)
+    def __unicode__(self):
+        return self.entrance.slug
diff --git a/flatpages/views.py b/flatpages/views.py
index 9c7483e..5f7b579 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -7,12 +7,33 @@ from  django.core.urlresolvers import reverse
 from django.template import Context, loader
 import django.forms as forms
 from tinymce.widgets import TinyMCE
+from troggle.flatpages.models import Redirect, EntranceRedirect
+from troggle.core.models import Cave
+import troggle.core.views_caves
 
 import os
 import re
 
 def flatpage(request, path):
-    print path
+    try:
+        r = Redirect.objects.get(originalURL = path)
+        return HttpResponseRedirect(r.newURL) # Redirect after POST
+    except Redirect.DoesNotExist:
+        pass
+
+    try:
+        r = Cave.objects.get(url = path)
+        return troggle.core.views_caves.caveSlug(request, r.slug)
+    except Cave.DoesNotExist:
+        pass
+
+    try:
+        r = EntranceRedirect.objects.get(originalURL = path)
+        return troggle.core.views_caves.enranceSlug(request, r.entrance.slug)
+    except EntranceRedirect.DoesNotExist:
+        pass
+
+
     if path.startswith("noinfo") and settings.PUBLIC_SITE and not request.user.is_authenticated():
         return HttpResponseRedirect(reverse("auth_login") + '?next=%s' % request.path)
     try:
@@ -21,19 +42,31 @@ def flatpage(request, path):
         raise Http404
     if path.endswith(".htm") or path.endswith(".html"):
         html = o.read()
+        
         m = re.search(r"<head>(.*)</head>.*<body>(.*)</body>", html, re.DOTALL)
+        mwithid = re.search(r'<head>(.*)</head>.*<body id="([^"]*)">(.*)</body>', html, re.DOTALL)
         if m:
             head, body = m.groups()
+            bodyid = None
+        elif mwithid:
+            head, bodyid, body = mwithid.groups()
         else:
             return HttpResponse(html + "Page could not be split into header and body")
         if re.search(r"iso-8859-1", html):
             body = unicode(body, "iso-8859-1")
-        return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'head': head, 'body': body})
+        return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'head': head, 'body': body, "bodyid": bodyid})
     else:
         return HttpResponse(o.read())
 
 @login_required_if_public
 def editflatpage(request, path):
+    try:
+        r = CaveRedirect.objects.get(originalURL = path)
+        return troggle.core.views_caves.editCave(request, r.cave.slug)
+    except CaveRedirect.DoesNotExist:
+        pass
+
+
     try:
         filepath = os.path.normpath(settings.EXPOWEB + path)
         o = open(filepath, "r")
@@ -43,6 +76,8 @@ def editflatpage(request, path):
     m = re.search(r"<head>(.*)</head>.*<body>(.*)</body>", html, re.DOTALL)
     if m:
         head, body = m.groups()
+        if re.search(r"iso-8859-1", html):
+            body = unicode(body, "iso-8859-1")
     else:
         return HttpResponse("Page could not be split into header and body")
     if request.method == 'POST': # If the form has been submitted...

From 861daee66feb985ccfb9271c211dc1a27263fbf4 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 11 Jul 2011 00:15:59 +0100
Subject: [PATCH 12/12] Removed conversion to wiki, replaced Surveystation
 models with text, added area 1623 to all relevant caves.

---
 databaseReset.py           |  17 ++++-
 parsers/cavetab.py         |  35 +++++----
 settings.py                |   1 +
 templates/base.html        |   2 +-
 templates/cave.html        | 153 +++++++++++++++++++++++--------------
 templates/cavebase.html    |  52 ++++++-------
 templates/caveindex.html   |  26 +++++--
 templates/editcave.html    |  19 +++++
 templates/expowebbase.html |  40 ++++++++++
 templates/flatpage.html    |   2 +-
 10 files changed, 237 insertions(+), 110 deletions(-)
 create mode 100644 templates/editcave.html
 create mode 100644 templates/expowebbase.html

diff --git a/databaseReset.py b/databaseReset.py
index cdd7dcf..52a646c 100644
--- a/databaseReset.py
+++ b/databaseReset.py
@@ -7,6 +7,8 @@ from django.core import management
 from django.db import connection
 from django.contrib.auth.models import User
 from django.http import HttpResponse
+from  django.core.urlresolvers import reverse
+import flatpages.models
 
 
 
@@ -59,6 +61,7 @@ def import_logbooks():
 def import_survex():
     import parsers.survex
     parsers.survex.LoadAllSurvexBlocks()
+    parsers.survex.LoadPos()
 
 def import_QMs():
     import parsers.QMs
@@ -91,6 +94,7 @@ def reset():
     """
     reload_db()
     make_dirs()
+    pageredirects()
     import_cavetab()
     import_people()
     import_surveyscans()
@@ -98,7 +102,8 @@ def reset():
     import_logbooks()
     import_QMs()
     import_tunnelfiles()
-    #import_surveys()
+    
+    import_surveys()
     import_descriptions()
     parse_descriptions()
 
@@ -170,6 +175,11 @@ def dumplogbooks():
             f.write(unicode(output).encode( "utf-8" ))
             f.close()
 
+def pageredirects():
+    for oldURL, newURL in [("indxal.htm", reverse("caveindex"))]:
+        f = flatpages.models.Redirect(originalURL = oldURL, newURL = newURL)
+        f.save()
+
 if __name__ == "__main__":
     import core.models
     import sys
@@ -177,6 +187,11 @@ if __name__ == "__main__":
         resetdesc()
     elif "scans" in sys.argv:
         import_surveyscans()
+    elif "caves" in sys.argv:
+        reload_db()
+        make_dirs()
+        pageredirects()
+        import_cavetab()
     elif "QMs" in sys.argv:
         import_QMs()
     elif "tunnel" in sys.argv:
diff --git a/parsers/cavetab.py b/parsers/cavetab.py
index bf61d7f..68ea4b3 100644
--- a/parsers/cavetab.py
+++ b/parsers/cavetab.py
@@ -3,7 +3,8 @@ import troggle.core.models as models
 from django.conf import settings
 import csv, time, re, os, logging
 from utils import save_carefully
-from utils import html_to_wiki
+from  django.core.urlresolvers import reverse
+import flatpages.models
 
 ##format of CAVETAB2.CSV is
 KatasterNumber = 0
@@ -54,6 +55,7 @@ Findability = 44
 FindabilityComment = 45
 
 def LoadCaveTab():
+    
     cavetab = open(os.path.join(settings.EXPOWEB, "noinfo", "CAVETAB2.CSV"),'rU')
     caveReader = csv.reader(cavetab)
     caveReader.next() # Strip out column headers
@@ -76,14 +78,14 @@ def LoadCaveTab():
         if line[MultipleEntrances] == 'yes' or line[MultipleEntrances]=='': #When true, this line contains an actual cave, otherwise it is an extra entrance.
             args = {}
             defaultArgs = {}
-            
+
             def addToArgs(CSVname, modelName):
                 if line[CSVname]:
-                    args[modelName] = html_to_wiki(line[CSVname])
+                    args[modelName] = line[CSVname]
                     
             def addToDefaultArgs(CSVname, modelName): #This has to do with the non-destructive import. These arguments will be passed as the "default" dictionary in a get_or_create
                 if line[CSVname]:
-                    defaultArgs[modelName] = html_to_wiki(line[CSVname])
+                    defaultArgs[modelName] = line[CSVname]
             
             # The attributes added using "addToArgs" will be used to look up an existing cave. Those added using "addToDefaultArgs" will not.
             addToArgs(KatasterNumber, "kataster_number")
@@ -103,6 +105,7 @@ def LoadCaveTab():
             addToDefaultArgs(Extent, "extent")
             addToDefaultArgs(SurvexFile, "survex_file")
             addToDefaultArgs(Notes, "notes")
+            addToDefaultArgs(AutogenFile, "url")
             if line[Area] == "1626":
                 if line[KatasterNumber] != "":
                     args["slug"] = line[Area] + "-" + line[KatasterNumber]
@@ -140,6 +143,7 @@ def LoadCaveTab():
                         newArea = models.Area(short_name = line[Area], parent = area1623)
                         newArea.save()
                     newCave.area.add(newArea)
+                    newCave.area.add(area1623)
             elif created:
                 newCave.area.add(area1623)
 
@@ -152,6 +156,7 @@ def LoadCaveTab():
                 newUnofficialName.save()
 
                 logging.info("Added unofficial name "+str(newUnofficialName)+" to cave "+str(newCave)+"\n")
+            
 
         if created and line[MultipleEntrances] == '' or \
             line[MultipleEntrances] == 'entrance' or \
@@ -165,10 +170,10 @@ def LoadCaveTab():
 
             def addToArgs(CSVname, modelName):
                 if line[CSVname]:
-                    args[modelName] = html_to_wiki(line[CSVname])
+                    args[modelName] = line[CSVname]
             def addToArgsViaDict(CSVname, modelName, dictionary):
                 if line[CSVname]:
-                    args[modelName] = dictionary[html_to_wiki(line[CSVname])]
+                    args[modelName] = dictionary[line[CSVname]]
             addToArgs(EntranceName, 'name')
             addToArgs(Explorers, 'explorers')
             addToArgs(Map, 'map_description')
@@ -188,6 +193,7 @@ def LoadCaveTab():
                                                 "Unmarked": "U",
                                                 "": "?",
                                                 })
+
             addToArgs(MarkingComment, 'marking_comment')
             addToArgsViaDict(Findability, 'findability', {"Surveyed": "S",
                                                         "Lost": "L",
@@ -200,20 +206,15 @@ def LoadCaveTab():
             addToArgs(Northing, 'northing')
             addToArgs(Altitude, 'alt')
             addToArgs(DescriptionOfOtherPoint, 'other_description')
-            def addToArgsSurveyStation(CSVname, modelName):
-                if line[CSVname]:
-                    surveyPoint = models.SurveyStation(name = line[CSVname])
-                    surveyPoint.save()
-                    args[modelName] = surveyPoint
-            addToArgsSurveyStation(TagPoint, 'tag_station')
-            addToArgsSurveyStation(ExactEntrance, 'exact_station')
-            addToArgsSurveyStation(OtherPoint, 'other_station')
+            addToArgs(TagPoint, 'tag_station')
+            addToArgs(ExactEntrance, 'exact_station')
+            addToArgs(OtherPoint, 'other_station')
             addToArgs(OtherPoint, 'other_description')
             if line[GPSpreSA]:
-                addToArgsSurveyStation(GPSpreSA, 'other_station')
+                addToArgs(GPSpreSA, 'other_station')
                 args['other_description'] = 'pre selective availability GPS'
             if line[GPSpostSA]:
-                addToArgsSurveyStation(GPSpostSA, 'other_station')
+                addToArgs(GPSpostSA, 'other_station')
                 args['other_description'] = 'post selective availability GPS'
             addToArgs(Bearings, 'bearings')
             args['slug'] = newCave.slug + entrance_letter
@@ -227,6 +228,8 @@ def LoadCaveTab():
             newCaveAndEntrance.save()
             
             logging.info("Added CaveAndEntrance "+str(newCaveAndEntrance)+"\n")
+            f = flatpages.models.EntranceRedirect(originalURL = line[AutogenFile], entrance = newEntrance)
+            f.save()
 
 
 # lookup function modelled on GetPersonExpeditionNameLookup
diff --git a/settings.py b/settings.py
index ef24512..50fbbae 100644
--- a/settings.py
+++ b/settings.py
@@ -92,6 +92,7 @@ INSTALLED_APPS = (
     'troggle.registration',
     'troggle.profiles',
     'troggle.core',
+    'troggle.flatpages',
     'troggle.imagekit', 
 )
 
diff --git a/templates/base.html b/templates/base.html
index 6a4da29..d3341b2 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/main3.css" title="eyeCandy"/>
 <link rel="alternate stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/mainplain.css" title="plain"/>
 <link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/dropdownNavStyle.css" />
diff --git a/templates/cave.html b/templates/cave.html
index 9469118..12e83b4 100644
--- a/templates/cave.html
+++ b/templates/cave.html
@@ -1,10 +1,92 @@
 {% extends "cavebase.html" %}
-{% load wiki_markup %}
-{% block editLink %}| <a href={{cave.get_admin_url}}>Edit cave {{cave|wiki_to_html_short}}</a>{% endblock %}
 
+
+{% block content %}
+{% block contentheader %}
+<table id="cavepage">
+<tr>
+    <th id="kat_no">
+        {% if cave.kataster_number %}
+            {{ cave.kataster_number|safe }}
+            {% if cave.entrancelist %}
+                - {{ cave.entrancelist|safe }}
+            {% endif %}
+            {% if cave.unofficial_number %}
+                <br />({{ cave.unofficial_number|safe }})
+            {% endif %}
+        {% endif %}
+    </th>
+    <th id="name">
+         {{ cave.official_name|safe }}
+    </th>
+    <th id="status">
+         {{ cave.kataster_code|safe }}
+    </th>
+</tr>
+</table>
 {% block related %}
-  <h2>All logbook entries regarding this cave ({{cave.logbookentry_set.count}})</h2>
-  <table>
+{% endblock %}{% endblock %}
+
+<div id="tabs">
+	<ul>
+		<li><a href="#entrances">Entrances</a></li>
+		<li><a href="#cave">Cave</a></li>
+		<li><a href="#logbook">Logbook</a></li>
+		<li><a href="#qms">QMs</a></li>
+	</ul>
+	<div id="entrances">
+		<p>{% if cave.entrances %}
+    <h2>Entrances</h2>
+    {% for ent in cave.entrances %}
+        <a href = "./{{ ent.entrance_letter|safe }}">{{ ent.entrance_letter|safe }}</a>
+        {% if ent.entrance.marking %}
+            Marking: {{ ent.entrance.marking_val|safe }}
+        {% endif %}
+        <br>
+    {% endfor %}
+{% endif %}</p>
+	</div>
+	<div id="cave">
+		<p>{% if cave.explorers %}
+    <h2>Explorers</h2>
+    {{ cave.explorers|safe }}
+{% endif %}
+{% if cave.underground_description %}
+    <h2>Underground Description</h2>
+    {{ cave.underground_description|safe }}
+{% endif %}
+{% if cave.equipment %}
+    <h2>Equipment</h2>
+    {{ cave.equipment|safe }}
+{% endif %}
+{% if cave.references %}
+    <h2>References</h2>
+    {{ cave.references|safe }}
+{% endif %}
+{% if cave.survey %}
+    <h2>Survey</h2>
+    {{ cave.survey|safe }}
+{% endif %}
+{% if cave.kataster_status %}
+    <h2>Kataster_status</h2>
+    {{ cave.kataster_status|safe }}
+{% endif %}
+{% if cave.underground_centre_line %}
+    <h2>Underground Centre Line</h2>
+    {{ cave.underground_centre_line|safe }}
+{% endif %}
+{% if cave.survex_file %}
+    <h2>Survex File</h2>
+    {{ cave.survex_file|safe }}
+{% endif %}
+{% if cave.notes %}
+    <h2>Notes</h2>
+    {{ cave.notes|safe }}
+{% endif %}</p>
+	</div>
+	<div id="logbook">
+		<p>  
+<table>
   {% for logbookentry in cave.logbookentry_set.all %}
   {% if logbookentry.title %}
     <tr>
@@ -14,59 +96,10 @@
   {% endif %}
   {% endfor %}
   </table>
-{% endblock %}
-
-{% block content %}
-
-{% if cave.entrances %}
-    <h2>Entrances</h2>
-    {% for ent in cave.entrances %}
-        <a href = "./{{ ent.entrance_letter|wiki_to_html_short }}">{{ ent.entrance_letter|wiki_to_html_short }}</a>
-        {% if ent.entrance.marking %}
-            Marking: {{ ent.entrance.marking_val|wiki_to_html_short }}
-        {% endif %}
-        <br>
-    {% endfor %}
-{% endif %}
-
-{% if cave.explorers %}
-    <h2>Explorers</h2>
-    {{ cave.explorers|wiki_to_html }}
-{% endif %}
-{% if cave.underground_description %}
-    <h2>Underground Description</h2>
-    {{ cave.underground_description|wiki_to_html }}
-{% endif %}
-{% if cave.equipment %}
-    <h2>Equipment</h2>
-    {{ cave.equipment|wiki_to_html }}
-{% endif %}
-{% if cave.references %}
-    <h2>References</h2>
-    {{ cave.references|wiki_to_html }}
-{% endif %}
-{% if cave.survey %}
-    <h2>Survey</h2>
-    {{ cave.survey|wiki_to_html }}
-{% endif %}
-{% if cave.kataster_status %}
-    <h2>Kataster_status</h2>
-    {{ cave.kataster_status|wiki_to_html }}
-{% endif %}
-{% if cave.underground_centre_line %}
-    <h2>Underground Centre Line</h2>
-    {{ cave.underground_centre_line|wiki_to_html }}
-{% endif %}
-{% if cave.survex_file %}
-    <h2>Survex File</h2>
-    {{ cave.survex_file|wiki_to_html }}
-{% endif %}
-{% if cave.notes %}
-    <h2>Notes</h2>
-    {{ cave.notes|wiki_to_html }}
-{% endif %}
-
-{% if cave.get_QMs %}
+</p>
+	</div>
+	<div id="qms">
+		<p>{% if cave.get_QMs %}
 	<h2>Question marks</h2>
     <h3>Extant</h3>
     <ul id="cavelist">
@@ -85,5 +118,9 @@
         {% endif %}
     {% endfor %}
     </ul>
-{% endif %}
+{% endif %}</p>
+	</div>
+</div>
+
+
 {% endblock %}
diff --git a/templates/cavebase.html b/templates/cavebase.html
index 8e8132e..6e27111 100644
--- a/templates/cavebase.html
+++ b/templates/cavebase.html
@@ -1,28 +1,26 @@
-{% extends "base.html" %}
-{% load wiki_markup %}
+<html>
+<head>
 
-{% block title %}{{ cave.official_name|wiki_to_html_short }}{% endblock %}
-
-{% block contentheader %}
-<table id="cavepage">
-<tr>
-    <th id="kat_no">
-        {% if cave.kataster_number %}
-            {{ cave.kataster_number|wiki_to_html_short }}
-            {% if cave.entrancelist %}
-                - {{ cave.entrancelist|wiki_to_html_short }}
-            {% endif %}
-            {% if cave.unofficial_number %}
-                <br />({{ cave.unofficial_number|wiki_to_html_short }})
-            {% endif %}
-        {% endif %}
-    </th>
-    <th id="name">
-         {{ cave.official_name|wiki_to_html_short }}
-    </th>
-    <th id="status">
-         {{ cave.kataster_code|wiki_to_html_short }}
-    </th>
-</tr>
-</table>
-{% endblock %}
\ No newline at end of file
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>{% block title %}{{ cave.official_name|safe }}{% endblock %}
+</title>
+<link rel="stylesheet" type="text/css" href="/css/main2.css" />
+<link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/redmond/jquery-ui-1.8.14.custom.css" />
+<script src="{{ settings.MEDIA_URL }}js/jquery.js" type="text/javascript"></script>
+<script src="{{ settings.MEDIA_URL }}js/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>
+<script type="text/javascript">
+	$(function() {
+		$( "#tabs" ).tabs();
+	});
+</script>
+</head>
+<body>
+{% block content %}{% endblock %}
+{% block menu %}
+<ul id="links">
+<li>Back to <a href="/index.htm">Expedition home page</a></li>
+<li>Back to <a href="http://cucc.survex.com/">CUCC home page</a></li>
+</ul>
+{% endblock %}
+</body>
+</html>
diff --git a/templates/caveindex.html b/templates/caveindex.html
index ae8b224..ac67559 100644
--- a/templates/caveindex.html
+++ b/templates/caveindex.html
@@ -1,23 +1,37 @@
-{% extends "base.html" %}
+{% extends "cavebase.html" %}
 {% load wiki_markup %}
 
 {% block title %}Cave Index{% endblock %}
 
 {% block content %}
 
+<h1>Cave Index</h1>
+
 <h3>Notable caves</h3>
 <ul>
 {% for cave in notablecaves %}
-  <li> <a href="{{ cave.get_absolute_url }}">{{cave.official_name|wiki_to_html_short}} ({{cave}})</a> </li>
+  <li> <a href="{{ cave.get_absolute_url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </li>
 {% endfor %}
 </ul>
 
-<h3>All caves</h3>
+<h3>1623</h3>
 
 <ul class="searchable">
-{% for cave in caves %}
-  <li> <a href="{{ cave.get_absolute_url }}">{{cave.official_name|wiki_to_html_short}} ({{cave}})</a> </li>
+{% for cave in caves1623 %}
+
+  <li> <a href="{{ cave.get_absolute_url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </li>
+
 {% endfor %}
 </ul>
 
-{% endblock %}
\ No newline at end of file
+<h3>1626</h3>
+
+<ul class="searchable">
+{% for cave in caves1626 %}
+
+  <li> <a href="{{ cave.get_absolute_url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </li>
+
+{% endfor %}
+</ul>
+
+{% endblock %}
diff --git a/templates/editcave.html b/templates/editcave.html
new file mode 100644
index 0000000..0e1785b
--- /dev/null
+++ b/templates/editcave.html
@@ -0,0 +1,19 @@
+{% extends "base.html" %}
+{% load csrffaker %} 
+{% block title %}Logbook {{logbookentry.id}}{% endblock %}
+{% block head %}
+
+<link rel="stylesheet" href="{{ settings.MEDIA_URL }}css/ui-lightness/jquery-ui-1.8.12.custom.css" type="text/css" media="all" />
+<script src="{{ settings.MEDIA_URL }}js/jquery-ui-1.8.12.custom.min.js" type="text/javascript"></script>
+<script src="{{ settings.MEDIA_URL }}js/jquery.formset.min.js" type="text/javascript"></script>
+<script src="{{ settings.TINY_MCE_MEDIA_URL }}tiny_mce.js" type="text/javascript"></script>
+{{ tripForm.media }}
+{% endblock %}
+{% block content %}
+
+<form action="" method="post">{% csrf_token %}
+    {{ form }}
+    <p><input type="submit" value="Sumbit" /></p>
+</form>
+
+{% endblock %}
diff --git a/templates/expowebbase.html b/templates/expowebbase.html
new file mode 100644
index 0000000..128ce54
--- /dev/null
+++ b/templates/expowebbase.html
@@ -0,0 +1,40 @@
+<html>
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>{% block title %}{% endblock %}
+</title>
+<link rel="stylesheet" type="text/css" href="../css/main2.css" />
+
+</head>
+<body>
+<div id="mainmenu">
+<ul>
+<li><a href="/index.htm">Expo web home</a></li>
+<li><a href="/intro.html">Introduction</a></li>
+<li><a href="/infodx.htm">Main index</a></li>
+<li><a href="/indxal.htm">Cave index</a></li>
+{% if cavepage %}
+<ul>
+<li><a href="{% url survexcaveslist %}">All Survex</a></li>
+<li><a href="{% url surveyscansfolders %}">Scans</a></li>
+<li><a href="{% url tunneldata %}">Tunneldata</a></li>
+<li><a href="{% url survexcavessingle 161 %}">161</a></li>
+<li><a href="{% url survexcavessingle 204 %}">204</a></li>
+<li><a href="{% url survexcavessingle 258 %}">258</a></li>
+<li><a href="{% url expedition 2009 %}">Expo2009</a></li>
+<li><a href="{% url expedition 2010 %}">Expo2010</a></li>
+<li><a href="{% url expedition 2011 %}">Expo2011</a></li>
+<li><a href="/admin">Django admin</a></li>
+</ul>
+{% endif %}
+<li><a href="/handbook/index.htm">Expedition handbook</a></li>
+<li><a href="/pubs.htm">Published reports</a></li>
+<li><a href="/areas.htm">Area description</a></li>
+<li><a href="/">CUCC website</a></li>
+</ul>
+</div>
+{% block content %}{% endblock %}
+</body>
+</html>
+
diff --git a/templates/flatpage.html b/templates/flatpage.html
index ef8c4ab..8c476b8 100644
--- a/templates/flatpage.html
+++ b/templates/flatpage.html
@@ -2,7 +2,7 @@
 <head>
 {{ head|safe }}
 </head>
-<body>
+<body{% if bodyid %} id="{{ bodyid }}"{% endif %}>
 {{ body|safe }}
 {% if editable %}<a href="{% url editflatpage path %}">Edit</a>{% endif %}
 </body>