From: <Сохранено Windows Internet Explorer 7>
Subject: =?koi8-r?B?9PLl9PjlIO/i8uH95e7p5SDrIP7l7O/35f7l8/T39SAtIDIwMTIgxw==?=
	=?koi8-r?B?z8QgLSDrwdTBzM/HINPUwdTFyiAtIOHHxc7U09TXzyDwz9DVzNHSzg==?=
	=?koi8-r?B?z8og6c7Gz9LNwcPJySBBUEltZWRpYQ==?=
Date: Sat, 8 Aug 2009 16:48:31 +0400
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_01C3_01CA1848.10042720"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://s9.ucoz.net/img/1px.gif

R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://s9.ucoz.net/img/bn/cl4.gif

R0lGODlhDgAOAMQAAAAAADAwMDo6OvHx8Q8PD2BgYCIiIkFBQf///2tra1NTU0xMTHx8fMTExISE
hLW1tbu7uwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA
DgAOAAAFbKAAjGQ5igWjJmxbHKNTLAd9CPiSxIrSFLhCA7cDOHyIQaEwQDQCxSMz2VQGCiOGILBo
Jg8EgmKUMBAO3oEIsBgVAmhqUrQuGCBzQfMBgAHsBg8CBAACD4R1g4QmBmsCPQsKNQc3AgaFJpl9
IQA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/2.gif

R0lGODlhCgAKAIAAAP///2oBASH5BAAAAAAALAAAAAAKAAoAAAIPjI+pB7DdEoSS1njd2qsAADs=

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/4.gif

R0lGODlhCgAKAIAAAP///2oBASH5BAAAAAAALAAAAAAKAAoAAAIQjI+pB7DRVJuO0Yri0q+nAgA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/6.gif

R0lGODlhCgAKAIAAAP///2oBASH5BAAAAAAALAAAAAAKAAoAAAIQjI+pBxvQHoIxLqvwo9r5AgA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/11.gif

R0lGODlhDAAOAIABAENDQ////yH5BAEAAAEALAAAAAAMAA4AAAIdDGJ4qJ381mLSUTex1e9G+BnA
eFQgd5qpQrbdGRQAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/13.gif

R0lGODlh1gAHAMQAAENDQxYAAQAAAC8qKomJiRQAARcAATNBKjhHKhgAAYWCgiAgIDRCKjlHKjZD
KrO1A7S3BbW2DLW1C6mrC6qsCjY2Nv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABYALAAAAADWAAcAAAWsoAVYpFWdaKqubOu+cCzPdG3fOLwIPD+IJRNlMiwSj8YkcqlsMp/OKHQq
rVKv1ix2qzVWAgFDoPAblSqSSHqtbrPf7jh8Lq/T7/Y8fq/v8/9+gYBsXwYJY2UAigAVDxCOkI+S
kZSTlpWYl5qZnJuenaCfoqGko6alkRUODQgMBz9BQlyzXbS2tbi3urm8sxWxwCaDgsTDxsXIx8rJ
zMO/wUE50tPU1dbX2DPAIQA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://counter.rambler.ru/top100.cnt?1386608

R0lGODdhUQA/APIAAAAAYPj8+MjMyDAwmGBkmMjM+GBkyAAAACwAAAAAUQA/AAAD/gi63P4wyklZ
uDjrzbv/YBgoYmmeaEZ2wuASaVYAQ5EJBGGXriCuG4IjdhECdheBYlCaAUpAzQOJMlKdT5HhCM1q
sC2FoSgs+MgDgWCmCxi3uYCSRj76CAYYYaDwrfEwHFEYcwA4CmYOPnwQBUZGADpLIww1jAsYWH2C
XjILWJQNaRIDbwxGpUsLW5WZC3wdg0mfC5A2tQuFhVZuCpCMBXyWvhu1HrIBoK+YAYzOurhcTs60
ZqFUSZCxnYSYqJeXqNB9y4hLjARhYYYaOLacHKComtQ040+XvnM1Du+eDNguICvUi0QwGtGO0DIY
LhkmTWMYnXFlDB6RGBPjZbxI/omjx48fkIEceVEkyZMnTKJcCUIly5fFKsicSbOmzZs4c+rcybOn
z59AIQhDOBTn0KIA8uzJ5ysYJJ3HcgY5QmXNpyuFcHpgSjNIwFkbKWrt4CyHCwelcgDM+DXTB641
kWS1lgRLGxnobmQoJQNvhqc3J2L5qiTQhjmGk/1NTCUOBsA25SLyQFdOYzpuMfAl9JfJ451InCAp
k/kCn9CR+j5mvPgv6G5cLgSbmLHG6NScCV25kRFyTcHEyKr+nPju4TQdNOGUvGnqcIeYi3huJyQd
p5061tAzw52RjALgIekAv4679gZq1lgNKlMF+/cz3cOfL8E8/fv48+vfz/8968z/IbgEIEwCDshS
gQaihOBLRIXF0YIHfnKSS47kcMYf1tWlnmXgZbKhQLXQVWE6Z3BnQwF5bENZPnr0U5AdFkB2SwM2
cDWjKCrGw1QeEKjVBxapTKEIXIbAleMGQJ5Xy1O2FHKWL77ZsYsjn4CzRlQdiIfBKyCqggiQDKyH
UC5yfFLdDpe0tSU3sEFJD42vgJOmciFmpQYbobATEpsYsLIKnX1kFWaYQDJ1yANPxoblisasI6Ec
TNWYiyYvsgMZDJc46J4IlWmIJHm6baheaB8mA15VnR6ZYIIQrvpRq64+yGesEdJqYH/9JQAAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://top100-images.rambler.ru/top100/w7.gif

R0lGODlhWAAfAID/AP////+ZACwAAAAAWAAfAAAC+IyPqcvtDx+YtNqLs968Z+NhIDCG5umV6Kii
7ju1JxIHpH3jeW6DPt4LwmQm2u1I+VVYQqXxRSzqlDxkrXbgBXVQrktFc3KZR3E05Z2lkT7stdy7
Ur9rmP2ujuj3/L7/DxgoGLjEhwUkMTgYcwhx2LigpdjHaEUEhpgERMIJOSnRabQZWjk6+vbpVzhW
2kq61OiZ2uBqWlubJSk7q1C6aduJylq1y2t8jJysXIfX7HxxttFLTA1d8lS9wtxxnQmnQcbmTWfX
LWxlfS4+tM1hvn4WLt8OTl+vKRw9r07Ojr/uztu+LuXG5EL3YcrBbGqeOXxoYZlEPwUAADs=

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://db.c7.b7.a1.top.mail.ru/counter?js=na;id=1538892;t=109

R0lGODlhWAASAOMAAAAAAP///wAYSwBgmACo5QAJHQBBWQAlOwAJGwAAAP///wAAAAAAAAAAAAAA
AAAAACH5BAEAAAkALAAAAABYABIAAATiMMlJq7046827/2AojmRpnmiqpkC7vmoLJEAww3hZz3su
KUBFIigcFn8ToEUmo7kkTJ6rR4lGnbeP8DhEGr1cmm3XGjsDaJ5NnIXa0OM11VMMVo7csDgNJ5Pl
gG17ZYRsIGF4FIgVfmN/MoGGVY5xaoIaiV2aSWCMkY+GPXNuUoWjG3l1dkaqFQQ7rzaxhIQGsLC2
BrMEvLOEvcDBwsPExQM7xzbJAAc1fITL0cgD1M1wytTZ2tvc3d7cAgUABeHj5eTiLQjj4ujm7ecC
8vLpLeTz+Pn6+/z8Pv8AAwocSHBEBAA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/14.gif

R0lGODlhDAAMALMAAFQnJxwZGUNDQ2sAAGkAAGwAAGoAAAoKCm8AAG0AAHIAAHAAAG4AAHEAAC8q
KgAAACH5BAAAAAAALAAAAAAMAAwAAAQ6MLhJ61Q4a+Wa/2DThaGznGi6OEjrvojDzHTNOEmu74lT
/MACQEB0DI7IgeDAdBieUMOySahaCdNDBAA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/16.gif

R0lGODlhIwAMANUAAOfn524AAGtra2RkZCwsLNjY2G8AAGoAAGgAADo6OmUAAFYpKWEAABQUFGgO
Dl4SEkdERDc3N7GxsUs9PREREVdXV3p6evv7+5+fn1paWqioqDs7O2sICFcpKUhISG0HB2AaGg4O
DnZ2dl0gIE43N1MiImwAACAgIERERENDQyUlJT4+PkVFRSEhISYmJkBAQEJCQgkJCW0AAAYGBgcH
BwgICAoKCnAAAHIAAC8qKnEAAP///wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAjAAwAAAa/wJxw
SCwaj0eccslsOp9PnXRKrVqvWKrjg912udebeDQRVDoc8bh8TqvJZrRabTCABoDdTrOQyQJ3eXt9
f4F6fH4BdQYBASQFenoiDwgHj5E7k5WXkZoHJn9+EBeYGCUMCqOlp6mkkaaolSYpKSyQkRYJERso
t3q5u72YwBsrLzA2Ni14ehIENDQ1J8w7ztDS1NbRMTHJyS4eAhkEFDPRNSrh4+Xn6eLk5jXc3jbd
DSEz+ef2+Po18jbu5Ys3LwgAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/17.gif

R0lGODlhDAAMALMAAFQnJxwZGUNDQ2sAAGkAAGwAAGoAAAoKCm8AAG0AAHIAAHAAAG4AAHEAAC8q
KgAAACH5BAAAAAAALAAAAAAMAAwAAAQ70MlJXVA4a+Wa/2DThaGznGi6OEjrvojDzHTNOEmu74kj
/ICCcFhwHI6CgXI5MCIN0KjBeRAQrliCIwIAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/19.gif

R0lGODlhDAA8ANUAABYAARoAAR8AASEAAVEAACQAASoAAS0AAS4AAUMAADAAAUAAAWUAAEkAABUA
AU4AAFUAAFsAAFMAAFkAAF0AAGIAAGQAADkAATsAATYAASMAAV8AAFgAACgAAUgAABsAAR4AASUA
ARcAARkAAUEAAUUAADMAAVAAAGgAAE0AAGMAADEAAT4AAUYAAGAAADcAAR0AAUsAAFwAACsAATwA
ASAAATQAAWcAAFYAABgAAScAAUNDQy8qKgoKCgAAAAAAACH5BAAAAAAALAAAAAAMADwAAAb/QB5q
SETtekjebcm8HZOMqJTx7PEs2KylylN5vypuZUyucF3otIu7abs3XIp8TuHK7ngZN8LvR7gTgYIT
XByGhxxcOIuMOFwQkJEQXBKVlhJcBJqbBFwnn6AnXA+kpQ9cKamqKVwxrq8xXA2ztA1cHri5Hlwt
vb4tXCXCwyVcCcfICVwkzM0kXAvR0gtcLNbXLFw029w0XBjg4RhcF+XmF1wv6usvXBnv8BlcNvT1
Nlwm+fomXCv+/yu4KBhIUAEXBAgTIuByoKHDA1xmSJw4g4uBixgNcOnAsWMHLjpCitTBJYTJkyG4
FFjJsgAXDTBjauAyoKbNAVxq6NxZg4uAPJ9ABXABQbQoCC4wkiqFweWD06cfuASYSjUAlxFYs47g
kqOr1xxcRIgdK4ILgLNoAZhNe5aLg7dwHVQJAgA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://s9.ucoz.net/img/ma/m/i3.gif

[encoded data, 12388 characters]
kwQCADs=

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://apimedia.ru/secure/?k=3430833043;s=publ;tm=1249735708

R0lGODdhbgAZAIAAAAQCBHTC7CwAAAAAbgAZAAAC/oSPqcvtD6NcIZiKs9768gxUlxda4mmmZTii
6zmyrkV+nQPa4kv3sS9TzVpCE+9Vuyk/CE4JxDrOilHqMIj17YooHfPJxRyrP6mQ6B26Dutv42sz
y7VWTzqrStqhXvYyV4YHBjg12He1UrUBRiFm6FQI8ygmGXZXyabndvO0B1c2dWgk2EM5mifIk7bV
ZWoq5dn6ChO5SNWk6aTAl5cya2UbDCvLN5bkuPhol0iMGUoLCRvkKp05uYqc41tLBhkdOdiplom9
k5DdR2pUfqamXVeqCpfc7K0+rYPkTu1cE8tLo5MiJuCuXDolj986hPfWRJlzhhQRfdt+4ekwC0nD
YjFLNML7SDEcSG/tELqTkyuks5KMZElsJm5hN5bQmMmseRLnpWEVu6icqPOiSpM0b+7MSZQmUKNk
FL0caZQgU6hKn6KEKNFq0K08Y2ZZOtNmNo9dkWaFKhTnhLVs27p9q6AAADs=

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/21.gif

R0lGODlhDAA8ANUAABYAARoAAR8AASEAAVEAACQAASoAAS0AAS4AAUMAADAAAUAAAWUAAEkAABUA
AU4AAFUAAFsAAFMAAFkAAF0AAGIAAGQAADkAATsAATYAASMAAV8AAFgAACgAAUgAABsAAR4AASUA
ARcAARkAAUEAAUUAADMAAVAAAGgAAE0AAGMAADEAAT4AAUYAAGAAADcAAR0AAUsAAFwAACsAATwA
ASAAATQAAWcAAFYAABgAAScAAUNDQy8qKgoKCgAAAAAAACH5BAAAAAAALAAAAAAMADwAAAb/wJ5w
hyoaUTxhb3drOm/JIWNKZUSXlqzWct2pvmBVt0IuV7qutNrV3bjfmy5lTqd0Zfi8rBvp+yNdE4KD
E10ch4gcXTiMjThdEJGSEF0SlpcSXQSbnARdJ6ChJ10PpaYPXSmqqyldMa+wMV0NtLUNXR65uh5d
Lb6/LV0lw8QlXQnIyQldJM3OJF0L0tMLXSzX2CxdNNzdNF0Y4eIYXRfm5xddL+vsL10Z8PEZXTb1
9jZdJvr7Jl0r/wBXdFFAsKCCLggSKkTQ5YDDhwe6zJhIcUYXAxgzGujSoaPHDl10iBypo0uIkyhD
dCnAsmWBLhpiytTQZYDNmwO61NjJs0YXPQFAgwroAqKoURBdYChdCqPLh6dQP3QJQLVqgC4jsmod
0SWH1685uogYS1ZEFwBo0wI4qxZtFwdw4zrgEQQAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/22.gif

R0lGODlhDAA8ANUAABYAARoAAR8AASEAAVEAACQAASoAAS0AAS4AAUMAADAAAUAAAWUAAEkAABUA
AU4AAFUAAFsAAFMAAFkAAF0AAGIAAGQAADkAATsAATYAASMAAV8AAFgAACgAAUgAABsAAR4AASUA
ARcAARkAAUEAAUUAADMAAVAAAGgAAE0AAGMAADEAAT4AAUYAAGAAADcAAR0AAUsAAFwAACsAATwA
ASAAATQAAWcAAFYAABgAAScAAUNDQy8qKgoKCgAAAAAAACH5BAAAAAAALAAAAAAMADwAAAb/QJ5j
SHTsekgeYMkEHJNN5rPHE1mvoikvx+3mtKOweKQNmM8B7WfN/mhh8DhMC6rbQVqBfi/Q1v6ANVoD
hIUDWhqJihpaBY6PBVohk5QhWjqYmTpaHZ2eHVoGoqMGWjOnqDNaB6ytB1oIsbIIWgq2twpaK7u8
K1omwMEmWjbFxjZaGcrLGVovz9AvWhfU1RdaGNnaGFo03t80Wizj5CxaC+jpC1ok7e4kWgny8wla
Jff4JVot/P0tWh4CCvSgpYHBgw20xFjIMIaWFBAjptDyoKLFB1pOaNx4QguBjyAJaJFAsqQELRBS
qoSgBYfLlzi0cJhJk4OWCThzTtASoafPPAhaZAgdKkMLhaNIKWjZwLTpBi0uokp1oaWC1asVtKjY
ylWFFgtgw1rQwqCsWQZabqhde0MLirdwUUwJAgA7

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/23.gif

R0lGODlhDAA8ANUAABYAARoAAR8AASEAAVEAACQAASoAAS0AAS4AAUMAADAAAUAAAWUAAEkAABUA
AU4AAFUAAFsAAFMAAFkAAF0AAGIAAGQAADkAATsAATYAASMAAV8AAFgAACgAAUgAABsAAR4AASUA
ARcAARkAAUEAAUUAADMAAVAAAGgAAE0AAGMAADEAAT4AAUYAAGAAADcAAR0AAUsAAFwAACsAATwA
ASAAATQAAWcAAFYAABgAAScAAUNDQy8qKgoKCgAAAAAAACH5BAAAAAAALAAAAAAMADwAAAb/wJ5w
5ygaHTxhbwdoOgHJ4dMZXYquWFF1l+t6c9uReDzaBs7owPbDbn+2sLgctgXZ76CtYM8XbGuAgTVb
A4WGA1saiosaWwWPkAVbIZSVIVs6mZo6Wx2enx1bBqOkBlszqKkzWwetrgdbCLKzCFsKt7gKWyu8
vStbJsHCJls2xsc2WxnLzBlbL9DRL1sX1dYXWxja2xhbNN/gNFss5OUsWwvp6gtbJO7vJFsJ8/QJ
WyX4+SVbLf3+LVs8CBzoYUuDgwgbbInBsGGMLSkiSkyx5YHFiw+2nNjI8cQWAiBDEtgioaRJCVsg
qFwJYQuOlzBxbOFAsyaHLRNy6pywJYLPPZ8RtsgYSlTGFgpIk1LYsqGp0w1bXEid6mJLhatYK2xR
wbWrii0Wwoq1sIWB2bMMttxYy/bGFhRw46LgEQQAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/24.gif

R0lGODlhDAAMALMAAFQnJxwZGUNDQ20AAGsAAGkAAGwAAGoAAG8AAHIAAHAAAG4AAAoKCnEAAC8q
KgAAACH5BAAAAAAALAAAAAAMAAwAAAQ70JVJi2DYnc3PzUQoEh/jGGhqlM7gvgMgzM5i3/jiIHzv
Iw6FcEhUOBrIpLJxXC4diah0mgg4rtisIwIAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/26.gif

R0lGODlhHwAMAOYAAFIAANjY2Gtray0tLWRkZCUhIefn53EAAFoAAD4+Pm8AAG4AAGIAACwnJ14A
AFcAAAkJCWEAACYiIkcpKUoAAFEAAEgpKTk5OZ+fn0wAAEZGRlIUFF0AACEhIS8qKkhISFQAAE4H
B0BAQHZ2diYmJjw8PBAQEFpaWnp6ehYWFrGxsUUAAEUMDCgjI0QAAKioqEkAACciIiomJkIAAPv7
+xEREVdXV1gAAE8AABkZGWAAACklJWMAAE03N1YAAFcaGmEBAWcAAENDQysmJlYODnIAAHAAAFwA
AGYAAGQAAFUgIF8AAC4pKVcODl8aGiwoKGgAAGwAAGsAAE43N1ogIGUAAGUBAUYAAE0AAAoKCv//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
BAAAAAAALAAAAAAfAAwAAAfvgFmCgikmg4dZhYiDioskCQI2AzWHj5GTlZCSlIMdBAZaWi8DnZ+h
o6WgoqSDFwGhoSM5EFmusFqytLawuUJCGjS3GCIlCcDCxMbBsMMlCwtTr7AoGwg6PdKh1NbYt9sK
Ck6mWioWWAAIP+Pl5+nr5gBGRgtUHwInEyxXGQ8OSvb49PHzBzDfvgMHFEix0iTElRkuKPhwwAAI
EYcQJVK0iDEiQgVRqnAAAGPFFSwPlvBgcISkSZQqWbo8WaTIgQVQItyogAUHCA5JgiDRydMnUKFE
e4LwwJTJExktJBQoEGPHkAYNoEqlahWr1qkxAgEAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://src.ucoz.net/t/451/27.gif

R0lGODlhDAAMAMQAAFcAAC4pKWYAAGUAAFMnJy0oKFoAABwZGT4+PmIAAEBAQFYAAF0AACklJWEA
AEFBQSsnJ2gAAGAAAENDQ3IAAHAAAG8AAGsAAGkAAGwAAGoAAG0AAG4AAAoKCnEAAC8qKiH5BAAA
AAAALAAAAAAMAAwAAAVRYCdOWGlin9hNWutq6XjN9BWvWa5nH6I8hI1wuPlIBJoMZ8nkfAyJyMZC
rVo+AIm0wu1WPgstx0Mue7AOzNhM/jAGFwtlTqd8GpBC4MPvfw4hADs=

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://s9.ucoz.net/img/ma/uid.gif

R0lGODlhEAAQANUuAKiuztbX3XGD3tHS2bO40f///3CC3nOD39PT29jZ3m5/3YuUxpKe5J2lytzb
4NTU232IwqqvzdjY3tfY3djY3eLj5KCmy4aU4ZGd43mJ36Gny3aF3tvb4IKQ4ayxznyM4Gh63ZCZ
x9rb4IqX4p6lyn6N4KSqzWt93XWF3niH35ik5Gp83bG20OHi4wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAAAAAQABAAQAatQJfQ
RQCwLJYiYegCJAYQA6OQmRoOkEECQBgEKA2BYYMSCBqUwGAJQEwkgMvhMAJIJgjAsB2oaBQKGhUB
eUIAAQELJxgFH4xiC4gAAA8OEWaMBSkHAhEOD3qGAxwkIAIeT6FMAKMWICsmIgOqTW5wcgcXdnh6
lJYCGyUbGRmcnqBOUFKNVlhak4gLCh0FKtQGBpEBXF5gAgrYZmhqS7V9fwIALYS0QkUeCyFKTEEA
Ow==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://apimedia.ucoz.ru/stat/1249735708

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_01F4_01CA1848.1008E210"


------=_NextPart_001_01F4_01CA1848.1008E210
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: base64
Content-Location: http://apimedia.ru/publ/3-1-0-47

[encoded data, 175940 characters]
Qk9EWT48L0hUTUw+DQo=

------=_NextPart_001_01F4_01CA1848.1008E210
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://a.ucoz.net/a/?ref=http%3A%2F%2Fapimedia.ru%2Fpubl%2F3-1-0-47&par=ZQ-pqoc8cxz6zXQ62LQSb_7mZUFFL3u-mRqULAu8Y41k0kpHwfm57DROn_ZCDVVi8BFYHPSe1OLaYHX8nyvFOPKtgrQh7WxyYqO_Gww8DYyl3oBT27Ra1Z-cIow8O6w_DPMpdPUiwHOp8T9_iNMEbdkEtac8POym-sIQAJiEBuGTMXqTBg==

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<STYLE type=3Dtext/css>BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; BACKGROUND: =
#000000; PADDING-BOTTOM: 0px; MARGIN: 0px; CURSOR: pointer; PADDING-TOP: =
0px; FONT-FAMILY: 'Times New Roman',Tahoma,Arial
}
.adText A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: =
#000000; PADDING-BOTTOM: 0px; WIDTH: 100%; CURSOR: pointer; COLOR: =
#ffff00; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px; =
TEXT-DECORATION: none
}
.adText A:link {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: =
#000000; PADDING-BOTTOM: 0px; WIDTH: 100%; CURSOR: pointer; COLOR: =
#ffff00; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px; =
TEXT-DECORATION: none
}
.adText A:visited {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: =
#000000; PADDING-BOTTOM: 0px; WIDTH: 100%; CURSOR: pointer; COLOR: =
#ffff00; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px; =
TEXT-DECORATION: none
}
.adText A:active {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: =
#000000; PADDING-BOTTOM: 0px; WIDTH: 100%; CURSOR: pointer; COLOR: =
#ffff00; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px; =
TEXT-DECORATION: none
}
.adText A:hover {
	BACKGROUND: highlight; COLOR: highlighttext
}
</STYLE>

<META content=3D"MSHTML 6.00.6000.20935" name=3DGENERATOR></HEAD>
<BODY>
<DIV class=3DadText=20
onmouseover=3D"window.banintrv=3D(new =
Date()).getTime();clearInterval(window.banintr);document.getElementById('=
jdjss0').style.color=3D'';"=20
onclick=3DclearInterval(window.banintr);window.banintr=3D0;=20
onmouseout=3D"if( ((new Date()).getTime()-window.banintrv)<500 =
&amp;&amp; window.banintr !=3D =
0){window.banintr=3DsetInterval('flashbnr38()',5000);}else{window.banintr=
 =3D 0}"><A=20
id=3Djdjss0=20
href=3D"http://click02.begun.ru/click.jsp?url=3DsMSOxf739vc7u7gA4OBzPEKSg=
cfaRSWhjNqDJBQcXhnS2nghDxX4ZB2SIxU*drsqTHz1i-vXrdp2tKkFzY9HzY1BCQYYsEp4Np=
aUQk4iuZcKczo9SAFN3V9-lrjA5V-R8asbMPLr6owsOvVyoEhAp*CNh4eoVuKX3x6CntaVQOm=
8CdQhPv*1wm3ibO-4Wt3ZJJYptf9Sr7LYIQOfM9es82VCsiDmoicxQat*I5Jd5ksAvqQiqsHP=
B39wBKxqkXlREEzihEtaflG2Rb8NgyGZWie3h1P2Rcqto8ipidGThusYWz-IgvP7zsXmjzQXM=
3xAs4sEH1Nd00mxof3U0SStAV9-eTsDszUP-ukV6YLWk7-cXydE"=20
target=3D_blank><B>"<B>Forex</B> Club" - =D0=98=D0=B3=D1=80=D0=B0 =
=D0=BD=D0=B0 =D0=B1=D0=B8=D1=80=D0=B6=D0=B5</B> &nbsp; [ =
=D0=92=D0=B2=D0=BE=D0=B4=D0=BD=D1=8B=D0=B9=20
=D1=81=D0=B5=D0=BC=D0=B8=D0=BD=D0=B0=D1=80 =D0=BF=D0=BE =
=D0=B1=D0=B8=D1=80=D0=B6=D0=B5=D0=B2=D0=BE=D0=B9 =
=D1=82=D0=BE=D1=80=D0=B3=D0=BE=D0=B2=D0=BB=D0=B5. =
=D0=9A=D0=BD=D0=B8=D0=B3=D0=B0 =D0=B8 MasterCard =D0=B2 =
=D0=BF=D0=BE=D0=B4=D0=B0=D1=80=D0=BE=D0=BA. ]</A></DIV>
<SCRIPT type=3Dtext/javascript>var chbancol3=3D0;function =
flashbnr38(){if (document.getElementById('jdjss0')){var c =3D =
document.getElementById('jdjss0');if =
(chbancol3=3D=3D1){chbancol3=3D0;c.style.color=3D'#FFFF00';}else =
{chbancol3=3D1;c.style.color=3D'#FFFF00';}}}window.banintr=3DsetInterval(=
"flashbnr38()",5000);</SCRIPT>
</BODY></HTML>

------=_NextPart_001_01F4_01CA1848.1008E210--

------=_NextPart_000_01C3_01CA1848.10042720
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://s9.ucoz.net/src/u.js

(function(){=0A=
/*=0A=
 * jQuery 1.2.6 - New Wave Javascript=0A=
 *=0A=
 * Copyright (c) 2008 John Resig (jquery.com)=0A=
 * Dual licensed under the MIT (MIT-LICENSE.txt)=0A=
 * and GPL (GPL-LICENSE.txt) licenses.=0A=
 *=0A=
 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $=0A=
 * $Rev: 5685 $=0A=
 */=0A=
=0A=
// Map over jQuery in case of overwrite=0A=
var _jQuery =3D window.jQuery,=0A=
// Map over the $ in case of overwrite=0A=
	_$ =3D window.$;=0A=
=0A=
var jQuery =3D window.jQuery =3D window.$ =3D function( selector, =
context ) {=0A=
	// The jQuery object is actually just the init constructor 'enhanced'=0A=
	return new jQuery.fn.init( selector, context );=0A=
};=0A=
=0A=
// A simple way to check for HTML strings or ID strings=0A=
// (both of which we optimize for)=0A=
var quickExpr =3D /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,=0A=
=0A=
// Is it a simple selector=0A=
	isSimple =3D /^.[^:#\[\.]*$/,=0A=
=0A=
// Will speed up references to undefined, and allows munging its name.=0A=
	undefined;=0A=
=0A=
jQuery.fn =3D jQuery.prototype =3D {=0A=
	init: function( selector, context ) {=0A=
		// Make sure that a selection was provided=0A=
		selector =3D selector || document;=0A=
=0A=
		// Handle $(DOMElement)=0A=
		if ( selector.nodeType ) {=0A=
			this[0] =3D selector;=0A=
			this.length =3D 1;=0A=
			return this;=0A=
		}=0A=
		// Handle HTML strings=0A=
		if ( typeof selector =3D=3D "string" ) {=0A=
			// Are we dealing with HTML string or an ID?=0A=
			var match =3D quickExpr.exec( selector );=0A=
=0A=
			// Verify a match, and that no context was specified for #id=0A=
			if ( match && (match[1] || !context) ) {=0A=
=0A=
				// HANDLE: $(html) -> $(array)=0A=
				if ( match[1] )=0A=
					selector =3D jQuery.clean( [ match[1] ], context );=0A=
=0A=
				// HANDLE: $("#id")=0A=
				else {=0A=
					var elem =3D document.getElementById( match[3] );=0A=
=0A=
					// Make sure an element was located=0A=
					if ( elem ){=0A=
						// Handle the case where IE and Opera return items=0A=
						// by name instead of ID=0A=
						if ( elem.id !=3D match[3] )=0A=
							return jQuery().find( selector );=0A=
=0A=
						// Otherwise, we inject the element directly into the jQuery object=0A=
						return jQuery( elem );=0A=
					}=0A=
					selector =3D [];=0A=
				}=0A=
=0A=
			// HANDLE: $(expr, [context])=0A=
			// (which is just equivalent to: $(content).find(expr)=0A=
			} else=0A=
				return jQuery( context ).find( selector );=0A=
=0A=
		// HANDLE: $(function)=0A=
		// Shortcut for document ready=0A=
		} else if ( jQuery.isFunction( selector ) )=0A=
			return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( =
selector );=0A=
=0A=
		return this.setArray(jQuery.makeArray(selector));=0A=
	},=0A=
=0A=
	// The current version of jQuery being used=0A=
	jquery: "1.2.6",=0A=
=0A=
	// The number of elements contained in the matched element set=0A=
	size: function() {=0A=
		return this.length;=0A=
	},=0A=
=0A=
	// The number of elements contained in the matched element set=0A=
	length: 0,=0A=
=0A=
	// Get the Nth element in the matched element set OR=0A=
	// Get the whole matched element set as a clean array=0A=
	get: function( num ) {=0A=
		return num =3D=3D undefined ?=0A=
=0A=
			// Return a 'clean' array=0A=
			jQuery.makeArray( this ) :=0A=
=0A=
			// Return just the object=0A=
			this[ num ];=0A=
	},=0A=
=0A=
	// Take an array of elements and push it onto the stack=0A=
	// (returning the new matched element set)=0A=
	pushStack: function( elems ) {=0A=
		// Build a new jQuery matched element set=0A=
		var ret =3D jQuery( elems );=0A=
=0A=
		// Add the old object onto the stack (as a reference)=0A=
		ret.prevObject =3D this;=0A=
=0A=
		// Return the newly-formed element set=0A=
		return ret;=0A=
	},=0A=
=0A=
	// Force the current matched set of elements to become=0A=
	// the specified array of elements (destroying the stack in the process)=0A=
	// You should use pushStack() in order to do this, but maintain the =
stack=0A=
	setArray: function( elems ) {=0A=
		// Resetting the length to 0, then using the native Array push=0A=
		// is a super-fast way to populate an object with array-like properties=0A=
		this.length =3D 0;=0A=
		Array.prototype.push.apply( this, elems );=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	// Execute a callback for every element in the matched set.=0A=
	// (You can seed the arguments with an array of args, but this is=0A=
	// only used internally.)=0A=
	each: function( callback, args ) {=0A=
		return jQuery.each( this, callback, args );=0A=
	},=0A=
=0A=
	// Determine the position of an element within=0A=
	// the matched set of elements=0A=
	index: function( elem ) {=0A=
		var ret =3D -1;=0A=
=0A=
		// Locate the position of the desired element=0A=
		return jQuery.inArray(=0A=
			// If it receives a jQuery object, the first element is used=0A=
			elem && elem.jquery ? elem[0] : elem=0A=
		, this );=0A=
	},=0A=
=0A=
	attr: function( name, value, type ) {=0A=
		var options =3D name;=0A=
=0A=
		// Look for the case where we're accessing a style value=0A=
		if ( name.constructor =3D=3D String )=0A=
			if ( value =3D=3D=3D undefined )=0A=
				return this[0] && jQuery[ type || "attr" ]( this[0], name );=0A=
=0A=
			else {=0A=
				options =3D {};=0A=
				options[ name ] =3D value;=0A=
			}=0A=
=0A=
		// Check to see if we're setting style values=0A=
		return this.each(function(i){=0A=
			// Set all the styles=0A=
			for ( name in options )=0A=
				jQuery.attr(=0A=
					type ?=0A=
						this.style :=0A=
						this,=0A=
					name, jQuery.prop( this, options[ name ], type, i, name )=0A=
				);=0A=
		});=0A=
	},=0A=
=0A=
	css: function( key, value ) {=0A=
		// ignore negative width and height values=0A=
		if ( (key =3D=3D 'width' || key =3D=3D 'height') && parseFloat(value) =
< 0 )=0A=
			value =3D undefined;=0A=
		return this.attr( key, value, "curCSS" );=0A=
	},=0A=
=0A=
	text: function( text ) {=0A=
		if ( typeof text !=3D "object" && text !=3D null )=0A=
			return this.empty().append( (this[0] && this[0].ownerDocument || =
document).createTextNode( text ) );=0A=
=0A=
		var ret =3D "";=0A=
=0A=
		jQuery.each( text || this, function(){=0A=
			jQuery.each( this.childNodes, function(){=0A=
				if ( this.nodeType !=3D 8 )=0A=
					ret +=3D this.nodeType !=3D 1 ?=0A=
						this.nodeValue :=0A=
						jQuery.fn.text( [ this ] );=0A=
			});=0A=
		});=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	wrapAll: function( html ) {=0A=
		if ( this[0] )=0A=
			// The elements to wrap the target around=0A=
			jQuery( html, this[0].ownerDocument )=0A=
				.clone()=0A=
				.insertBefore( this[0] )=0A=
				.map(function(){=0A=
					var elem =3D this;=0A=
=0A=
					while ( elem.firstChild )=0A=
						elem =3D elem.firstChild;=0A=
=0A=
					return elem;=0A=
				})=0A=
				.append(this);=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	wrapInner: function( html ) {=0A=
		return this.each(function(){=0A=
			jQuery( this ).contents().wrapAll( html );=0A=
		});=0A=
	},=0A=
=0A=
	wrap: function( html ) {=0A=
		return this.each(function(){=0A=
			jQuery( this ).wrapAll( html );=0A=
		});=0A=
	},=0A=
=0A=
	append: function() {=0A=
		return this.domManip(arguments, true, false, function(elem){=0A=
			if (this.nodeType =3D=3D 1)=0A=
				this.appendChild( elem );=0A=
		});=0A=
	},=0A=
=0A=
	prepend: function() {=0A=
		return this.domManip(arguments, true, true, function(elem){=0A=
			if (this.nodeType =3D=3D 1)=0A=
				this.insertBefore( elem, this.firstChild );=0A=
		});=0A=
	},=0A=
=0A=
	before: function() {=0A=
		return this.domManip(arguments, false, false, function(elem){=0A=
			this.parentNode.insertBefore( elem, this );=0A=
		});=0A=
	},=0A=
=0A=
	after: function() {=0A=
		return this.domManip(arguments, false, true, function(elem){=0A=
			this.parentNode.insertBefore( elem, this.nextSibling );=0A=
		});=0A=
	},=0A=
=0A=
	end: function() {=0A=
		return this.prevObject || jQuery( [] );=0A=
	},=0A=
=0A=
	find: function( selector ) {=0A=
		var elems =3D jQuery.map(this, function(elem){=0A=
			return jQuery.find( selector, elem );=0A=
		});=0A=
=0A=
		return this.pushStack( /[^+>] [^+>]/.test( selector ) || =
selector.indexOf("..") > -1 ?=0A=
			jQuery.unique( elems ) :=0A=
			elems );=0A=
	},=0A=
=0A=
	clone: function( events ) {=0A=
		// Do the clone=0A=
		var ret =3D this.map(function(){=0A=
			if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {=0A=
				// IE copies events bound via attachEvent when=0A=
				// using cloneNode. Calling detachEvent on the=0A=
				// clone will also remove the events from the orignal=0A=
				// In order to get around this, we use innerHTML.=0A=
				// Unfortunately, this means some modifications to=0A=
				// attributes in IE that are actually only stored=0A=
				// as properties will not be copied (such as the=0A=
				// the name attribute on an input).=0A=
				var clone =3D this.cloneNode(true),=0A=
					container =3D document.createElement("div");=0A=
				container.appendChild(clone);=0A=
				return jQuery.clean([container.innerHTML])[0];=0A=
			} else=0A=
				return this.cloneNode(true);=0A=
		});=0A=
=0A=
		// Need to set the expando to null on the cloned set if it exists=0A=
		// removeData doesn't work here, IE removes it from the original as =
well=0A=
		// this is primarily for IE but the data expando shouldn't be copied =
over in any browser=0A=
		var clone =3D ret.find("*").andSelf().each(function(){=0A=
			if ( this[ expando ] !=3D undefined )=0A=
				this[ expando ] =3D null;=0A=
		});=0A=
=0A=
		// Copy the events from the original to the clone=0A=
		if ( events =3D=3D=3D true )=0A=
			this.find("*").andSelf().each(function(i){=0A=
				if (this.nodeType =3D=3D 3)=0A=
					return;=0A=
				var events =3D jQuery.data( this, "events" );=0A=
=0A=
				for ( var type in events )=0A=
					for ( var handler in events[ type ] )=0A=
						jQuery.event.add( clone[ i ], type, events[ type ][ handler ], =
events[ type ][ handler ].data );=0A=
			});=0A=
=0A=
		// Return the cloned set=0A=
		return ret;=0A=
	},=0A=
=0A=
	filter: function( selector ) {=0A=
		return this.pushStack(=0A=
			jQuery.isFunction( selector ) &&=0A=
			jQuery.grep(this, function(elem, i){=0A=
				return selector.call( elem, i );=0A=
			}) ||=0A=
=0A=
			jQuery.multiFilter( selector, this ) );=0A=
	},=0A=
=0A=
	not: function( selector ) {=0A=
		if ( selector.constructor =3D=3D String )=0A=
			// test special case where just one selector is passed in=0A=
			if ( isSimple.test( selector ) )=0A=
				return this.pushStack( jQuery.multiFilter( selector, this, true ) );=0A=
			else=0A=
				selector =3D jQuery.multiFilter( selector, this );=0A=
=0A=
		var isArrayLike =3D selector.length && selector[selector.length - 1] =
!=3D=3D undefined && !selector.nodeType;=0A=
		return this.filter(function() {=0A=
			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this !=3D =
selector;=0A=
		});=0A=
	},=0A=
=0A=
	add: function( selector ) {=0A=
		return this.pushStack( jQuery.unique( jQuery.merge(=0A=
			this.get(),=0A=
			typeof selector =3D=3D 'string' ?=0A=
				jQuery( selector ) :=0A=
				jQuery.makeArray( selector )=0A=
		)));=0A=
	},=0A=
=0A=
	is: function( selector ) {=0A=
		return !!selector && jQuery.multiFilter( selector, this ).length > 0;=0A=
	},=0A=
=0A=
	hasClass: function( selector ) {=0A=
		return this.is( "." + selector );=0A=
	},=0A=
=0A=
	val: function( value ) {=0A=
		if ( value =3D=3D undefined ) {=0A=
=0A=
			if ( this.length ) {=0A=
				var elem =3D this[0];=0A=
=0A=
				// We need to handle select boxes special=0A=
				if ( jQuery.nodeName( elem, "select" ) ) {=0A=
					var index =3D elem.selectedIndex,=0A=
						values =3D [],=0A=
						options =3D elem.options,=0A=
						one =3D elem.type =3D=3D "select-one";=0A=
=0A=
					// Nothing was selected=0A=
					if ( index < 0 )=0A=
						return null;=0A=
=0A=
					// Loop through all the selected options=0A=
					for ( var i =3D one ? index : 0, max =3D one ? index + 1 : =
options.length; i < max; i++ ) {=0A=
						var option =3D options[ i ];=0A=
=0A=
						if ( option.selected ) {=0A=
							// Get the specifc value for the option=0A=
							value =3D jQuery.browser.msie && =
!option.attributes.value.specified ? option.text : option.value;=0A=
=0A=
							// We don't need an array for one selects=0A=
							if ( one )=0A=
								return value;=0A=
=0A=
							// Multi-Selects return an array=0A=
							values.push( value );=0A=
						}=0A=
					}=0A=
=0A=
					return values;=0A=
=0A=
				// Everything else, we just grab the value=0A=
				} else=0A=
					return (this[0].value || "").replace(/\r/g, "");=0A=
=0A=
			}=0A=
=0A=
			return undefined;=0A=
		}=0A=
=0A=
		if( value.constructor =3D=3D Number )=0A=
			value +=3D '';=0A=
=0A=
		return this.each(function(){=0A=
			if ( this.nodeType !=3D 1 )=0A=
				return;=0A=
=0A=
			if ( value.constructor =3D=3D Array && /radio|checkbox/.test( =
this.type ) )=0A=
				this.checked =3D (jQuery.inArray(this.value, value) >=3D 0 ||=0A=
					jQuery.inArray(this.name, value) >=3D 0);=0A=
=0A=
			else if ( jQuery.nodeName( this, "select" ) ) {=0A=
				var values =3D jQuery.makeArray(value);=0A=
=0A=
				jQuery( "option", this ).each(function(){=0A=
					this.selected =3D (jQuery.inArray( this.value, values ) >=3D 0 ||=0A=
						jQuery.inArray( this.text, values ) >=3D 0);=0A=
				});=0A=
=0A=
				if ( !values.length )=0A=
					this.selectedIndex =3D -1;=0A=
=0A=
			} else=0A=
				this.value =3D value;=0A=
		});=0A=
	},=0A=
=0A=
	html: function( value ) {=0A=
		return value =3D=3D undefined ?=0A=
			(this[0] ?=0A=
				this[0].innerHTML :=0A=
				null) :=0A=
			this.empty().append( value );=0A=
	},=0A=
=0A=
	replaceWith: function( value ) {=0A=
		return this.after( value ).remove();=0A=
	},=0A=
=0A=
	eq: function( i ) {=0A=
		return this.slice( i, i + 1 );=0A=
	},=0A=
=0A=
	slice: function() {=0A=
		return this.pushStack( Array.prototype.slice.apply( this, arguments ) =
);=0A=
	},=0A=
=0A=
	map: function( callback ) {=0A=
		return this.pushStack( jQuery.map(this, function(elem, i){=0A=
			return callback.call( elem, i, elem );=0A=
		}));=0A=
	},=0A=
=0A=
	andSelf: function() {=0A=
		return this.add( this.prevObject );=0A=
	},=0A=
=0A=
	data: function( key, value ){=0A=
		var parts =3D key.split(".");=0A=
		parts[1] =3D parts[1] ? "." + parts[1] : "";=0A=
=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			var data =3D this.triggerHandler("getData" + parts[1] + "!", =
[parts[0]]);=0A=
=0A=
			if ( data =3D=3D=3D undefined && this.length )=0A=
				data =3D jQuery.data( this[0], key );=0A=
=0A=
			return data =3D=3D=3D undefined && parts[1] ?=0A=
				this.data( parts[0] ) :=0A=
				data;=0A=
		} else=0A=
			return this.trigger("setData" + parts[1] + "!", [parts[0], =
value]).each(function(){=0A=
				jQuery.data( this, key, value );=0A=
			});=0A=
	},=0A=
=0A=
	removeData: function( key ){=0A=
		return this.each(function(){=0A=
			jQuery.removeData( this, key );=0A=
		});=0A=
	},=0A=
=0A=
	domManip: function( args, table, reverse, callback ) {=0A=
		var clone =3D this.length > 1, elems;=0A=
=0A=
		return this.each(function(){=0A=
			if ( !elems ) {=0A=
				elems =3D jQuery.clean( args, this.ownerDocument );=0A=
=0A=
				if ( reverse )=0A=
					elems.reverse();=0A=
			}=0A=
=0A=
			var obj =3D this;=0A=
=0A=
			if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( =
elems[0], "tr" ) )=0A=
				obj =3D this.getElementsByTagName("tbody")[0] || this.appendChild( =
this.ownerDocument.createElement("tbody") );=0A=
=0A=
			var scripts =3D jQuery( [] );=0A=
=0A=
			jQuery.each(elems, function(){=0A=
				var elem =3D clone ?=0A=
					jQuery( this ).clone( true )[0] :=0A=
					this;=0A=
=0A=
				// execute all scripts after the elements have been injected=0A=
				if ( jQuery.nodeName( elem, "script" ) )=0A=
					scripts =3D scripts.add( elem );=0A=
				else {=0A=
					// Remove any inner scripts for later evaluation=0A=
					if ( elem.nodeType =3D=3D 1 )=0A=
						scripts =3D scripts.add( jQuery( "script", elem ).remove() );=0A=
=0A=
					// Inject the elements into the document=0A=
					callback.call( obj, elem );=0A=
				}=0A=
			});=0A=
=0A=
			scripts.each( evalScript );=0A=
		});=0A=
	}=0A=
};=0A=
=0A=
// Give the init function the jQuery prototype for later instantiation=0A=
jQuery.fn.init.prototype =3D jQuery.fn;=0A=
=0A=
function evalScript( i, elem ) {=0A=
	if ( elem.src )=0A=
		jQuery.ajax({=0A=
			url: elem.src,=0A=
			async: false,=0A=
			dataType: "script"=0A=
		});=0A=
=0A=
	else=0A=
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || =
"" );=0A=
=0A=
	if ( elem.parentNode )=0A=
		elem.parentNode.removeChild( elem );=0A=
}=0A=
=0A=
function now(){=0A=
	return +new Date;=0A=
}=0A=
=0A=
jQuery.extend =3D jQuery.fn.extend =3D function() {=0A=
	// copy reference to target object=0A=
	var target =3D arguments[0] || {}, i =3D 1, length =3D =
arguments.length, deep =3D false, options;=0A=
=0A=
	// Handle a deep copy situation=0A=
	if ( target.constructor =3D=3D Boolean ) {=0A=
		deep =3D target;=0A=
		target =3D arguments[1] || {};=0A=
		// skip the boolean and the target=0A=
		i =3D 2;=0A=
	}=0A=
=0A=
	// Handle case when target is a string or something (possible in deep =
copy)=0A=
	if ( typeof target !=3D "object" && typeof target !=3D "function" )=0A=
		target =3D {};=0A=
=0A=
	// extend jQuery itself if only one argument is passed=0A=
	if ( length =3D=3D i ) {=0A=
		target =3D this;=0A=
		--i;=0A=
	}=0A=
=0A=
	for ( ; i < length; i++ )=0A=
		// Only deal with non-null/undefined values=0A=
		if ( (options =3D arguments[ i ]) !=3D null )=0A=
			// Extend the base object=0A=
			for ( var name in options ) {=0A=
				var src =3D target[ name ], copy =3D options[ name ];=0A=
=0A=
				// Prevent never-ending loop=0A=
				if ( target =3D=3D=3D copy )=0A=
					continue;=0A=
=0A=
				// Recurse if we're merging object values=0A=
				if ( deep && copy && typeof copy =3D=3D "object" && !copy.nodeType )=0A=
					target[ name ] =3D jQuery.extend( deep, =0A=
						// Never move original objects, clone them=0A=
						src || ( copy.length !=3D null ? [ ] : { } )=0A=
					, copy );=0A=
=0A=
				// Don't bring in undefined values=0A=
				else if ( copy !=3D=3D undefined )=0A=
					target[ name ] =3D copy;=0A=
=0A=
			}=0A=
=0A=
	// Return the modified object=0A=
	return target;=0A=
};=0A=
=0A=
var expando =3D "jQuery" + now(), uuid =3D 0, windowData =3D {},=0A=
	// exclude the following css properties to add px=0A=
	exclude =3D /z-?index|font-?weight|opacity|zoom|line-?height/i,=0A=
	// cache defaultView=0A=
	defaultView =3D document.defaultView || {};=0A=
=0A=
jQuery.extend({=0A=
	noConflict: function( deep ) {=0A=
		window.$ =3D _$;=0A=
=0A=
		if ( deep )=0A=
			window.jQuery =3D _jQuery;=0A=
=0A=
		return jQuery;=0A=
	},=0A=
=0A=
	// See test/unit/core.js for details concerning this function.=0A=
	isFunction: function( fn ) {=0A=
		return !!fn && typeof fn !=3D "string" && !fn.nodeName &&=0A=
			fn.constructor !=3D Array && /^[\s[]?function/.test( fn + "" );=0A=
	},=0A=
=0A=
	// check if an element is in a (or is an) XML document=0A=
	isXMLDoc: function( elem ) {=0A=
		return elem.documentElement && !elem.body ||=0A=
			elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;=0A=
	},=0A=
=0A=
	// Evalulates a script in a global context=0A=
	globalEval: function( data ) {=0A=
		data =3D jQuery.trim( data );=0A=
=0A=
		if ( data ) {=0A=
			// Inspired by code by Andrea Giammarchi=0A=
			// =
http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom=
.html=0A=
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement,=0A=
				script =3D document.createElement("script");=0A=
=0A=
			script.type =3D "text/javascript";=0A=
			if ( jQuery.browser.msie )=0A=
				script.text =3D data;=0A=
			else=0A=
				script.appendChild( document.createTextNode( data ) );=0A=
=0A=
			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.=0A=
			// This arises when a base node is used (#2709).=0A=
			head.insertBefore( script, head.firstChild );=0A=
			head.removeChild( script );=0A=
		}=0A=
	},=0A=
=0A=
	nodeName: function( elem, name ) {=0A=
		return elem.nodeName && elem.nodeName.toUpperCase() =3D=3D =
name.toUpperCase();=0A=
	},=0A=
=0A=
	cache: {},=0A=
=0A=
	data: function( elem, name, data ) {=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var id =3D elem[ expando ];=0A=
=0A=
		// Compute a unique ID for the element=0A=
		if ( !id )=0A=
			id =3D elem[ expando ] =3D ++uuid;=0A=
=0A=
		// Only generate the data cache if we're=0A=
		// trying to access or manipulate it=0A=
		if ( name && !jQuery.cache[ id ] )=0A=
			jQuery.cache[ id ] =3D {};=0A=
=0A=
		// Prevent overriding the named cache with undefined values=0A=
		if ( data !=3D=3D undefined )=0A=
			jQuery.cache[ id ][ name ] =3D data;=0A=
=0A=
		// Return the named cache data, or the ID for the element=0A=
		return name ?=0A=
			jQuery.cache[ id ][ name ] :=0A=
			id;=0A=
	},=0A=
=0A=
	removeData: function( elem, name ) {=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var id =3D elem[ expando ];=0A=
=0A=
		// If we want to remove a specific section of the element's data=0A=
		if ( name ) {=0A=
			if ( jQuery.cache[ id ] ) {=0A=
				// Remove the section of cache data=0A=
				delete jQuery.cache[ id ][ name ];=0A=
=0A=
				// If we've removed all the data, remove the element's cache=0A=
				name =3D "";=0A=
=0A=
				for ( name in jQuery.cache[ id ] )=0A=
					break;=0A=
=0A=
				if ( !name )=0A=
					jQuery.removeData( elem );=0A=
			}=0A=
=0A=
		// Otherwise, we want to remove all of the element's data=0A=
		} else {=0A=
			// Clean up the element expando=0A=
			try {=0A=
				delete elem[ expando ];=0A=
			} catch(e){=0A=
				// IE has trouble directly removing the expando=0A=
				// but it's ok with using removeAttribute=0A=
				if ( elem.removeAttribute )=0A=
					elem.removeAttribute( expando );=0A=
			}=0A=
=0A=
			// Completely remove the data cache=0A=
			delete jQuery.cache[ id ];=0A=
		}=0A=
	},=0A=
=0A=
	// args is for internal usage only=0A=
	each: function( object, callback, args ) {=0A=
		var name, i =3D 0, length =3D object.length;=0A=
=0A=
		if ( args ) {=0A=
			if ( length =3D=3D undefined ) {=0A=
				for ( name in object )=0A=
					if ( callback.apply( object[ name ], args ) =3D=3D=3D false )=0A=
						break;=0A=
			} else=0A=
				for ( ; i < length; )=0A=
					if ( callback.apply( object[ i++ ], args ) =3D=3D=3D false )=0A=
						break;=0A=
=0A=
		// A special, fast, case for the most common use of each=0A=
		} else {=0A=
			if ( length =3D=3D undefined ) {=0A=
				for ( name in object )=0A=
					if ( callback.call( object[ name ], name, object[ name ] ) =
=3D=3D=3D false )=0A=
						break;=0A=
			} else=0A=
				for ( var value =3D object[0];=0A=
					i < length && callback.call( value, i, value ) !=3D=3D false; value =
=3D object[++i] ){}=0A=
		}=0A=
=0A=
		return object;=0A=
	},=0A=
=0A=
	prop: function( elem, value, type, i, name ) {=0A=
		// Handle executable functions=0A=
		if ( jQuery.isFunction( value ) )=0A=
			value =3D value.call( elem, i );=0A=
=0A=
		// Handle passing in a number to a CSS property=0A=
		return value && value.constructor =3D=3D Number && type =3D=3D =
"curCSS" && !exclude.test( name ) ?=0A=
			value + "px" :=0A=
			value;=0A=
	},=0A=
=0A=
	className: {=0A=
		// internal only, use addClass("class")=0A=
		add: function( elem, classNames ) {=0A=
			jQuery.each((classNames || "").split(/\s+/), function(i, className){=0A=
				if ( elem.nodeType =3D=3D 1 && !jQuery.className.has( =
elem.className, className ) )=0A=
					elem.className +=3D (elem.className ? " " : "") + className;=0A=
			});=0A=
		},=0A=
=0A=
		// internal only, use removeClass("class")=0A=
		remove: function( elem, classNames ) {=0A=
			if (elem.nodeType =3D=3D 1)=0A=
				elem.className =3D classNames !=3D undefined ?=0A=
					jQuery.grep(elem.className.split(/\s+/), function(className){=0A=
						return !jQuery.className.has( classNames, className );=0A=
					}).join(" ") :=0A=
					"";=0A=
		},=0A=
=0A=
		// internal only, use hasClass("class")=0A=
		has: function( elem, className ) {=0A=
			return jQuery.inArray( className, (elem.className || =
elem).toString().split(/\s+/) ) > -1;=0A=
		}=0A=
	},=0A=
=0A=
	// A method for quickly swapping in/out CSS properties to get correct =
calculations=0A=
	swap: function( elem, options, callback ) {=0A=
		var old =3D {};=0A=
		// Remember the old values, and insert the new ones=0A=
		for ( var name in options ) {=0A=
			old[ name ] =3D elem.style[ name ];=0A=
			elem.style[ name ] =3D options[ name ];=0A=
		}=0A=
=0A=
		callback.call( elem );=0A=
=0A=
		// Revert the old values=0A=
		for ( var name in options )=0A=
			elem.style[ name ] =3D old[ name ];=0A=
	},=0A=
=0A=
	css: function( elem, name, force ) {=0A=
		if ( name =3D=3D "width" || name =3D=3D "height" ) {=0A=
			var val, props =3D { position: "absolute", visibility: "hidden", =
display:"block" }, which =3D name =3D=3D "width" ? [ "Left", "Right" ] : =
[ "Top", "Bottom" ];=0A=
=0A=
			function getWH() {=0A=
				val =3D name =3D=3D "width" ? elem.offsetWidth : elem.offsetHeight;=0A=
				var padding =3D 0, border =3D 0;=0A=
				jQuery.each( which, function() {=0A=
					padding +=3D parseFloat(jQuery.curCSS( elem, "padding" + this, =
true)) || 0;=0A=
					border +=3D parseFloat(jQuery.curCSS( elem, "border" + this + =
"Width", true)) || 0;=0A=
				});=0A=
				val -=3D Math.round(padding + border);=0A=
			}=0A=
=0A=
			if ( jQuery(elem).is(":visible") )=0A=
				getWH();=0A=
			else=0A=
				jQuery.swap( elem, props, getWH );=0A=
=0A=
			return Math.max(0, val);=0A=
		}=0A=
=0A=
		return jQuery.curCSS( elem, name, force );=0A=
	},=0A=
=0A=
	curCSS: function( elem, name, force ) {=0A=
		var ret, style =3D elem.style;=0A=
=0A=
		// A helper method for determining if an element's values are broken=0A=
		function color( elem ) {=0A=
			if ( !jQuery.browser.safari )=0A=
				return false;=0A=
=0A=
			// defaultView is cached=0A=
			var ret =3D defaultView.getComputedStyle( elem, null );=0A=
			return !ret || ret.getPropertyValue("color") =3D=3D "";=0A=
		}=0A=
=0A=
		// We need to handle opacity special in IE=0A=
		if ( name =3D=3D "opacity" && jQuery.browser.msie ) {=0A=
			ret =3D jQuery.attr( style, "opacity" );=0A=
=0A=
			return ret =3D=3D "" ?=0A=
				"1" :=0A=
				ret;=0A=
		}=0A=
		// Opera sometimes will give the wrong display answer, this fixes it, =
see #2037=0A=
		if ( jQuery.browser.opera && name =3D=3D "display" ) {=0A=
			var save =3D style.outline;=0A=
			style.outline =3D "0 solid black";=0A=
			style.outline =3D save;=0A=
		}=0A=
=0A=
		// Make sure we're using the right name for getting the float value=0A=
		if ( name.match( /float/i ) )=0A=
			name =3D styleFloat;=0A=
=0A=
		if ( !force && style && style[ name ] )=0A=
			ret =3D style[ name ];=0A=
=0A=
		else if ( defaultView.getComputedStyle ) {=0A=
=0A=
			// Only "float" is needed here=0A=
			if ( name.match( /float/i ) )=0A=
				name =3D "float";=0A=
=0A=
			name =3D name.replace( /([A-Z])/g, "-$1" ).toLowerCase();=0A=
=0A=
			var computedStyle =3D defaultView.getComputedStyle( elem, null );=0A=
=0A=
			if ( computedStyle && !color( elem ) )=0A=
				ret =3D computedStyle.getPropertyValue( name );=0A=
=0A=
			// If the element isn't reporting its values properly in Safari=0A=
			// then some display: none elements are involved=0A=
			else {=0A=
				var swap =3D [], stack =3D [], a =3D elem, i =3D 0;=0A=
=0A=
				// Locate all of the parent display: none elements=0A=
				for ( ; a && color(a); a =3D a.parentNode )=0A=
					stack.unshift(a);=0A=
=0A=
				// Go through and make them visible, but in reverse=0A=
				// (It would be better if we knew the exact display type that they =
had)=0A=
				for ( ; i < stack.length; i++ )=0A=
					if ( color( stack[ i ] ) ) {=0A=
						swap[ i ] =3D stack[ i ].style.display;=0A=
						stack[ i ].style.display =3D "block";=0A=
					}=0A=
=0A=
				// Since we flip the display style, we have to handle that=0A=
				// one special, otherwise get the value=0A=
				ret =3D name =3D=3D "display" && swap[ stack.length - 1 ] !=3D null ?=0A=
					"none" :=0A=
					( computedStyle && computedStyle.getPropertyValue( name ) ) || "";=0A=
=0A=
				// Finally, revert the display styles back=0A=
				for ( i =3D 0; i < swap.length; i++ )=0A=
					if ( swap[ i ] !=3D null )=0A=
						stack[ i ].style.display =3D swap[ i ];=0A=
			}=0A=
=0A=
			// We should always get a number back from opacity=0A=
			if ( name =3D=3D "opacity" && ret =3D=3D "" )=0A=
				ret =3D "1";=0A=
=0A=
		} else if ( elem.currentStyle ) {=0A=
			var camelCase =3D name.replace(/\-(\w)/g, function(all, letter){=0A=
				return letter.toUpperCase();=0A=
			});=0A=
=0A=
			ret =3D elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];=0A=
=0A=
			// From the awesome hack by Dean Edwards=0A=
			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291=0A=
=0A=
			// If we're not dealing with a regular pixel number=0A=
			// but a number that has a weird ending, we need to convert it to =
pixels=0A=
			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {=0A=
				// Remember the original values=0A=
				var left =3D style.left, rsLeft =3D elem.runtimeStyle.left;=0A=
=0A=
				// Put in the new values to get a computed value out=0A=
				elem.runtimeStyle.left =3D elem.currentStyle.left;=0A=
				style.left =3D ret || 0;=0A=
				ret =3D style.pixelLeft + "px";=0A=
=0A=
				// Revert the changed values=0A=
				style.left =3D left;=0A=
				elem.runtimeStyle.left =3D rsLeft;=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	clean: function( elems, context ) {=0A=
		var ret =3D [];=0A=
		context =3D context || document;=0A=
		// !context.createElement fails in IE with an error but returns typeof =
'object'=0A=
		if (typeof context.createElement =3D=3D 'undefined')=0A=
			context =3D context.ownerDocument || context[0] && =
context[0].ownerDocument || document;=0A=
=0A=
		jQuery.each(elems, function(i, elem){=0A=
			if ( !elem )=0A=
				return;=0A=
=0A=
			if ( elem.constructor =3D=3D Number )=0A=
				elem +=3D '';=0A=
=0A=
			// Convert html string into DOM nodes=0A=
			if ( typeof elem =3D=3D "string" ) {=0A=
				// Fix "XHTML"-style tags in all browsers=0A=
				elem =3D elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, =
tag){=0A=
					return =
tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?=0A=
						all :=0A=
						front + "></" + tag + ">";=0A=
				});=0A=
=0A=
				// Trim whitespace, otherwise indexOf won't work as expected=0A=
				var tags =3D jQuery.trim( elem ).toLowerCase(), div =3D =
context.createElement("div");=0A=
=0A=
				var wrap =3D=0A=
					// option or optgroup=0A=
					!tags.indexOf("<opt") &&=0A=
					[ 1, "<select multiple=3D'multiple'>", "</select>" ] ||=0A=
=0A=
					!tags.indexOf("<leg") &&=0A=
					[ 1, "<fieldset>", "</fieldset>" ] ||=0A=
=0A=
					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&=0A=
					[ 1, "<table>", "</table>" ] ||=0A=
=0A=
					!tags.indexOf("<tr") &&=0A=
					[ 2, "<table><tbody>", "</tbody></table>" ] ||=0A=
=0A=
				 	// <thead> matched above=0A=
					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&=0A=
					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||=0A=
=0A=
					!tags.indexOf("<col") &&=0A=
					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||=0A=
=0A=
					// IE can't serialize <link> and <script> tags normally=0A=
					jQuery.browser.msie &&=0A=
					[ 1, "div<div>", "</div>" ] ||=0A=
=0A=
					[ 0, "", "" ];=0A=
=0A=
				// Go to html and back, then peel off extra wrappers=0A=
				div.innerHTML =3D wrap[1] + elem + wrap[2];=0A=
=0A=
				// Move to the right depth=0A=
				while ( wrap[0]-- )=0A=
					div =3D div.lastChild;=0A=
=0A=
				// Remove IE's autoinserted <tbody> from table fragments=0A=
				if ( jQuery.browser.msie ) {=0A=
=0A=
					// String was a <table>, *may* have spurious <tbody>=0A=
					var tbody =3D !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 =
?=0A=
						div.firstChild && div.firstChild.childNodes :=0A=
=0A=
						// String was a bare <thead> or <tfoot>=0A=
						wrap[1] =3D=3D "<table>" && tags.indexOf("<tbody") < 0 ?=0A=
							div.childNodes :=0A=
							[];=0A=
=0A=
					for ( var j =3D tbody.length - 1; j >=3D 0 ; --j )=0A=
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j =
].childNodes.length )=0A=
							tbody[ j ].parentNode.removeChild( tbody[ j ] );=0A=
=0A=
					// IE completely kills leading whitespace when innerHTML is used=0A=
					if ( /^\s/.test( elem ) )=0A=
						div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), =
div.firstChild );=0A=
=0A=
				}=0A=
=0A=
				elem =3D jQuery.makeArray( div.childNodes );=0A=
			}=0A=
=0A=
			if ( elem.length =3D=3D=3D 0 && (!jQuery.nodeName( elem, "form" ) && =
!jQuery.nodeName( elem, "select" )) )=0A=
				return;=0A=
=0A=
			if ( elem[0] =3D=3D undefined || jQuery.nodeName( elem, "form" ) || =
elem.options )=0A=
				ret.push( elem );=0A=
=0A=
			else=0A=
				ret =3D jQuery.merge( ret, elem );=0A=
=0A=
		});=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	attr: function( elem, name, value ) {=0A=
		// don't set attributes on text and comment nodes=0A=
		if (!elem || elem.nodeType =3D=3D 3 || elem.nodeType =3D=3D 8)=0A=
			return undefined;=0A=
=0A=
		var notxml =3D !jQuery.isXMLDoc( elem ),=0A=
			// Whether we are setting (or getting)=0A=
			set =3D value !=3D=3D undefined,=0A=
			msie =3D jQuery.browser.msie;=0A=
=0A=
		// Try to normalize/fix the name=0A=
		name =3D notxml && jQuery.props[ name ] || name;=0A=
=0A=
		// Only do all the following if this is a node (faster for style)=0A=
		// IE elem.getAttribute passes even for style=0A=
		if ( elem.tagName ) {=0A=
=0A=
			// These attributes require special treatment=0A=
			var special =3D /href|src|style/.test( name );=0A=
=0A=
			// Safari mis-reports the default selected property of a hidden option=0A=
			// Accessing the parent's selectedIndex property fixes it=0A=
			if ( name =3D=3D "selected" && jQuery.browser.safari )=0A=
				elem.parentNode.selectedIndex;=0A=
=0A=
			// If applicable, access the attribute via the DOM 0 way=0A=
			if ( name in elem && notxml && !special ) {=0A=
				if ( set ){=0A=
					// We can't allow the type property to be changed (since it causes =
problems in IE)=0A=
					if ( name =3D=3D "type" && jQuery.nodeName( elem, "input" ) && =
elem.parentNode )=0A=
						throw "type property can't be changed";=0A=
=0A=
					elem[ name ] =3D value;=0A=
				}=0A=
=0A=
				// browsers index elements by id/name on forms, give priority to =
attributes.=0A=
				if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )=0A=
					return elem.getAttributeNode( name ).nodeValue;=0A=
=0A=
				return elem[ name ];=0A=
			}=0A=
=0A=
			if ( msie && notxml &&  name =3D=3D "style" )=0A=
				return jQuery.attr( elem.style, "cssText", value );=0A=
=0A=
			if ( set )=0A=
				// convert the value to a string (all browsers do this but IE) see =
#1070=0A=
				elem.setAttribute( name, "" + value );=0A=
=0A=
			var attr =3D msie && notxml && special=0A=
					// Some attributes require a special call on IE=0A=
					? elem.getAttribute( name, 2 )=0A=
					: elem.getAttribute( name );=0A=
=0A=
			// Non-existent attributes return null, we normalize to undefined=0A=
			return attr =3D=3D=3D null ? undefined : attr;=0A=
		}=0A=
=0A=
		// elem is actually elem.style ... set the style=0A=
=0A=
		// IE uses filters for opacity=0A=
		if ( msie && name =3D=3D "opacity" ) {=0A=
			if ( set ) {=0A=
				// IE has trouble with opacity if it does not have layout=0A=
				// Force it by setting the zoom level=0A=
				elem.zoom =3D 1;=0A=
=0A=
				// Set the alpha filter to set the opacity=0A=
				elem.filter =3D (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +=0A=
					(parseInt( value ) + '' =3D=3D "NaN" ? "" : "alpha(opacity=3D" + =
value * 100 + ")");=0A=
			}=0A=
=0A=
			return elem.filter && elem.filter.indexOf("opacity=3D") >=3D 0 ?=0A=
				(parseFloat( elem.filter.match(/opacity=3D([^)]*)/)[1] ) / 100) + '':=0A=
				"";=0A=
		}=0A=
=0A=
		name =3D name.replace(/-([a-z])/ig, function(all, letter){=0A=
			return letter.toUpperCase();=0A=
		});=0A=
=0A=
		if ( set )=0A=
			elem[ name ] =3D value;=0A=
=0A=
		return elem[ name ];=0A=
	},=0A=
=0A=
	trim: function( text ) {=0A=
		return (text || "").replace( /^\s+|\s+$/g, "" );=0A=
	},=0A=
=0A=
	makeArray: function( array ) {=0A=
		var ret =3D [];=0A=
=0A=
		if( array !=3D null ){=0A=
			var i =3D array.length;=0A=
			//the window, strings and functions also have 'length'=0A=
			if( i =3D=3D null || array.split || array.setInterval || array.call )=0A=
				ret[0] =3D array;=0A=
			else=0A=
				while( i )=0A=
					ret[--i] =3D array[i];=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	inArray: function( elem, array ) {=0A=
		for ( var i =3D 0, length =3D array.length; i < length; i++ )=0A=
		// Use =3D=3D=3D because on IE, window =3D=3D document=0A=
			if ( array[ i ] =3D=3D=3D elem )=0A=
				return i;=0A=
=0A=
		return -1;=0A=
	},=0A=
=0A=
	merge: function( first, second ) {=0A=
		// We have to loop this way because IE & Opera overwrite the length=0A=
		// expando of getElementsByTagName=0A=
		var i =3D 0, elem, pos =3D first.length;=0A=
		// Also, we need to make sure that the correct elements are being =
returned=0A=
		// (IE returns comment nodes in a '*' query)=0A=
		if ( jQuery.browser.msie ) {=0A=
			while ( elem =3D second[ i++ ] )=0A=
				if ( elem.nodeType !=3D 8 )=0A=
					first[ pos++ ] =3D elem;=0A=
=0A=
		} else=0A=
			while ( elem =3D second[ i++ ] )=0A=
				first[ pos++ ] =3D elem;=0A=
=0A=
		return first;=0A=
	},=0A=
=0A=
	unique: function( array ) {=0A=
		var ret =3D [], done =3D {};=0A=
=0A=
		try {=0A=
=0A=
			for ( var i =3D 0, length =3D array.length; i < length; i++ ) {=0A=
				var id =3D jQuery.data( array[ i ] );=0A=
=0A=
				if ( !done[ id ] ) {=0A=
					done[ id ] =3D true;=0A=
					ret.push( array[ i ] );=0A=
				}=0A=
			}=0A=
=0A=
		} catch( e ) {=0A=
			ret =3D array;=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	grep: function( elems, callback, inv ) {=0A=
		var ret =3D [];=0A=
=0A=
		// Go through the array, only saving the items=0A=
		// that pass the validator function=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ )=0A=
			if ( !inv !=3D !callback( elems[ i ], i ) )=0A=
				ret.push( elems[ i ] );=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	map: function( elems, callback ) {=0A=
		var ret =3D [];=0A=
=0A=
		// Go through the array, translating each of the items to their=0A=
		// new value (or values).=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {=0A=
			var value =3D callback( elems[ i ], i );=0A=
=0A=
			if ( value !=3D null )=0A=
				ret[ ret.length ] =3D value;=0A=
		}=0A=
=0A=
		return ret.concat.apply( [], ret );=0A=
	}=0A=
});=0A=
=0A=
var userAgent =3D navigator.userAgent.toLowerCase();=0A=
=0A=
// Figure out what browser is being used=0A=
jQuery.browser =3D {=0A=
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || =
[])[1],=0A=
	safari: /webkit/.test( userAgent ),=0A=
	opera: /opera/.test( userAgent ),=0A=
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),=0A=
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( =
userAgent )=0A=
};=0A=
=0A=
var styleFloat =3D jQuery.browser.msie ?=0A=
	"styleFloat" :=0A=
	"cssFloat";=0A=
=0A=
jQuery.extend({=0A=
	// Check to see if the W3C box model is being used=0A=
	boxModel: !jQuery.browser.msie || document.compatMode =3D=3D =
"CSS1Compat",=0A=
=0A=
	props: {=0A=
		"for": "htmlFor",=0A=
		"class": "className",=0A=
		"float": styleFloat,=0A=
		cssFloat: styleFloat,=0A=
		styleFloat: styleFloat,=0A=
		readonly: "readOnly",=0A=
		maxlength: "maxLength",=0A=
		cellspacing: "cellSpacing"=0A=
	}=0A=
});=0A=
=0A=
jQuery.each({=0A=
	parent: function(elem){return elem.parentNode;},=0A=
	parents: function(elem){return jQuery.dir(elem,"parentNode");},=0A=
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},=0A=
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},=0A=
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},=0A=
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},=0A=
	siblings: function(elem){return =
jQuery.sibling(elem.parentNode.firstChild,elem);},=0A=
	children: function(elem){return jQuery.sibling(elem.firstChild);},=0A=
	contents: function(elem){return =
jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.d=
ocument:jQuery.makeArray(elem.childNodes);}=0A=
}, function(name, fn){=0A=
	jQuery.fn[ name ] =3D function( selector ) {=0A=
		var ret =3D jQuery.map( this, fn );=0A=
=0A=
		if ( selector && typeof selector =3D=3D "string" )=0A=
			ret =3D jQuery.multiFilter( selector, ret );=0A=
=0A=
		return this.pushStack( jQuery.unique( ret ) );=0A=
	};=0A=
});=0A=
=0A=
jQuery.each({=0A=
	appendTo: "append",=0A=
	prependTo: "prepend",=0A=
	insertBefore: "before",=0A=
	insertAfter: "after",=0A=
	replaceAll: "replaceWith"=0A=
}, function(name, original){=0A=
	jQuery.fn[ name ] =3D function() {=0A=
		var args =3D arguments;=0A=
=0A=
		return this.each(function(){=0A=
			for ( var i =3D 0, length =3D args.length; i < length; i++ )=0A=
				jQuery( args[ i ] )[ original ]( this );=0A=
		});=0A=
	};=0A=
});=0A=
=0A=
jQuery.each({=0A=
	removeAttr: function( name ) {=0A=
		jQuery.attr( this, name, "" );=0A=
		if (this.nodeType =3D=3D 1)=0A=
			this.removeAttribute( name );=0A=
	},=0A=
=0A=
	addClass: function( classNames ) {=0A=
		jQuery.className.add( this, classNames );=0A=
	},=0A=
=0A=
	removeClass: function( classNames ) {=0A=
		jQuery.className.remove( this, classNames );=0A=
	},=0A=
=0A=
	toggleClass: function( classNames ) {=0A=
		jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" =
: "add" ]( this, classNames );=0A=
	},=0A=
=0A=
	remove: function( selector ) {=0A=
		if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {=0A=
			// Prevent memory leaks=0A=
			jQuery( "*", this ).add(this).each(function(){=0A=
				jQuery.event.remove(this);=0A=
				jQuery.removeData(this);=0A=
			});=0A=
			if (this.parentNode)=0A=
				this.parentNode.removeChild( this );=0A=
		}=0A=
	},=0A=
=0A=
	empty: function() {=0A=
		// Remove element nodes and prevent memory leaks=0A=
		jQuery( ">*", this ).remove();=0A=
=0A=
		// Remove any remaining nodes=0A=
		while ( this.firstChild )=0A=
			this.removeChild( this.firstChild );=0A=
	}=0A=
}, function(name, fn){=0A=
	jQuery.fn[ name ] =3D function(){=0A=
		return this.each( fn, arguments );=0A=
	};=0A=
});=0A=
=0A=
jQuery.each([ "Height", "Width" ], function(i, name){=0A=
	var type =3D name.toLowerCase();=0A=
=0A=
	jQuery.fn[ type ] =3D function( size ) {=0A=
		// Get window width or height=0A=
		return this[0] =3D=3D window ?=0A=
			// Opera reports document.body.client[Width/Height] properly in both =
quirks and standards=0A=
			jQuery.browser.opera && document.body[ "client" + name ] ||=0A=
=0A=
			// Safari reports inner[Width/Height] just fine (Mozilla and Opera =
include scroll bar widths)=0A=
			jQuery.browser.safari && window[ "inner" + name ] ||=0A=
=0A=
			// Everyone else use document.documentElement or document.body =
depending on Quirks vs Standards mode=0A=
			document.compatMode =3D=3D "CSS1Compat" && document.documentElement[ =
"client" + name ] || document.body[ "client" + name ] :=0A=
=0A=
			// Get document width or height=0A=
			this[0] =3D=3D document ?=0A=
				// Either scroll[Width/Height] or offset[Width/Height], whichever is =
greater=0A=
				Math.max(=0A=
					Math.max(document.body["scroll" + name], =
document.documentElement["scroll" + name]),=0A=
					Math.max(document.body["offset" + name], =
document.documentElement["offset" + name])=0A=
				) :=0A=
=0A=
				// Get or set width or height on the element=0A=
				size =3D=3D undefined ?=0A=
					// Get width or height on the element=0A=
					(this.length ? jQuery.css( this[0], type ) : null) :=0A=
=0A=
					// Set the width or height on the element (default to pixels if =
value is unitless)=0A=
					this.css( type, size.constructor =3D=3D String ? size : size + "px" =
);=0A=
	};=0A=
});=0A=
=0A=
// Helper function used by the dimensions and offset modules=0A=
function num(elem, prop) {=0A=
	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || =
0;=0A=
}var chars =3D jQuery.browser.safari && parseInt(jQuery.browser.version) =
< 417 ?=0A=
		"(?:[\\w*_-]|\\\\.)" :=0A=
		"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",=0A=
	quickChild =3D new RegExp("^>\\s*(" + chars + "+)"),=0A=
	quickID =3D new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),=0A=
	quickClass =3D new RegExp("^([#.]?)(" + chars + "*)");=0A=
=0A=
jQuery.extend({=0A=
	expr: {=0A=
		"": function(a,i,m){return m[2]=3D=3D"*"||jQuery.nodeName(a,m[2]);},=0A=
		"#": function(a,i,m){return a.getAttribute("id")=3D=3Dm[2];},=0A=
		":": {=0A=
			// Position Checks=0A=
			lt: function(a,i,m){return i<m[3]-0;},=0A=
			gt: function(a,i,m){return i>m[3]-0;},=0A=
			nth: function(a,i,m){return m[3]-0=3D=3Di;},=0A=
			eq: function(a,i,m){return m[3]-0=3D=3Di;},=0A=
			first: function(a,i){return i=3D=3D0;},=0A=
			last: function(a,i,m,r){return i=3D=3Dr.length-1;},=0A=
			even: function(a,i){return i%2=3D=3D0;},=0A=
			odd: function(a,i){return i%2;},=0A=
=0A=
			// Child Checks=0A=
			"first-child": function(a){return =
a.parentNode.getElementsByTagName("*")[0]=3D=3Da;},=0A=
			"last-child": function(a){return =
jQuery.nth(a.parentNode.lastChild,1,"previousSibling")=3D=3Da;},=0A=
			"only-child": function(a){return =
!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},=0A=
=0A=
			// Parent Checks=0A=
			parent: function(a){return a.firstChild;},=0A=
			empty: function(a){return !a.firstChild;},=0A=
=0A=
			// Text Check=0A=
			contains: function(a,i,m){return =
(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=3D0;},=0A=
=0A=
			// Visibility=0A=
			visible: function(a){return =
"hidden"!=3Da.type&&jQuery.css(a,"display")!=3D"none"&&jQuery.css(a,"visi=
bility")!=3D"hidden";},=0A=
			hidden: function(a){return =
"hidden"=3D=3Da.type||jQuery.css(a,"display")=3D=3D"none"||jQuery.css(a,"=
visibility")=3D=3D"hidden";},=0A=
=0A=
			// Form attributes=0A=
			enabled: function(a){return !a.disabled;},=0A=
			disabled: function(a){return a.disabled;},=0A=
			checked: function(a){return a.checked;},=0A=
			selected: function(a){return a.selected||jQuery.attr(a,"selected");},=0A=
=0A=
			// Form elements=0A=
			text: function(a){return "text"=3D=3Da.type;},=0A=
			radio: function(a){return "radio"=3D=3Da.type;},=0A=
			checkbox: function(a){return "checkbox"=3D=3Da.type;},=0A=
			file: function(a){return "file"=3D=3Da.type;},=0A=
			password: function(a){return "password"=3D=3Da.type;},=0A=
			submit: function(a){return "submit"=3D=3Da.type;},=0A=
			image: function(a){return "image"=3D=3Da.type;},=0A=
			reset: function(a){return "reset"=3D=3Da.type;},=0A=
			button: function(a){return =
"button"=3D=3Da.type||jQuery.nodeName(a,"button");},=0A=
			input: function(a){return =
/input|select|textarea|button/i.test(a.nodeName);},=0A=
=0A=
			// :has()=0A=
			has: function(a,i,m){return jQuery.find(m[3],a).length;},=0A=
=0A=
			// :header=0A=
			header: function(a){return /h\d/i.test(a.nodeName);},=0A=
=0A=
			// :animated=0A=
			animated: function(a){return =
jQuery.grep(jQuery.timers,function(fn){return a=3D=3Dfn.elem;}).length;}=0A=
		}=0A=
	},=0A=
=0A=
	// The regular expressions that power the parsing engine=0A=
	parse: [=0A=
		// Match: [@value=3D'test'], [@foo]=0A=
		/^(\[) *@?([\w-]+) *([!*$^~=3D]*) *('?"?)(.*?)\4 *\]/,=0A=
=0A=
		// Match: :contains('foo')=0A=
		/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,=0A=
=0A=
		// Match: :even, :last-child, #id, .class=0A=
		new RegExp("^([:.#]*)(" + chars + "+)")=0A=
	],=0A=
=0A=
	multiFilter: function( expr, elems, not ) {=0A=
		var old, cur =3D [];=0A=
=0A=
		while ( expr && expr !=3D old ) {=0A=
			old =3D expr;=0A=
			var f =3D jQuery.filter( expr, elems, not );=0A=
			expr =3D f.t.replace(/^\s*,\s*/, "" );=0A=
			cur =3D not ? elems =3D f.r : jQuery.merge( cur, f.r );=0A=
		}=0A=
=0A=
		return cur;=0A=
	},=0A=
=0A=
	find: function( t, context ) {=0A=
		// Quickly handle non-string expressions=0A=
		if ( typeof t !=3D "string" )=0A=
			return [ t ];=0A=
=0A=
		// check to make sure context is a DOM element or a document=0A=
		if ( context && context.nodeType !=3D 1 && context.nodeType !=3D 9)=0A=
			return [ ];=0A=
=0A=
		// Set the correct context (if none is provided)=0A=
		context =3D context || document;=0A=
=0A=
		// Initialize the search=0A=
		var ret =3D [context], done =3D [], last, nodeName;=0A=
=0A=
		// Continue while a selector expression exists, and while=0A=
		// we're no longer looping upon ourselves=0A=
		while ( t && last !=3D t ) {=0A=
			var r =3D [];=0A=
			last =3D t;=0A=
=0A=
			t =3D jQuery.trim(t);=0A=
=0A=
			var foundToken =3D false,=0A=
=0A=
			// An attempt at speeding up child selectors that=0A=
			// point to a specific element tag=0A=
				re =3D quickChild,=0A=
=0A=
				m =3D re.exec(t);=0A=
=0A=
			if ( m ) {=0A=
				nodeName =3D m[1].toUpperCase();=0A=
=0A=
				// Perform our own iteration and filter=0A=
				for ( var i =3D 0; ret[i]; i++ )=0A=
					for ( var c =3D ret[i].firstChild; c; c =3D c.nextSibling )=0A=
						if ( c.nodeType =3D=3D 1 && (nodeName =3D=3D "*" || =
c.nodeName.toUpperCase() =3D=3D nodeName) )=0A=
							r.push( c );=0A=
=0A=
				ret =3D r;=0A=
				t =3D t.replace( re, "" );=0A=
				if ( t.indexOf(" ") =3D=3D 0 ) continue;=0A=
				foundToken =3D true;=0A=
			} else {=0A=
				re =3D /^([>+~])\s*(\w*)/i;=0A=
=0A=
				if ( (m =3D re.exec(t)) !=3D null ) {=0A=
					r =3D [];=0A=
=0A=
					var merge =3D {};=0A=
					nodeName =3D m[2].toUpperCase();=0A=
					m =3D m[1];=0A=
=0A=
					for ( var j =3D 0, rl =3D ret.length; j < rl; j++ ) {=0A=
						var n =3D m =3D=3D "~" || m =3D=3D "+" ? ret[j].nextSibling : =
ret[j].firstChild;=0A=
						for ( ; n; n =3D n.nextSibling )=0A=
							if ( n.nodeType =3D=3D 1 ) {=0A=
								var id =3D jQuery.data(n);=0A=
=0A=
								if ( m =3D=3D "~" && merge[id] ) break;=0A=
=0A=
								if (!nodeName || n.nodeName.toUpperCase() =3D=3D nodeName ) {=0A=
									if ( m =3D=3D "~" ) merge[id] =3D true;=0A=
									r.push( n );=0A=
								}=0A=
=0A=
								if ( m =3D=3D "+" ) break;=0A=
							}=0A=
					}=0A=
=0A=
					ret =3D r;=0A=
=0A=
					// And remove the token=0A=
					t =3D jQuery.trim( t.replace( re, "" ) );=0A=
					foundToken =3D true;=0A=
				}=0A=
			}=0A=
=0A=
			// See if there's still an expression, and that we haven't already=0A=
			// matched a token=0A=
			if ( t && !foundToken ) {=0A=
				// Handle multiple expressions=0A=
				if ( !t.indexOf(",") ) {=0A=
					// Clean the result set=0A=
					if ( context =3D=3D ret[0] ) ret.shift();=0A=
=0A=
					// Merge the result sets=0A=
					done =3D jQuery.merge( done, ret );=0A=
=0A=
					// Reset the context=0A=
					r =3D ret =3D [context];=0A=
=0A=
					// Touch up the selector string=0A=
					t =3D " " + t.substr(1,t.length);=0A=
=0A=
				} else {=0A=
					// Optimize for the case nodeName#idName=0A=
					var re2 =3D quickID;=0A=
					var m =3D re2.exec(t);=0A=
=0A=
					// Re-organize the results, so that they're consistent=0A=
					if ( m ) {=0A=
						m =3D [ 0, m[2], m[3], m[1] ];=0A=
=0A=
					} else {=0A=
						// Otherwise, do a traditional filter check for=0A=
						// ID, class, and element selectors=0A=
						re2 =3D quickClass;=0A=
						m =3D re2.exec(t);=0A=
					}=0A=
=0A=
					m[2] =3D m[2].replace(/\\/g, "");=0A=
=0A=
					var elem =3D ret[ret.length-1];=0A=
=0A=
					// Try to do a global search by ID, where we can=0A=
					if ( m[1] =3D=3D "#" && elem && elem.getElementById && =
!jQuery.isXMLDoc(elem) ) {=0A=
						// Optimization for HTML document case=0A=
						var oid =3D elem.getElementById(m[2]);=0A=
=0A=
						// Do a quick check for the existence of the actual ID attribute=0A=
						// to avoid selecting by the name attribute in IE=0A=
						// also check to insure id is a string to avoid selecting an =
element with the name of 'id' inside a form=0A=
						if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof =
oid.id =3D=3D "string" && oid.id !=3D m[2] )=0A=
							oid =3D jQuery('[@id=3D"'+m[2]+'"]', elem)[0];=0A=
=0A=
						// Do a quick check for node name (where applicable) so=0A=
						// that div#foo searches will be really fast=0A=
						ret =3D r =3D oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] =
: [];=0A=
					} else {=0A=
						// We need to find all descendant elements=0A=
						for ( var i =3D 0; ret[i]; i++ ) {=0A=
							// Grab the tag name being searched for=0A=
							var tag =3D m[1] =3D=3D "#" && m[3] ? m[3] : m[1] !=3D "" || m[0] =
=3D=3D "" ? "*" : m[2];=0A=
=0A=
							// Handle IE7 being really dumb about <object>s=0A=
							if ( tag =3D=3D "*" && ret[i].nodeName.toLowerCase() =3D=3D =
"object" )=0A=
								tag =3D "param";=0A=
=0A=
							r =3D jQuery.merge( r, ret[i].getElementsByTagName( tag ));=0A=
						}=0A=
=0A=
						// It's faster to filter by class and be done with it=0A=
						if ( m[1] =3D=3D "." )=0A=
							r =3D jQuery.classFilter( r, m[2] );=0A=
=0A=
						// Same with ID filtering=0A=
						if ( m[1] =3D=3D "#" ) {=0A=
							var tmp =3D [];=0A=
=0A=
							// Try to find the element with the ID=0A=
							for ( var i =3D 0; r[i]; i++ )=0A=
								if ( r[i].getAttribute("id") =3D=3D m[2] ) {=0A=
									tmp =3D [ r[i] ];=0A=
									break;=0A=
								}=0A=
=0A=
							r =3D tmp;=0A=
						}=0A=
=0A=
						ret =3D r;=0A=
					}=0A=
=0A=
					t =3D t.replace( re2, "" );=0A=
				}=0A=
=0A=
			}=0A=
=0A=
			// If a selector string still exists=0A=
			if ( t ) {=0A=
				// Attempt to filter it=0A=
				var val =3D jQuery.filter(t,r);=0A=
				ret =3D r =3D val.r;=0A=
				t =3D jQuery.trim(val.t);=0A=
			}=0A=
		}=0A=
=0A=
		// An error occurred with the selector;=0A=
		// just return an empty set instead=0A=
		if ( t )=0A=
			ret =3D [];=0A=
=0A=
		// Remove the root context=0A=
		if ( ret && context =3D=3D ret[0] )=0A=
			ret.shift();=0A=
=0A=
		// And combine the results=0A=
		done =3D jQuery.merge( done, ret );=0A=
=0A=
		return done;=0A=
	},=0A=
=0A=
	classFilter: function(r,m,not){=0A=
		m =3D " " + m + " ";=0A=
		var tmp =3D [];=0A=
		for ( var i =3D 0; r[i]; i++ ) {=0A=
			var pass =3D (" " + r[i].className + " ").indexOf( m ) >=3D 0;=0A=
			if ( !not && pass || not && !pass )=0A=
				tmp.push( r[i] );=0A=
		}=0A=
		return tmp;=0A=
	},=0A=
=0A=
	filter: function(t,r,not) {=0A=
		var last;=0A=
=0A=
		// Look for common filter expressions=0A=
		while ( t && t !=3D last ) {=0A=
			last =3D t;=0A=
=0A=
			var p =3D jQuery.parse, m;=0A=
=0A=
			for ( var i =3D 0; p[i]; i++ ) {=0A=
				m =3D p[i].exec( t );=0A=
=0A=
				if ( m ) {=0A=
					// Remove what we just matched=0A=
					t =3D t.substring( m[0].length );=0A=
=0A=
					m[2] =3D m[2].replace(/\\/g, "");=0A=
					break;=0A=
				}=0A=
			}=0A=
=0A=
			if ( !m )=0A=
				break;=0A=
=0A=
			// :not() is a special case that can be optimized by=0A=
			// keeping it out of the expression list=0A=
			if ( m[1] =3D=3D ":" && m[2] =3D=3D "not" )=0A=
				// optimize if only one selector found (most common case)=0A=
				r =3D isSimple.test( m[3] ) ?=0A=
					jQuery.filter(m[3], r, true).r :=0A=
					jQuery( r ).not( m[3] );=0A=
=0A=
			// We can get a big speed boost by filtering by class here=0A=
			else if ( m[1] =3D=3D "." )=0A=
				r =3D jQuery.classFilter(r, m[2], not);=0A=
=0A=
			else if ( m[1] =3D=3D "[" ) {=0A=
				var tmp =3D [], type =3D m[3];=0A=
=0A=
				for ( var i =3D 0, rl =3D r.length; i < rl; i++ ) {=0A=
					var a =3D r[i], z =3D a[ jQuery.props[m[2]] || m[2] ];=0A=
=0A=
					if ( z =3D=3D null || /href|src|selected/.test(m[2]) )=0A=
						z =3D jQuery.attr(a,m[2]) || '';=0A=
=0A=
					if ( (type =3D=3D "" && !!z ||=0A=
						 type =3D=3D "=3D" && z =3D=3D m[5] ||=0A=
						 type =3D=3D "!=3D" && z !=3D m[5] ||=0A=
						 type =3D=3D "^=3D" && z && !z.indexOf(m[5]) ||=0A=
						 type =3D=3D "$=3D" && z.substr(z.length - m[5].length) =3D=3D =
m[5] ||=0A=
						 (type =3D=3D "*=3D" || type =3D=3D "~=3D") && z.indexOf(m[5]) =
>=3D 0) ^ not )=0A=
							tmp.push( a );=0A=
				}=0A=
=0A=
				r =3D tmp;=0A=
=0A=
			// We can get a speed boost by handling nth-child here=0A=
			} else if ( m[1] =3D=3D ":" && m[2] =3D=3D "nth-child" ) {=0A=
				var merge =3D {}, tmp =3D [],=0A=
					// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', =
'-n+6'=0A=
					test =3D /(-?)(\d*)n((?:\+|-)?\d*)/.exec(=0A=
						m[3] =3D=3D "even" && "2n" || m[3] =3D=3D "odd" && "2n+1" ||=0A=
						!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),=0A=
					// calculate the numbers (first)n+(last) including if they are =
negative=0A=
					first =3D (test[1] + (test[2] || 1)) - 0, last =3D test[3] - 0;=0A=
=0A=
				// loop through all the elements left in the jQuery object=0A=
				for ( var i =3D 0, rl =3D r.length; i < rl; i++ ) {=0A=
					var node =3D r[i], parentNode =3D node.parentNode, id =3D =
jQuery.data(parentNode);=0A=
=0A=
					if ( !merge[id] ) {=0A=
						var c =3D 1;=0A=
=0A=
						for ( var n =3D parentNode.firstChild; n; n =3D n.nextSibling )=0A=
							if ( n.nodeType =3D=3D 1 )=0A=
								n.nodeIndex =3D c++;=0A=
=0A=
						merge[id] =3D true;=0A=
					}=0A=
=0A=
					var add =3D false;=0A=
=0A=
					if ( first =3D=3D 0 ) {=0A=
						if ( node.nodeIndex =3D=3D last )=0A=
							add =3D true;=0A=
					} else if ( (node.nodeIndex - last) % first =3D=3D 0 && =
(node.nodeIndex - last) / first >=3D 0 )=0A=
						add =3D true;=0A=
=0A=
					if ( add ^ not )=0A=
						tmp.push( node );=0A=
				}=0A=
=0A=
				r =3D tmp;=0A=
=0A=
			// Otherwise, find the expression to execute=0A=
			} else {=0A=
				var fn =3D jQuery.expr[ m[1] ];=0A=
				if ( typeof fn =3D=3D "object" )=0A=
					fn =3D fn[ m[2] ];=0A=
=0A=
				if ( typeof fn =3D=3D "string" )=0A=
					fn =3D eval("false||function(a,i){return " + fn + ";}");=0A=
=0A=
				// Execute it against the current filter=0A=
				r =3D jQuery.grep( r, function(elem, i){=0A=
					return fn(elem, i, m, r);=0A=
				}, not );=0A=
			}=0A=
		}=0A=
=0A=
		// Return an array of filtered elements (r)=0A=
		// and the modified expression string (t)=0A=
		return { r: r, t: t };=0A=
	},=0A=
=0A=
	dir: function( elem, dir ){=0A=
		var matched =3D [],=0A=
			cur =3D elem[dir];=0A=
		while ( cur && cur !=3D document ) {=0A=
			if ( cur.nodeType =3D=3D 1 )=0A=
				matched.push( cur );=0A=
			cur =3D cur[dir];=0A=
		}=0A=
		return matched;=0A=
	},=0A=
=0A=
	nth: function(cur,result,dir,elem){=0A=
		result =3D result || 1;=0A=
		var num =3D 0;=0A=
=0A=
		for ( ; cur; cur =3D cur[dir] )=0A=
			if ( cur.nodeType =3D=3D 1 && ++num =3D=3D result )=0A=
				break;=0A=
=0A=
		return cur;=0A=
	},=0A=
=0A=
	sibling: function( n, elem ) {=0A=
		var r =3D [];=0A=
=0A=
		for ( ; n; n =3D n.nextSibling ) {=0A=
			if ( n.nodeType =3D=3D 1 && n !=3D elem )=0A=
				r.push( n );=0A=
		}=0A=
=0A=
		return r;=0A=
	}=0A=
});=0A=
/*=0A=
 * A number of helper functions used for managing events.=0A=
 * Many of the ideas behind this code orignated from=0A=
 * Dean Edwards' addEvent library.=0A=
 */=0A=
jQuery.event =3D {=0A=
=0A=
	// Bind an event to an element=0A=
	// Original by Dean Edwards=0A=
	add: function(elem, types, handler, data) {=0A=
		if ( elem.nodeType =3D=3D 3 || elem.nodeType =3D=3D 8 )=0A=
			return;=0A=
=0A=
		// For whatever reason, IE has trouble passing the window object=0A=
		// around, causing it to be cloned in the process=0A=
		if ( jQuery.browser.msie && elem.setInterval )=0A=
			elem =3D window;=0A=
=0A=
		// Make sure that the function being executed has a unique ID=0A=
		if ( !handler.guid )=0A=
			handler.guid =3D this.guid++;=0A=
=0A=
		// if data is passed, bind to handler=0A=
		if( data !=3D undefined ) {=0A=
			// Create temporary function pointer to original handler=0A=
			var fn =3D handler;=0A=
=0A=
			// Create unique handler function, wrapped around original handler=0A=
			handler =3D this.proxy( fn, function() {=0A=
				// Pass arguments and context to original handler=0A=
				return fn.apply(this, arguments);=0A=
			});=0A=
=0A=
			// Store data in unique handler=0A=
			handler.data =3D data;=0A=
		}=0A=
=0A=
		// Init the element's event structure=0A=
		var events =3D jQuery.data(elem, "events") || jQuery.data(elem, =
"events", {}),=0A=
			handle =3D jQuery.data(elem, "handle") || jQuery.data(elem, "handle", =
function(){=0A=
				// Handle the second event of a trigger and when=0A=
				// an event is called after a page has unloaded=0A=
				if ( typeof jQuery !=3D "undefined" && !jQuery.event.triggered )=0A=
					return jQuery.event.handle.apply(arguments.callee.elem, arguments);=0A=
			});=0A=
		// Add elem as a property of the handle function=0A=
		// This is to prevent a memory leak with non-native=0A=
		// event in IE.=0A=
		handle.elem =3D elem;=0A=
=0A=
		// Handle multiple events separated by a space=0A=
		// jQuery(...).bind("mouseover mouseout", fn);=0A=
		jQuery.each(types.split(/\s+/), function(index, type) {=0A=
			// Namespaced event handlers=0A=
			var parts =3D type.split(".");=0A=
			type =3D parts[0];=0A=
			handler.type =3D parts[1];=0A=
=0A=
			// Get the current list of functions bound to this event=0A=
			var handlers =3D events[type];=0A=
=0A=
			// Init the event handler queue=0A=
			if (!handlers) {=0A=
				handlers =3D events[type] =3D {};=0A=
=0A=
				// Check for a special event handler=0A=
				// Only use addEventListener/attachEvent if the special=0A=
				// events handler returns false=0A=
				if ( !jQuery.event.special[type] || =
jQuery.event.special[type].setup.call(elem) =3D=3D=3D false ) {=0A=
					// Bind the global event handler to the element=0A=
					if (elem.addEventListener)=0A=
						elem.addEventListener(type, handle, false);=0A=
					else if (elem.attachEvent)=0A=
						elem.attachEvent("on" + type, handle);=0A=
				}=0A=
			}=0A=
=0A=
			// Add the function to the element's handler list=0A=
			handlers[handler.guid] =3D handler;=0A=
=0A=
			// Keep track of which events have been used, for global triggering=0A=
			jQuery.event.global[type] =3D true;=0A=
		});=0A=
=0A=
		// Nullify elem to prevent memory leaks in IE=0A=
		elem =3D null;=0A=
	},=0A=
=0A=
	guid: 1,=0A=
	global: {},=0A=
=0A=
	// Detach an event or set of events from an element=0A=
	remove: function(elem, types, handler) {=0A=
		// don't do events on text and comment nodes=0A=
		if ( elem.nodeType =3D=3D 3 || elem.nodeType =3D=3D 8 )=0A=
			return;=0A=
=0A=
		var events =3D jQuery.data(elem, "events"), ret, index;=0A=
=0A=
		if ( events ) {=0A=
			// Unbind all events for the element=0A=
			if ( types =3D=3D undefined || (typeof types =3D=3D "string" && =
types.charAt(0) =3D=3D ".") )=0A=
				for ( var type in events )=0A=
					this.remove( elem, type + (types || "") );=0A=
			else {=0A=
				// types is actually an event object here=0A=
				if ( types.type ) {=0A=
					handler =3D types.handler;=0A=
					types =3D types.type;=0A=
				}=0A=
=0A=
				// Handle multiple events seperated by a space=0A=
				// jQuery(...).unbind("mouseover mouseout", fn);=0A=
				jQuery.each(types.split(/\s+/), function(index, type){=0A=
					// Namespaced event handlers=0A=
					var parts =3D type.split(".");=0A=
					type =3D parts[0];=0A=
=0A=
					if ( events[type] ) {=0A=
						// remove the given handler for the given type=0A=
						if ( handler )=0A=
							delete events[type][handler.guid];=0A=
=0A=
						// remove all handlers for the given type=0A=
						else=0A=
							for ( handler in events[type] )=0A=
								// Handle the removal of namespaced events=0A=
								if ( !parts[1] || events[type][handler].type =3D=3D parts[1] )=0A=
									delete events[type][handler];=0A=
=0A=
						// remove generic event handler if no more handlers exist=0A=
						for ( ret in events[type] ) break;=0A=
						if ( !ret ) {=0A=
							if ( !jQuery.event.special[type] || =
jQuery.event.special[type].teardown.call(elem) =3D=3D=3D false ) {=0A=
								if (elem.removeEventListener)=0A=
									elem.removeEventListener(type, jQuery.data(elem, "handle"), =
false);=0A=
								else if (elem.detachEvent)=0A=
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));=0A=
							}=0A=
							ret =3D null;=0A=
							delete events[type];=0A=
						}=0A=
					}=0A=
				});=0A=
			}=0A=
=0A=
			// Remove the expando if it's no longer used=0A=
			for ( ret in events ) break;=0A=
			if ( !ret ) {=0A=
				var handle =3D jQuery.data( elem, "handle" );=0A=
				if ( handle ) handle.elem =3D null;=0A=
				jQuery.removeData( elem, "events" );=0A=
				jQuery.removeData( elem, "handle" );=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	trigger: function(type, data, elem, donative, extra) {=0A=
		// Clone the incoming data, if any=0A=
		data =3D jQuery.makeArray(data);=0A=
=0A=
		if ( type.indexOf("!") >=3D 0 ) {=0A=
			type =3D type.slice(0, -1);=0A=
			var exclusive =3D true;=0A=
		}=0A=
=0A=
		// Handle a global trigger=0A=
		if ( !elem ) {=0A=
			// Only trigger if we've ever bound an event for it=0A=
			if ( this.global[type] )=0A=
				jQuery("*").add([window, document]).trigger(type, data);=0A=
=0A=
		// Handle triggering a single element=0A=
		} else {=0A=
			// don't do events on text and comment nodes=0A=
			if ( elem.nodeType =3D=3D 3 || elem.nodeType =3D=3D 8 )=0A=
				return undefined;=0A=
=0A=
			var val, ret, fn =3D jQuery.isFunction( elem[ type ] || null ),=0A=
				// Check to see if we need to provide a fake event, or not=0A=
				event =3D !data[0] || !data[0].preventDefault;=0A=
=0A=
			// Pass along a fake event=0A=
			if ( event ) {=0A=
				data.unshift({=0A=
					type: type,=0A=
					target: elem,=0A=
					preventDefault: function(){},=0A=
					stopPropagation: function(){},=0A=
					timeStamp: now()=0A=
				});=0A=
				data[0][expando] =3D true; // no need to fix fake event=0A=
			}=0A=
=0A=
			// Enforce the right trigger type=0A=
			data[0].type =3D type;=0A=
			if ( exclusive )=0A=
				data[0].exclusive =3D true;=0A=
=0A=
			// Trigger the event, it is assumed that "handle" is a function=0A=
			var handle =3D jQuery.data(elem, "handle");=0A=
			if ( handle )=0A=
				val =3D handle.apply( elem, data );=0A=
=0A=
			// Handle triggering native .onfoo handlers (and on links since we =
don't call .click() for links)=0A=
			if ( (!fn || (jQuery.nodeName(elem, 'a') && type =3D=3D "click")) && =
elem["on"+type] && elem["on"+type].apply( elem, data ) =3D=3D=3D false )=0A=
				val =3D false;=0A=
=0A=
			// Extra functions don't get the custom event object=0A=
			if ( event )=0A=
				data.shift();=0A=
=0A=
			// Handle triggering of extra function=0A=
			if ( extra && jQuery.isFunction( extra ) ) {=0A=
				// call the extra function and tack the current return value on the =
end for possible inspection=0A=
				ret =3D extra.apply( elem, val =3D=3D null ? data : data.concat( val =
) );=0A=
				// if anything is returned, give it precedence and have it overwrite =
the previous value=0A=
				if (ret !=3D=3D undefined)=0A=
					val =3D ret;=0A=
			}=0A=
=0A=
			// Trigger the native events (except for clicks on links)=0A=
			if ( fn && donative !=3D=3D false && val !=3D=3D false && =
!(jQuery.nodeName(elem, 'a') && type =3D=3D "click") ) {=0A=
				this.triggered =3D true;=0A=
				try {=0A=
					elem[ type ]();=0A=
				// prevent IE from throwing an error for some hidden elements=0A=
				} catch (e) {}=0A=
			}=0A=
=0A=
			this.triggered =3D false;=0A=
		}=0A=
=0A=
		return val;=0A=
	},=0A=
=0A=
	handle: function(event) {=0A=
		// returned undefined or false=0A=
		var val, ret, namespace, all, handlers;=0A=
=0A=
		event =3D arguments[0] =3D jQuery.event.fix( event || window.event );=0A=
=0A=
		// Namespaced event handlers=0A=
		namespace =3D event.type.split(".");=0A=
		event.type =3D namespace[0];=0A=
		namespace =3D namespace[1];=0A=
		// Cache this now, all =3D true means, any handler=0A=
		all =3D !namespace && !event.exclusive;=0A=
=0A=
		handlers =3D ( jQuery.data(this, "events") || {} )[event.type];=0A=
=0A=
		for ( var j in handlers ) {=0A=
			var handler =3D handlers[j];=0A=
=0A=
			// Filter the functions by class=0A=
			if ( all || handler.type =3D=3D namespace ) {=0A=
				// Pass in a reference to the handler function itself=0A=
				// So that we can later remove it=0A=
				event.handler =3D handler;=0A=
				event.data =3D handler.data;=0A=
=0A=
				ret =3D handler.apply( this, arguments );=0A=
=0A=
				if ( val !=3D=3D false )=0A=
					val =3D ret;=0A=
=0A=
				if ( ret =3D=3D=3D false ) {=0A=
					event.preventDefault();=0A=
					event.stopPropagation();=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return val;=0A=
	},=0A=
=0A=
	fix: function(event) {=0A=
		if ( event[expando] =3D=3D true )=0A=
			return event;=0A=
=0A=
		// store a copy of the original event object=0A=
		// and "clone" to set read-only properties=0A=
		var originalEvent =3D event;=0A=
		event =3D { originalEvent: originalEvent };=0A=
		var props =3D "altKey attrChange attrName bubbles button cancelable =
charCode clientX clientY ctrlKey currentTarget data detail eventPhase =
fromElement handler keyCode metaKey newValue originalTarget pageX pageY =
prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement =
target timeStamp toElement type view wheelDelta which".split(" ");=0A=
		for ( var i=3Dprops.length-1; i>=3D0; i-- )=0A=
			event[ props[i] ] =3D originalEvent[ props[i] ];=0A=
=0A=
		// Mark it as fixed=0A=
		event[expando] =3D true;=0A=
=0A=
		// add preventDefault and stopPropagation since=0A=
		// they will not work on the clone=0A=
		event.preventDefault =3D function() {=0A=
			// if preventDefault exists run it on the original event=0A=
			if (originalEvent.preventDefault)=0A=
				originalEvent.preventDefault();=0A=
			// otherwise set the returnValue property of the original event to =
false (IE)=0A=
			originalEvent.returnValue =3D false;=0A=
		};=0A=
		event.stopPropagation =3D function() {=0A=
			// if stopPropagation exists run it on the original event=0A=
			if (originalEvent.stopPropagation)=0A=
				originalEvent.stopPropagation();=0A=
			// otherwise set the cancelBubble property of the original event to =
true (IE)=0A=
			originalEvent.cancelBubble =3D true;=0A=
		};=0A=
=0A=
		// Fix timeStamp=0A=
		event.timeStamp =3D event.timeStamp || now();=0A=
=0A=
		// Fix target property, if necessary=0A=
		if ( !event.target )=0A=
			event.target =3D event.srcElement || document; // Fixes #1925 where =
srcElement might not be defined either=0A=
=0A=
		// check if target is a textnode (safari)=0A=
		if ( event.target.nodeType =3D=3D 3 )=0A=
			event.target =3D event.target.parentNode;=0A=
=0A=
		// Add relatedTarget, if necessary=0A=
		if ( !event.relatedTarget && event.fromElement )=0A=
			event.relatedTarget =3D event.fromElement =3D=3D event.target ? =
event.toElement : event.fromElement;=0A=
=0A=
		// Calculate pageX/Y if missing and clientX/Y available=0A=
		if ( event.pageX =3D=3D null && event.clientX !=3D null ) {=0A=
			var doc =3D document.documentElement, body =3D document.body;=0A=
			event.pageX =3D event.clientX + (doc && doc.scrollLeft || body && =
body.scrollLeft || 0) - (doc.clientLeft || 0);=0A=
			event.pageY =3D event.clientY + (doc && doc.scrollTop || body && =
body.scrollTop || 0) - (doc.clientTop || 0);=0A=
		}=0A=
=0A=
		// Add which for key events=0A=
		if ( !event.which && ((event.charCode || event.charCode =3D=3D=3D 0) ? =
event.charCode : event.keyCode) )=0A=
			event.which =3D event.charCode || event.keyCode;=0A=
=0A=
		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for =
Macs)=0A=
		if ( !event.metaKey && event.ctrlKey )=0A=
			event.metaKey =3D event.ctrlKey;=0A=
=0A=
		// Add which for click: 1 =3D=3D left; 2 =3D=3D middle; 3 =3D=3D right=0A=
		// Note: button is not normalized, so don't use it=0A=
		if ( !event.which && event.button )=0A=
			event.which =3D (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( =
event.button & 4 ? 2 : 0 ) ));=0A=
=0A=
		return event;=0A=
	},=0A=
=0A=
	proxy: function( fn, proxy ){=0A=
		// Set the guid of unique handler to the same of original handler, so =
it can be removed=0A=
		proxy.guid =3D fn.guid =3D fn.guid || proxy.guid || this.guid++;=0A=
		// So proxy can be declared as an argument=0A=
		return proxy;=0A=
	},=0A=
=0A=
	special: {=0A=
		ready: {=0A=
			setup: function() {=0A=
				// Make sure the ready event is setup=0A=
				bindReady();=0A=
				return;=0A=
			},=0A=
=0A=
			teardown: function() { return; }=0A=
		},=0A=
=0A=
		mouseenter: {=0A=
			setup: function() {=0A=
				if ( jQuery.browser.msie ) return false;=0A=
				jQuery(this).bind("mouseover", =
jQuery.event.special.mouseenter.handler);=0A=
				return true;=0A=
			},=0A=
=0A=
			teardown: function() {=0A=
				if ( jQuery.browser.msie ) return false;=0A=
				jQuery(this).unbind("mouseover", =
jQuery.event.special.mouseenter.handler);=0A=
				return true;=0A=
			},=0A=
=0A=
			handler: function(event) {=0A=
				// If we actually just moused on to a sub-element, ignore it=0A=
				if ( withinElement(event, this) ) return true;=0A=
				// Execute the right handlers by setting the event type to mouseenter=0A=
				event.type =3D "mouseenter";=0A=
				return jQuery.event.handle.apply(this, arguments);=0A=
			}=0A=
		},=0A=
=0A=
		mouseleave: {=0A=
			setup: function() {=0A=
				if ( jQuery.browser.msie ) return false;=0A=
				jQuery(this).bind("mouseout", =
jQuery.event.special.mouseleave.handler);=0A=
				return true;=0A=
			},=0A=
=0A=
			teardown: function() {=0A=
				if ( jQuery.browser.msie ) return false;=0A=
				jQuery(this).unbind("mouseout", =
jQuery.event.special.mouseleave.handler);=0A=
				return true;=0A=
			},=0A=
=0A=
			handler: function(event) {=0A=
				// If we actually just moused on to a sub-element, ignore it=0A=
				if ( withinElement(event, this) ) return true;=0A=
				// Execute the right handlers by setting the event type to mouseleave=0A=
				event.type =3D "mouseleave";=0A=
				return jQuery.event.handle.apply(this, arguments);=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
jQuery.fn.extend({=0A=
	bind: function( type, data, fn ) {=0A=
		return type =3D=3D "unload" ? this.one(type, data, fn) : =
this.each(function(){=0A=
			jQuery.event.add( this, type, fn || data, fn && data );=0A=
		});=0A=
	},=0A=
=0A=
	one: function( type, data, fn ) {=0A=
		var one =3D jQuery.event.proxy( fn || data, function(event) {=0A=
			jQuery(this).unbind(event, one);=0A=
			return (fn || data).apply( this, arguments );=0A=
		});=0A=
		return this.each(function(){=0A=
			jQuery.event.add( this, type, one, fn && data);=0A=
		});=0A=
	},=0A=
=0A=
	unbind: function( type, fn ) {=0A=
		return this.each(function(){=0A=
			jQuery.event.remove( this, type, fn );=0A=
		});=0A=
	},=0A=
=0A=
	trigger: function( type, data, fn ) {=0A=
		return this.each(function(){=0A=
			jQuery.event.trigger( type, data, this, true, fn );=0A=
		});=0A=
	},=0A=
=0A=
	triggerHandler: function( type, data, fn ) {=0A=
		return this[0] && jQuery.event.trigger( type, data, this[0], false, fn =
);=0A=
	},=0A=
=0A=
	toggle: function( fn ) {=0A=
		// Save reference to arguments for access in closure=0A=
		var args =3D arguments, i =3D 1;=0A=
=0A=
		// link all the functions, so any of them can unbind this click handler=0A=
		while( i < args.length )=0A=
			jQuery.event.proxy( fn, args[i++] );=0A=
=0A=
		return this.click( jQuery.event.proxy( fn, function(event) {=0A=
			// Figure out which function to execute=0A=
			this.lastToggle =3D ( this.lastToggle || 0 ) % i;=0A=
=0A=
			// Make sure that clicks stop=0A=
			event.preventDefault();=0A=
=0A=
			// and execute the function=0A=
			return args[ this.lastToggle++ ].apply( this, arguments ) || false;=0A=
		}));=0A=
	},=0A=
=0A=
	hover: function(fnOver, fnOut) {=0A=
		return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);=0A=
	},=0A=
=0A=
	ready: function(fn) {=0A=
		// Attach the listeners=0A=
		bindReady();=0A=
=0A=
		// If the DOM is already ready=0A=
		if ( jQuery.isReady )=0A=
			// Execute the function immediately=0A=
			fn.call( document, jQuery );=0A=
=0A=
		// Otherwise, remember the function for later=0A=
		else=0A=
			// Add the function to the wait list=0A=
			jQuery.readyList.push( function() { return fn.call(this, jQuery); } );=0A=
=0A=
		return this;=0A=
	}=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	isReady: false,=0A=
	readyList: [],=0A=
	// Handle when the DOM is ready=0A=
	ready: function() {=0A=
		// Make sure that the DOM is not already loaded=0A=
		if ( !jQuery.isReady ) {=0A=
			// Remember that the DOM is ready=0A=
			jQuery.isReady =3D true;=0A=
=0A=
			// If there are functions bound, to execute=0A=
			if ( jQuery.readyList ) {=0A=
				// Execute all of them=0A=
				jQuery.each( jQuery.readyList, function(){=0A=
					this.call( document );=0A=
				});=0A=
=0A=
				// Reset the list of functions=0A=
				jQuery.readyList =3D null;=0A=
			}=0A=
=0A=
			// Trigger any bound ready events=0A=
			jQuery(document).triggerHandler("ready");=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
var readyBound =3D false;=0A=
=0A=
function bindReady(){=0A=
	if ( readyBound ) return;=0A=
	readyBound =3D true;=0A=
=0A=
	// Mozilla, Opera (see further below for it) and webkit nightlies =
currently support this event=0A=
	if ( document.addEventListener && !jQuery.browser.opera)=0A=
		// Use the handy event callback=0A=
		document.addEventListener( "DOMContentLoaded", jQuery.ready, false );=0A=
=0A=
	// If IE is used and is not in a frame=0A=
	// Continually check to see if the document is ready=0A=
	if ( jQuery.browser.msie && window =3D=3D top ) (function(){=0A=
		if (jQuery.isReady) return;=0A=
		try {=0A=
			// If IE is used, use the trick by Diego Perini=0A=
			// http://javascript.nwbox.com/IEContentLoaded/=0A=
			document.documentElement.doScroll("left");=0A=
		} catch( error ) {=0A=
			setTimeout( arguments.callee, 0 );=0A=
			return;=0A=
		}=0A=
		// and execute any waiting functions=0A=
		jQuery.ready();=0A=
	})();=0A=
=0A=
	if ( jQuery.browser.opera )=0A=
		document.addEventListener( "DOMContentLoaded", function () {=0A=
			if (jQuery.isReady) return;=0A=
			for (var i =3D 0; i < document.styleSheets.length; i++)=0A=
				if (document.styleSheets[i].disabled) {=0A=
					setTimeout( arguments.callee, 0 );=0A=
					return;=0A=
				}=0A=
			// and execute any waiting functions=0A=
			jQuery.ready();=0A=
		}, false);=0A=
=0A=
	if ( jQuery.browser.safari ) {=0A=
		var numStyles;=0A=
		(function(){=0A=
			if (jQuery.isReady) return;=0A=
			if ( document.readyState !=3D "loaded" && document.readyState !=3D =
"complete" ) {=0A=
				setTimeout( arguments.callee, 0 );=0A=
				return;=0A=
			}=0A=
			if ( numStyles =3D=3D=3D undefined )=0A=
				numStyles =3D jQuery("style, link[rel=3Dstylesheet]").length;=0A=
			if ( document.styleSheets.length !=3D numStyles ) {=0A=
				setTimeout( arguments.callee, 0 );=0A=
				return;=0A=
			}=0A=
			// and execute any waiting functions=0A=
			jQuery.ready();=0A=
		})();=0A=
	}=0A=
=0A=
	// A fallback to window.onload, that will always work=0A=
	jQuery.event.add( window, "load", jQuery.ready );=0A=
}=0A=
=0A=
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +=0A=
	"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +=0A=
	"submit,keydown,keypress,keyup,error").split(","), function(i, name){=0A=
=0A=
	// Handle event binding=0A=
	jQuery.fn[name] =3D function(fn){=0A=
		return fn ? this.bind(name, fn) : this.trigger(name);=0A=
	};=0A=
});=0A=
=0A=
// Checks if an event happened on an element within another element=0A=
// Used in jQuery.event.special.mouseenter and mouseleave handlers=0A=
var withinElement =3D function(event, elem) {=0A=
	// Check if mouse(over|out) are still within the same parent element=0A=
	var parent =3D event.relatedTarget;=0A=
	// Traverse up the tree=0A=
	while ( parent && parent !=3D elem ) try { parent =3D =
parent.parentNode; } catch(error) { parent =3D elem; }=0A=
	// Return true if we actually just moused on to a sub-element=0A=
	return parent =3D=3D elem;=0A=
};=0A=
=0A=
// Prevent memory leaks in IE=0A=
// And prevent errors on refresh with events like mouseover in other =
browsers=0A=
// Window isn't included so as not to unbind existing unload events=0A=
jQuery(window).bind("unload", function() {=0A=
	jQuery("*").add(document).unbind();=0A=
});=0A=
jQuery.fn.extend({=0A=
	// Keep a copy of the old load=0A=
	_load: jQuery.fn.load,=0A=
=0A=
	load: function( url, params, callback ) {=0A=
		if ( typeof url !=3D 'string' )=0A=
			return this._load( url );=0A=
=0A=
		var off =3D url.indexOf(" ");=0A=
		if ( off >=3D 0 ) {=0A=
			var selector =3D url.slice(off, url.length);=0A=
			url =3D url.slice(0, off);=0A=
		}=0A=
=0A=
		callback =3D callback || function(){};=0A=
=0A=
		// Default to a GET request=0A=
		var type =3D "GET";=0A=
=0A=
		// If the second parameter was provided=0A=
		if ( params )=0A=
			// If it's a function=0A=
			if ( jQuery.isFunction( params ) ) {=0A=
				// We assume that it's the callback=0A=
				callback =3D params;=0A=
				params =3D null;=0A=
=0A=
			// Otherwise, build a param string=0A=
			} else {=0A=
				params =3D jQuery.param( params );=0A=
				type =3D "POST";=0A=
			}=0A=
=0A=
		var self =3D this;=0A=
=0A=
		// Request the remote document=0A=
		jQuery.ajax({=0A=
			url: url,=0A=
			type: type,=0A=
			dataType: "html",=0A=
			data: params,=0A=
			complete: function(res, status){=0A=
				// If successful, inject the HTML into all the matched elements=0A=
				if ( status =3D=3D "success" || status =3D=3D "notmodified" )=0A=
					// See if a selector was specified=0A=
					self.html( selector ?=0A=
						// Create a dummy div to hold the results=0A=
						jQuery("<div/>")=0A=
							// inject the contents of the document in, removing the scripts=0A=
							// to avoid any 'Permission Denied' errors in IE=0A=
							.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))=0A=
=0A=
							// Locate the specified elements=0A=
							.find(selector) :=0A=
=0A=
						// If not, just inject the full result=0A=
						res.responseText );=0A=
=0A=
				self.each( callback, [res.responseText, status, res] );=0A=
			}=0A=
		});=0A=
		return this;=0A=
	},=0A=
=0A=
	serialize: function() {=0A=
		return jQuery.param(this.serializeArray());=0A=
	},=0A=
	serializeArray: function() {=0A=
		return this.map(function(){=0A=
			return jQuery.nodeName(this, "form") ?=0A=
				jQuery.makeArray(this.elements) : this;=0A=
		})=0A=
		.filter(function(){=0A=
			return this.name && !this.disabled &&=0A=
				(this.checked || /select|textarea/i.test(this.nodeName) ||=0A=
					/text|hidden|password/i.test(this.type));=0A=
		})=0A=
		.map(function(i, elem){=0A=
			var val =3D jQuery(this).val();=0A=
			return val =3D=3D null ? null :=0A=
				val.constructor =3D=3D Array ?=0A=
					jQuery.map( val, function(val, i){=0A=
						return {name: elem.name, value: val};=0A=
					}) :=0A=
					{name: elem.name, value: val};=0A=
		}).get();=0A=
	}=0A=
});=0A=
=0A=
// Attach a bunch of functions for handling common AJAX events=0A=
jQuery.each( =
"ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(",=
"), function(i,o){=0A=
	jQuery.fn[o] =3D function(f){=0A=
		return this.bind(o, f);=0A=
	};=0A=
});=0A=
=0A=
var jsc =3D now();=0A=
=0A=
jQuery.extend({=0A=
	get: function( url, data, callback, type ) {=0A=
		// shift arguments if data argument was ommited=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			callback =3D data;=0A=
			data =3D null;=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "GET",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	getScript: function( url, callback ) {=0A=
		return jQuery.get(url, null, callback, "script");=0A=
	},=0A=
=0A=
	getJSON: function( url, data, callback ) {=0A=
		return jQuery.get(url, data, callback, "json");=0A=
	},=0A=
=0A=
	post: function( url, data, callback, type ) {=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			callback =3D data;=0A=
			data =3D {};=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "POST",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	ajaxSetup: function( settings ) {=0A=
		jQuery.extend( jQuery.ajaxSettings, settings );=0A=
	},=0A=
=0A=
	ajaxSettings: {=0A=
		url: location.href,=0A=
		global: true,=0A=
		type: "GET",=0A=
		timeout: 0,=0A=
		contentType: "application/x-www-form-urlencoded",=0A=
		processData: true,=0A=
		async: true,=0A=
		data: null,=0A=
		username: null,=0A=
		password: null,=0A=
		accepts: {=0A=
			xml: "application/xml, text/xml",=0A=
			html: "text/html",=0A=
			script: "text/javascript, application/javascript",=0A=
			json: "application/json, text/javascript",=0A=
			text: "text/plain",=0A=
			_default: "*/*"=0A=
		}=0A=
	},=0A=
=0A=
	// Last-Modified header cache for next request=0A=
	lastModified: {},=0A=
=0A=
	ajax: function( s ) {=0A=
		// Extend the settings, but re-extend 's' so that it can be=0A=
		// checked again later (in the test suite, specifically)=0A=
		s =3D jQuery.extend(true, s, jQuery.extend(true, {}, =
jQuery.ajaxSettings, s));=0A=
		var jsonp, jsre =3D /=3D\?(&|$)/g, status, data,=0A=
			type =3D s.type.toUpperCase();=0A=
=0A=
		// convert data if not already a string=0A=
		if ( s.data && s.processData && typeof s.data !=3D "string" )=0A=
			s.data =3D jQuery.param(s.data);=0A=
=0A=
		// Handle JSONP Parameter Callbacks=0A=
		if ( s.dataType =3D=3D "jsonp" ) {=0A=
			if ( type =3D=3D "GET" ) {=0A=
				if ( !s.url.match(jsre) )=0A=
					s.url +=3D (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || =
"callback") + "=3D?";=0A=
			} else if ( !s.data || !s.data.match(jsre) )=0A=
				s.data =3D (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + =
"=3D?";=0A=
			s.dataType =3D "json";=0A=
		}=0A=
=0A=
		// Build temporary JSONP function=0A=
		if ( s.dataType =3D=3D "json" && (s.data && s.data.match(jsre) || =
s.url.match(jsre)) ) {=0A=
			jsonp =3D "jsonp" + jsc++;=0A=
=0A=
			// Replace the =3D? sequence both in the query string and the data=0A=
			if ( s.data )=0A=
				s.data =3D (s.data + "").replace(jsre, "=3D" + jsonp + "$1");=0A=
			s.url =3D s.url.replace(jsre, "=3D" + jsonp + "$1");=0A=
=0A=
			// We need to make sure=0A=
			// that a JSONP style response is executed properly=0A=
			s.dataType =3D "script";=0A=
=0A=
			// Handle JSONP-style loading=0A=
			window[ jsonp ] =3D function(tmp){=0A=
				data =3D tmp;=0A=
				success();=0A=
				complete();=0A=
				// Garbage collect=0A=
				window[ jsonp ] =3D undefined;=0A=
				try{ delete window[ jsonp ]; } catch(e){}=0A=
				if ( head )=0A=
					head.removeChild( script );=0A=
			};=0A=
		}=0A=
=0A=
		if ( s.dataType =3D=3D "script" && s.cache =3D=3D null )=0A=
			s.cache =3D false;=0A=
=0A=
		if ( s.cache =3D=3D=3D false && type =3D=3D "GET" ) {=0A=
			var ts =3D now();=0A=
			// try replacing _=3D if it is there=0A=
			var ret =3D s.url.replace(/(\?|&)_=3D.*?(&|$)/, "$1_=3D" + ts + "$2");=0A=
			// if nothing was replaced, add timestamp to the end=0A=
			s.url =3D ret + ((ret =3D=3D s.url) ? (s.url.match(/\?/) ? "&" : "?") =
+ "_=3D" + ts : "");=0A=
		}=0A=
=0A=
		// If data is available, append data to url for get requests=0A=
		if ( s.data && type =3D=3D "GET" ) {=0A=
			s.url +=3D (s.url.match(/\?/) ? "&" : "?") + s.data;=0A=
=0A=
			// IE likes to send both get and post data, prevent this=0A=
			s.data =3D null;=0A=
		}=0A=
=0A=
		// Watch for a new set of requests=0A=
		if ( s.global && ! jQuery.active++ )=0A=
			jQuery.event.trigger( "ajaxStart" );=0A=
=0A=
		// Matches an absolute URL, and saves the domain=0A=
		var remote =3D /^(?:\w+:)?\/\/([^\/?#]+)/;=0A=
=0A=
		// If we're requesting a remote document=0A=
		// and trying to load JSON or Script with a GET=0A=
		if ( s.dataType =3D=3D "script" && type =3D=3D "GET"=0A=
				&& remote.test(s.url) && remote.exec(s.url)[1] !=3D location.host ){=0A=
			var head =3D document.getElementsByTagName("head")[0];=0A=
			var script =3D document.createElement("script");=0A=
			script.src =3D s.url;=0A=
			if (s.scriptCharset)=0A=
				script.charset =3D s.scriptCharset;=0A=
=0A=
			// Handle Script loading=0A=
			if ( !jsonp ) {=0A=
				var done =3D false;=0A=
=0A=
				// Attach handlers for all browsers=0A=
				script.onload =3D script.onreadystatechange =3D function(){=0A=
					if ( !done && (!this.readyState ||=0A=
							this.readyState =3D=3D "loaded" || this.readyState =3D=3D =
"complete") ) {=0A=
						done =3D true;=0A=
						success();=0A=
						complete();=0A=
						head.removeChild( script );=0A=
					}=0A=
				};=0A=
			}=0A=
=0A=
			head.appendChild(script);=0A=
=0A=
			// We handle everything using the script element injection=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var requestDone =3D false;=0A=
=0A=
		// Create the request object; Microsoft failed to properly=0A=
		// implement the XMLHttpRequest in IE7, so we use the ActiveXObject =
when it is available=0A=
		var xhr =3D window.ActiveXObject ? new =
ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();=0A=
=0A=
		// Open the socket=0A=
		// Passing null username, generates a login popup on Opera (#2865)=0A=
		if( s.username )=0A=
			xhr.open(type, s.url, s.async, s.username, s.password);=0A=
		else=0A=
			xhr.open(type, s.url, s.async);=0A=
=0A=
		// Need an extra try/catch for cross domain requests in Firefox 3=0A=
		try {=0A=
			// Set the correct header, if data is being sent=0A=
			if ( s.data )=0A=
				xhr.setRequestHeader("Content-Type", s.contentType);=0A=
=0A=
			// Set the If-Modified-Since header, if ifModified mode.=0A=
			if ( s.ifModified )=0A=
				xhr.setRequestHeader("If-Modified-Since",=0A=
					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );=0A=
=0A=
			// Set header so the called script knows that it's an XMLHttpRequest=0A=
			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");=0A=
=0A=
			// Set the Accepts header for the server, depending on the dataType=0A=
			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?=0A=
				s.accepts[ s.dataType ] + ", */*" :=0A=
				s.accepts._default );=0A=
		} catch(e){}=0A=
=0A=
		// Allow custom headers/mimetypes=0A=
		if ( s.beforeSend && s.beforeSend(xhr, s) =3D=3D=3D false ) {=0A=
			// cleanup active request counter=0A=
			s.global && jQuery.active--;=0A=
			// close opended socket=0A=
			xhr.abort();=0A=
			return false;=0A=
		}=0A=
=0A=
		if ( s.global )=0A=
			jQuery.event.trigger("ajaxSend", [xhr, s]);=0A=
=0A=
		// Wait for a response to come back=0A=
		var onreadystatechange =3D function(isTimeout){=0A=
			// The transfer is complete and the data is available, or the request =
timed out=0A=
			if ( !requestDone && xhr && (xhr.readyState =3D=3D 4 || isTimeout =
=3D=3D "timeout") ) {=0A=
				requestDone =3D true;=0A=
				// clear poll interval=0A=
				if (ival) {=0A=
					clearInterval(ival);=0A=
					ival =3D null;=0A=
				}=0A=
=0A=
				status =3D isTimeout =3D=3D "timeout" && "timeout" ||=0A=
					!jQuery.httpSuccess( xhr ) && "error" ||=0A=
					s.ifModified && jQuery.httpNotModified( xhr, s.url ) && =
"notmodified" ||=0A=
					"success";=0A=
=0A=
				if ( status =3D=3D "success" ) {=0A=
					// Watch for, and catch, XML document parse errors=0A=
					try {=0A=
						// process the data (runs the xml through httpData regardless of =
callback)=0A=
						data =3D jQuery.httpData( xhr, s.dataType, s.dataFilter );=0A=
					} catch(e) {=0A=
						status =3D "parsererror";=0A=
					}=0A=
				}=0A=
=0A=
				// Make sure that the request was successful or notmodified=0A=
				if ( status =3D=3D "success" ) {=0A=
					// Cache Last-Modified header, if ifModified mode.=0A=
					var modRes;=0A=
					try {=0A=
						modRes =3D xhr.getResponseHeader("Last-Modified");=0A=
					} catch(e) {} // swallow exception thrown by FF if header is not =
available=0A=
=0A=
					if ( s.ifModified && modRes )=0A=
						jQuery.lastModified[s.url] =3D modRes;=0A=
=0A=
					// JSONP handles its own success callback=0A=
					if ( !jsonp )=0A=
						success();=0A=
				} else=0A=
					jQuery.handleError(s, xhr, status);=0A=
=0A=
				// Fire the complete handlers=0A=
				complete();=0A=
=0A=
				// Stop memory leaks=0A=
				if ( s.async )=0A=
					xhr =3D null;=0A=
			}=0A=
		};=0A=
=0A=
		if ( s.async ) {=0A=
			// don't attach the handler to the request, just poll it instead=0A=
			var ival =3D setInterval(onreadystatechange, 13);=0A=
=0A=
			// Timeout checker=0A=
			if ( s.timeout > 0 )=0A=
				setTimeout(function(){=0A=
					// Check to see if the request is still happening=0A=
					if ( xhr ) {=0A=
						// Cancel the request=0A=
						xhr.abort();=0A=
=0A=
						if( !requestDone )=0A=
							onreadystatechange( "timeout" );=0A=
					}=0A=
				}, s.timeout);=0A=
		}=0A=
=0A=
		// Send the data=0A=
		try {=0A=
			xhr.send(s.data);=0A=
		} catch(e) {=0A=
			jQuery.handleError(s, xhr, null, e);=0A=
		}=0A=
=0A=
		// firefox 1.5 doesn't fire statechange for sync requests=0A=
		if ( !s.async )=0A=
			onreadystatechange();=0A=
=0A=
		function success(){=0A=
			// If a local callback was specified, fire it and pass it the data=0A=
			if ( s.success )=0A=
				s.success( data, status );=0A=
=0A=
			// Fire the global callback=0A=
			if ( s.global )=0A=
				jQuery.event.trigger( "ajaxSuccess", [xhr, s] );=0A=
		}=0A=
=0A=
		function complete(){=0A=
			// Process result=0A=
			if ( s.complete )=0A=
				s.complete(xhr, status);=0A=
=0A=
			// The request was completed=0A=
			if ( s.global )=0A=
				jQuery.event.trigger( "ajaxComplete", [xhr, s] );=0A=
=0A=
			// Handle the global AJAX counter=0A=
			if ( s.global && ! --jQuery.active )=0A=
				jQuery.event.trigger( "ajaxStop" );=0A=
		}=0A=
=0A=
		// return XMLHttpRequest to allow aborting the request etc.=0A=
		return xhr;=0A=
	},=0A=
=0A=
	handleError: function( s, xhr, status, e ) {=0A=
		// If a local callback was specified, fire it=0A=
		if ( s.error ) s.error( xhr, status, e );=0A=
=0A=
		// Fire the global callback=0A=
		if ( s.global )=0A=
			jQuery.event.trigger( "ajaxError", [xhr, s, e] );=0A=
	},=0A=
=0A=
	// Counter for holding the number of active queries=0A=
	active: 0,=0A=
=0A=
	// Determines if an XMLHttpRequest was successful or not=0A=
	httpSuccess: function( xhr ) {=0A=
		try {=0A=
			// IE error sometimes returns 1223 when it should be 204 so treat it =
as success, see #1450=0A=
			return !xhr.status && location.protocol =3D=3D "file:" ||=0A=
				( xhr.status >=3D 200 && xhr.status < 300 ) || xhr.status =3D=3D 304 =
|| xhr.status =3D=3D 1223 ||=0A=
				jQuery.browser.safari && xhr.status =3D=3D undefined;=0A=
		} catch(e){}=0A=
		return false;=0A=
	},=0A=
=0A=
	// Determines if an XMLHttpRequest returns NotModified=0A=
	httpNotModified: function( xhr, url ) {=0A=
		try {=0A=
			var xhrRes =3D xhr.getResponseHeader("Last-Modified");=0A=
=0A=
			// Firefox always returns 200. check Last-Modified date=0A=
			return xhr.status =3D=3D 304 || xhrRes =3D=3D =
jQuery.lastModified[url] ||=0A=
				jQuery.browser.safari && xhr.status =3D=3D undefined;=0A=
		} catch(e){}=0A=
		return false;=0A=
	},=0A=
=0A=
	httpData: function( xhr, type, filter ) {=0A=
		var ct =3D xhr.getResponseHeader("content-type"),=0A=
			xml =3D type =3D=3D "xml" || !type && ct && ct.indexOf("xml") >=3D 0,=0A=
			data =3D xml ? xhr.responseXML : xhr.responseText;=0A=
=0A=
		if ( xml && data.documentElement.tagName =3D=3D "parsererror" )=0A=
			throw "parsererror";=0A=
			=0A=
		// Allow a pre-filtering function to sanitize the response=0A=
		if( filter )=0A=
			data =3D filter( data, type );=0A=
=0A=
		// If the type is "script", eval it in global context=0A=
		if ( type =3D=3D "script" )=0A=
			jQuery.globalEval( data );=0A=
=0A=
		// Get the JavaScript object, if JSON is used.=0A=
		if ( type =3D=3D "json" )=0A=
			data =3D eval("(" + data + ")");=0A=
=0A=
		return data;=0A=
	},=0A=
=0A=
	// Serialize an array of form elements or a set of=0A=
	// key/values into a query string=0A=
	param: function( a ) {=0A=
		var s =3D [];=0A=
=0A=
		// If an array was passed in, assume that it is an array=0A=
		// of form elements=0A=
		if ( a.constructor =3D=3D Array || a.jquery )=0A=
			// Serialize the form elements=0A=
			jQuery.each( a, function(){=0A=
				s.push( encodeURIComponent(this.name) + "=3D" + encodeURIComponent( =
this.value ) );=0A=
			});=0A=
=0A=
		// Otherwise, assume that it's an object of key/value pairs=0A=
		else=0A=
			// Serialize the key/values=0A=
			for ( var j in a )=0A=
				// If the value is an array then the key names need to be repeated=0A=
				if ( a[j] && a[j].constructor =3D=3D Array )=0A=
					jQuery.each( a[j], function(){=0A=
						s.push( encodeURIComponent(j) + "=3D" + encodeURIComponent( this ) =
);=0A=
					});=0A=
				else=0A=
					s.push( encodeURIComponent(j) + "=3D" + encodeURIComponent( =
jQuery.isFunction(a[j]) ? a[j]() : a[j] ) );=0A=
=0A=
		// Return the resulting serialization=0A=
		return s.join("&").replace(/%20/g, "+");=0A=
	}=0A=
=0A=
});=0A=
jQuery.fn.extend({=0A=
	show: function(speed,callback){=0A=
		return speed ?=0A=
			this.animate({=0A=
				height: "show", width: "show", opacity: "show"=0A=
			}, speed, callback) :=0A=
=0A=
			this.filter(":hidden").each(function(){=0A=
				this.style.display =3D this.oldblock || "";=0A=
				if ( jQuery.css(this,"display") =3D=3D "none" ) {=0A=
					var elem =3D jQuery("<" + this.tagName + " />").appendTo("body");=0A=
					this.style.display =3D elem.css("display");=0A=
					// handle an edge condition where css is - div { display:none; } or =
similar=0A=
					if (this.style.display =3D=3D "none")=0A=
						this.style.display =3D "block";=0A=
					elem.remove();=0A=
				}=0A=
			}).end();=0A=
	},=0A=
=0A=
	hide: function(speed,callback){=0A=
		return speed ?=0A=
			this.animate({=0A=
				height: "hide", width: "hide", opacity: "hide"=0A=
			}, speed, callback) :=0A=
=0A=
			this.filter(":visible").each(function(){=0A=
				this.oldblock =3D this.oldblock || jQuery.css(this,"display");=0A=
				this.style.display =3D "none";=0A=
			}).end();=0A=
	},=0A=
=0A=
	// Save the old toggle function=0A=
	_toggle: jQuery.fn.toggle,=0A=
=0A=
	toggle: function( fn, fn2 ){=0A=
		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?=0A=
			this._toggle.apply( this, arguments ) :=0A=
			fn ?=0A=
				this.animate({=0A=
					height: "toggle", width: "toggle", opacity: "toggle"=0A=
				}, fn, fn2) :=0A=
				this.each(function(){=0A=
					jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();=0A=
				});=0A=
	},=0A=
=0A=
	slideDown: function(speed,callback){=0A=
		return this.animate({height: "show"}, speed, callback);=0A=
	},=0A=
=0A=
	slideUp: function(speed,callback){=0A=
		return this.animate({height: "hide"}, speed, callback);=0A=
	},=0A=
=0A=
	slideToggle: function(speed, callback){=0A=
		return this.animate({height: "toggle"}, speed, callback);=0A=
	},=0A=
=0A=
	fadeIn: function(speed, callback){=0A=
		return this.animate({opacity: "show"}, speed, callback);=0A=
	},=0A=
=0A=
	fadeOut: function(speed, callback){=0A=
		return this.animate({opacity: "hide"}, speed, callback);=0A=
	},=0A=
=0A=
	fadeTo: function(speed,to,callback){=0A=
		return this.animate({opacity: to}, speed, callback);=0A=
	},=0A=
=0A=
	animate: function( prop, speed, easing, callback ) {=0A=
		var optall =3D jQuery.speed(speed, easing, callback);=0A=
=0A=
		return this[ optall.queue =3D=3D=3D false ? "each" : "queue" =
](function(){=0A=
			if ( this.nodeType !=3D 1)=0A=
				return false;=0A=
=0A=
			var opt =3D jQuery.extend({}, optall), p,=0A=
				hidden =3D jQuery(this).is(":hidden"), self =3D this;=0A=
=0A=
			for ( p in prop ) {=0A=
				if ( prop[p] =3D=3D "hide" && hidden || prop[p] =3D=3D "show" && =
!hidden )=0A=
					return opt.complete.call(this);=0A=
=0A=
				if ( p =3D=3D "height" || p =3D=3D "width" ) {=0A=
					// Store display property=0A=
					opt.display =3D jQuery.css(this, "display");=0A=
=0A=
					// Make sure that nothing sneaks out=0A=
					opt.overflow =3D this.style.overflow;=0A=
				}=0A=
			}=0A=
=0A=
			if ( opt.overflow !=3D null )=0A=
				this.style.overflow =3D "hidden";=0A=
=0A=
			opt.curAnim =3D jQuery.extend({}, prop);=0A=
=0A=
			jQuery.each( prop, function(name, val){=0A=
				var e =3D new jQuery.fx( self, opt, name );=0A=
=0A=
				if ( /toggle|show|hide/.test(val) )=0A=
					e[ val =3D=3D "toggle" ? hidden ? "show" : "hide" : val ]( prop );=0A=
				else {=0A=
					var parts =3D val.toString().match(/^([+-]=3D)?([\d+-.]+)(.*)$/),=0A=
						start =3D e.cur(true) || 0;=0A=
=0A=
					if ( parts ) {=0A=
						var end =3D parseFloat(parts[2]),=0A=
							unit =3D parts[3] || "px";=0A=
=0A=
						// We need to compute starting value=0A=
						if ( unit !=3D "px" ) {=0A=
							self.style[ name ] =3D (end || 1) + unit;=0A=
							start =3D ((end || 1) / e.cur(true)) * start;=0A=
							self.style[ name ] =3D start + unit;=0A=
						}=0A=
=0A=
						// If a +=3D/-=3D token was provided, we're doing a relative =
animation=0A=
						if ( parts[1] )=0A=
							end =3D ((parts[1] =3D=3D "-=3D" ? -1 : 1) * end) + start;=0A=
=0A=
						e.custom( start, end, unit );=0A=
					} else=0A=
						e.custom( start, val, "" );=0A=
				}=0A=
			});=0A=
=0A=
			// For JS strict compliance=0A=
			return true;=0A=
		});=0A=
	},=0A=
=0A=
	queue: function(type, fn){=0A=
		if ( jQuery.isFunction(type) || ( type && type.constructor =3D=3D =
Array )) {=0A=
			fn =3D type;=0A=
			type =3D "fx";=0A=
		}=0A=
=0A=
		if ( !type || (typeof type =3D=3D "string" && !fn) )=0A=
			return queue( this[0], type );=0A=
=0A=
		return this.each(function(){=0A=
			if ( fn.constructor =3D=3D Array )=0A=
				queue(this, type, fn);=0A=
			else {=0A=
				queue(this, type).push( fn );=0A=
=0A=
				if ( queue(this, type).length =3D=3D 1 )=0A=
					fn.call(this);=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	stop: function(clearQueue, gotoEnd){=0A=
		var timers =3D jQuery.timers;=0A=
=0A=
		if (clearQueue)=0A=
			this.queue([]);=0A=
=0A=
		this.each(function(){=0A=
			// go in reverse order so anything added to the queue during the loop =
is ignored=0A=
			for ( var i =3D timers.length - 1; i >=3D 0; i-- )=0A=
				if ( timers[i].elem =3D=3D this ) {=0A=
					if (gotoEnd)=0A=
						// force the next step to be the last=0A=
						timers[i](true);=0A=
					timers.splice(i, 1);=0A=
				}=0A=
		});=0A=
=0A=
		// start the next in the queue if the last step wasn't forced=0A=
		if (!gotoEnd)=0A=
			this.dequeue();=0A=
=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
var queue =3D function( elem, type, array ) {=0A=
	if ( elem ){=0A=
=0A=
		type =3D type || "fx";=0A=
=0A=
		var q =3D jQuery.data( elem, type + "queue" );=0A=
=0A=
		if ( !q || array )=0A=
			q =3D jQuery.data( elem, type + "queue", jQuery.makeArray(array) );=0A=
=0A=
	}=0A=
	return q;=0A=
};=0A=
=0A=
jQuery.fn.dequeue =3D function(type){=0A=
	type =3D type || "fx";=0A=
=0A=
	return this.each(function(){=0A=
		var q =3D queue(this, type);=0A=
=0A=
		q.shift();=0A=
=0A=
		if ( q.length )=0A=
			q[0].call( this );=0A=
	});=0A=
};=0A=
=0A=
jQuery.extend({=0A=
=0A=
	speed: function(speed, easing, fn) {=0A=
		var opt =3D speed && speed.constructor =3D=3D Object ? speed : {=0A=
			complete: fn || !fn && easing ||=0A=
				jQuery.isFunction( speed ) && speed,=0A=
			duration: speed,=0A=
			easing: fn && easing || easing && easing.constructor !=3D Function && =
easing=0A=
		};=0A=
=0A=
		opt.duration =3D (opt.duration && opt.duration.constructor =3D=3D =
Number ?=0A=
			opt.duration :=0A=
			jQuery.fx.speeds[opt.duration]) || jQuery.fx.speeds.def;=0A=
=0A=
		// Queueing=0A=
		opt.old =3D opt.complete;=0A=
		opt.complete =3D function(){=0A=
			if ( opt.queue !=3D=3D false )=0A=
				jQuery(this).dequeue();=0A=
			if ( jQuery.isFunction( opt.old ) )=0A=
				opt.old.call( this );=0A=
		};=0A=
=0A=
		return opt;=0A=
	},=0A=
=0A=
	easing: {=0A=
		linear: function( p, n, firstNum, diff ) {=0A=
			return firstNum + diff * p;=0A=
		},=0A=
		swing: function( p, n, firstNum, diff ) {=0A=
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;=0A=
		}=0A=
	},=0A=
=0A=
	timers: [],=0A=
	timerId: null,=0A=
=0A=
	fx: function( elem, options, prop ){=0A=
		this.options =3D options;=0A=
		this.elem =3D elem;=0A=
		this.prop =3D prop;=0A=
=0A=
		if ( !options.orig )=0A=
			options.orig =3D {};=0A=
	}=0A=
=0A=
});=0A=
=0A=
jQuery.fx.prototype =3D {=0A=
=0A=
	// Simple function for setting a style value=0A=
	update: function(){=0A=
		if ( this.options.step )=0A=
			this.options.step.call( this.elem, this.now, this );=0A=
=0A=
		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );=0A=
=0A=
		// Set display property to block for height/width animations=0A=
		if ( this.prop =3D=3D "height" || this.prop =3D=3D "width" )=0A=
			this.elem.style.display =3D "block";=0A=
	},=0A=
=0A=
	// Get the current size=0A=
	cur: function(force){=0A=
		if ( this.elem[this.prop] !=3D null && this.elem.style[this.prop] =
=3D=3D null )=0A=
			return this.elem[ this.prop ];=0A=
=0A=
		var r =3D parseFloat(jQuery.css(this.elem, this.prop, force));=0A=
		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, =
this.prop)) || 0;=0A=
	},=0A=
=0A=
	// Start an animation from one number to another=0A=
	custom: function(from, to, unit){=0A=
		this.startTime =3D now();=0A=
		this.start =3D from;=0A=
		this.end =3D to;=0A=
		this.unit =3D unit || this.unit || "px";=0A=
		this.now =3D this.start;=0A=
		this.pos =3D this.state =3D 0;=0A=
		this.update();=0A=
=0A=
		var self =3D this;=0A=
		function t(gotoEnd){=0A=
			return self.step(gotoEnd);=0A=
		}=0A=
=0A=
		t.elem =3D this.elem;=0A=
=0A=
		jQuery.timers.push(t);=0A=
=0A=
		if ( jQuery.timerId =3D=3D null ) {=0A=
			jQuery.timerId =3D setInterval(function(){=0A=
				var timers =3D jQuery.timers;=0A=
=0A=
				for ( var i =3D 0; i < timers.length; i++ )=0A=
					if ( !timers[i]() )=0A=
						timers.splice(i--, 1);=0A=
=0A=
				if ( !timers.length ) {=0A=
					clearInterval( jQuery.timerId );=0A=
					jQuery.timerId =3D null;=0A=
				}=0A=
			}, 13);=0A=
		}=0A=
	},=0A=
=0A=
	// Simple 'show' function=0A=
	show: function(){=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.attr( this.elem.style, =
this.prop );=0A=
		this.options.show =3D true;=0A=
=0A=
		// Begin the animation=0A=
		this.custom(0, this.cur());=0A=
=0A=
		// Make sure that we start at a small width/height to avoid any=0A=
		// flash of content=0A=
		if ( this.prop =3D=3D "width" || this.prop =3D=3D "height" )=0A=
			this.elem.style[this.prop] =3D "1px";=0A=
=0A=
		// Start by showing the element=0A=
		jQuery(this.elem).show();=0A=
	},=0A=
=0A=
	// Simple 'hide' function=0A=
	hide: function(){=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.attr( this.elem.style, =
this.prop );=0A=
		this.options.hide =3D true;=0A=
=0A=
		// Begin the animation=0A=
		this.custom(this.cur(), 0);=0A=
	},=0A=
=0A=
	// Each step of an animation=0A=
	step: function(gotoEnd){=0A=
		var t =3D now();=0A=
=0A=
		if ( gotoEnd || t > this.options.duration + this.startTime ) {=0A=
			this.now =3D this.end;=0A=
			this.pos =3D this.state =3D 1;=0A=
			this.update();=0A=
=0A=
			this.options.curAnim[ this.prop ] =3D true;=0A=
=0A=
			var done =3D true;=0A=
			for ( var i in this.options.curAnim )=0A=
				if ( this.options.curAnim[i] !=3D=3D true )=0A=
					done =3D false;=0A=
=0A=
			if ( done ) {=0A=
				if ( this.options.display !=3D null ) {=0A=
					// Reset the overflow=0A=
					this.elem.style.overflow =3D this.options.overflow;=0A=
=0A=
					// Reset the display=0A=
					this.elem.style.display =3D this.options.display;=0A=
					if ( jQuery.css(this.elem, "display") =3D=3D "none" )=0A=
						this.elem.style.display =3D "block";=0A=
				}=0A=
=0A=
				// Hide the element if the "hide" operation was done=0A=
				if ( this.options.hide )=0A=
					this.elem.style.display =3D "none";=0A=
=0A=
				// Reset the properties, if the item has been hidden or shown=0A=
				if ( this.options.hide || this.options.show )=0A=
					for ( var p in this.options.curAnim )=0A=
						jQuery.attr(this.elem.style, p, this.options.orig[p]);=0A=
			}=0A=
=0A=
			if ( done )=0A=
				// Execute the complete function=0A=
				this.options.complete.call( this.elem );=0A=
=0A=
			return false;=0A=
		} else {=0A=
			var n =3D t - this.startTime;=0A=
			this.state =3D n / this.options.duration;=0A=
=0A=
			// Perform the easing function, defaults to swing=0A=
			this.pos =3D jQuery.easing[this.options.easing || =
(jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, =
this.options.duration);=0A=
			this.now =3D this.start + ((this.end - this.start) * this.pos);=0A=
=0A=
			// Perform the next step of the animation=0A=
			this.update();=0A=
		}=0A=
=0A=
		return true;=0A=
	}=0A=
=0A=
};=0A=
=0A=
jQuery.extend( jQuery.fx, {=0A=
	speeds:{=0A=
		slow: 600,=0A=
 		fast: 200,=0A=
 		// Default speed=0A=
 		def: 400=0A=
	},=0A=
	step: {=0A=
		scrollLeft: function(fx){=0A=
			fx.elem.scrollLeft =3D fx.now;=0A=
		},=0A=
=0A=
		scrollTop: function(fx){=0A=
			fx.elem.scrollTop =3D fx.now;=0A=
		},=0A=
=0A=
		opacity: function(fx){=0A=
			jQuery.attr(fx.elem.style, "opacity", fx.now);=0A=
		},=0A=
=0A=
		_default: function(fx){=0A=
			fx.elem.style[ fx.prop ] =3D fx.now + fx.unit;=0A=
		}=0A=
	}=0A=
});=0A=
// The Offset Method=0A=
// Originally By Brandon Aaron, part of the Dimension Plugin=0A=
// http://jquery.com/plugins/project/dimensions=0A=
jQuery.fn.offset =3D function() {=0A=
	var left =3D 0, top =3D 0, elem =3D this[0], results;=0A=
=0A=
	if ( elem ) with ( jQuery.browser ) {=0A=
		var parent       =3D elem.parentNode,=0A=
		    offsetChild  =3D elem,=0A=
		    offsetParent =3D elem.offsetParent,=0A=
		    doc          =3D elem.ownerDocument,=0A=
		    safari2      =3D safari && parseInt(version) < 522 && =
!/adobeair/i.test(userAgent),=0A=
		    css          =3D jQuery.curCSS,=0A=
		    fixed        =3D css(elem, "position") =3D=3D "fixed";=0A=
=0A=
		// Use getBoundingClientRect if available=0A=
		if (elem.getBoundingClientRect) {=0A=
			var box =3D elem.getBoundingClientRect();=0A=
=0A=
			// Add the document scroll offsets=0A=
			add(box.left + Math.max(doc.documentElement.scrollLeft, =
doc.body.scrollLeft),=0A=
				box.top  + Math.max(doc.documentElement.scrollTop,  =
doc.body.scrollTop));=0A=
=0A=
			// IE adds the HTML element's border, by default it is medium which =
is 2px=0A=
			// IE 6 and 7 quirks mode the border width is overwritable by the =
following css html { border: 0; }=0A=
			// IE 7 standards mode, the border is always 2px=0A=
			// This border/offset is typically represented by the clientLeft and =
clientTop properties=0A=
			// However, in IE6 and 7 quirks mode the clientLeft and clientTop =
properties are not updated when overwriting it via CSS=0A=
			// Therefore this method will be off by 2px in IE while in quirksmode=0A=
			add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop =
);=0A=
			if(msie && doc.documentElement.clientLeft=3D=3D0 && =
jQuery.curCSS(doc.documentElement, "borderLeftWidth", =
true)=3D=3D'medium')=0A=
				add( -2, -2 );=0A=
=0A=
		// Otherwise loop through the offsetParents and parentNodes=0A=
		} else {=0A=
=0A=
			// Initial element offsets=0A=
			add( elem.offsetLeft, elem.offsetTop );=0A=
=0A=
			// Get parent offsets=0A=
			while ( offsetParent ) {=0A=
				// Add offsetParent offsets=0A=
				add( offsetParent.offsetLeft, offsetParent.offsetTop );=0A=
=0A=
				// Mozilla and Safari > 2 does not include the border on offset =
parents=0A=
				// However Mozilla adds the border for table or table cells=0A=
				if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || =
safari && !safari2 )=0A=
					border( offsetParent );=0A=
=0A=
				// Add the document scroll offsets if position is fixed on any =
offsetParent=0A=
				if ( !fixed && css(offsetParent, "position") =3D=3D "fixed" )=0A=
					fixed =3D true;=0A=
=0A=
				// Set offsetChild to previous offsetParent unless it is the body =
element=0A=
				offsetChild  =3D /^body$/i.test(offsetParent.tagName) ? offsetChild =
: offsetParent;=0A=
				// Get next offsetParent=0A=
				offsetParent =3D offsetParent.offsetParent;=0A=
			}=0A=
=0A=
			// Get parent scroll offsets=0A=
			while ( parent && parent.tagName && =
!/^body|html$/i.test(parent.tagName) ) {=0A=
				// Remove parent scroll UNLESS that parent is inline or a table to =
work around Opera inline/table scrollLeft/Top bug=0A=
				if ( !/^inline|table.*$/i.test(css(parent, "display")) )=0A=
					// Subtract parent scroll offsets=0A=
					add( -parent.scrollLeft, -parent.scrollTop );=0A=
=0A=
				// Mozilla does not add the border for a parent that has overflow =
!=3D visible=0A=
				if ( mozilla && css(parent, "overflow") !=3D "visible" )=0A=
					border( parent );=0A=
=0A=
				// Get next parent=0A=
				parent =3D parent.parentNode;=0A=
			}=0A=
=0A=
			// Safari <=3D 2 doubles body offsets with a fixed position =
element/offsetParent or absolutely positioned offsetChild=0A=
			// Mozilla doubles body offsets with a non-absolutely positioned =
offsetChild=0A=
			if ( (safari2 && (fixed || css(offsetChild, "position") =3D=3D =
"absolute")) ||=0A=
				(mozilla && css(offsetChild, "position") !=3D "absolute") )=0A=
					add( -doc.body.offsetLeft, -doc.body.offsetTop );=0A=
=0A=
			// Add the document scroll offsets if position is fixed=0A=
			if ( fixed )=0A=
				add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),=0A=
					Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));=0A=
		}=0A=
=0A=
		// Return an object with top and left properties=0A=
		results =3D { top: top, left: left };=0A=
	}=0A=
=0A=
	function border(elem) {=0A=
		add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, =
"borderTopWidth", true) );=0A=
	}=0A=
=0A=
	function add(l, t) {=0A=
		left +=3D parseInt(l, 10) || 0;=0A=
		top +=3D parseInt(t, 10) || 0;=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
=0A=
jQuery.fn.extend({=0A=
	position: function() {=0A=
		var left =3D 0, top =3D 0, results;=0A=
=0A=
		if ( this[0] ) {=0A=
			// Get *real* offsetParent=0A=
			var offsetParent =3D this.offsetParent(),=0A=
=0A=
			// Get correct offsets=0A=
			offset       =3D this.offset(),=0A=
			parentOffset =3D /^body|html$/i.test(offsetParent[0].tagName) ? { =
top: 0, left: 0 } : offsetParent.offset();=0A=
=0A=
			// Subtract element margins=0A=
			// note: when an element has margin: auto the offsetLeft and =
marginLeft =0A=
			// are the same in Safari causing offset.left to incorrectly be 0=0A=
			offset.top  -=3D num( this, 'marginTop' );=0A=
			offset.left -=3D num( this, 'marginLeft' );=0A=
=0A=
			// Add offsetParent borders=0A=
			parentOffset.top  +=3D num( offsetParent, 'borderTopWidth' );=0A=
			parentOffset.left +=3D num( offsetParent, 'borderLeftWidth' );=0A=
=0A=
			// Subtract the two offsets=0A=
			results =3D {=0A=
				top:  offset.top  - parentOffset.top,=0A=
				left: offset.left - parentOffset.left=0A=
			};=0A=
		}=0A=
=0A=
		return results;=0A=
	},=0A=
=0A=
	offsetParent: function() {=0A=
		var offsetParent =3D this[0].offsetParent;=0A=
		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && =
jQuery.css(offsetParent, 'position') =3D=3D 'static') )=0A=
			offsetParent =3D offsetParent.offsetParent;=0A=
		return jQuery(offsetParent);=0A=
	}=0A=
});=0A=
=0A=
=0A=
// Create scrollLeft and scrollTop methods=0A=
jQuery.each( ['Left', 'Top'], function(i, name) {=0A=
	var method =3D 'scroll' + name;=0A=
	=0A=
	jQuery.fn[ method ] =3D function(val) {=0A=
		if (!this[0]) return;=0A=
=0A=
		return val !=3D undefined ?=0A=
=0A=
			// Set the scroll offset=0A=
			this.each(function() {=0A=
				this =3D=3D window || this =3D=3D document ?=0A=
					window.scrollTo(=0A=
						!i ? val : jQuery(window).scrollLeft(),=0A=
						 i ? val : jQuery(window).scrollTop()=0A=
					) :=0A=
					this[ method ] =3D val;=0A=
			}) :=0A=
=0A=
			// Return the scroll offset=0A=
			this[0] =3D=3D window || this[0] =3D=3D document ?=0A=
				self[ i ? 'pageYOffset' : 'pageXOffset' ] ||=0A=
					jQuery.boxModel && document.documentElement[ method ] ||=0A=
					document.body[ method ] :=0A=
				this[0][ method ];=0A=
	};=0A=
});=0A=
// Create innerHeight, innerWidth, outerHeight and outerWidth methods=0A=
jQuery.each([ "Height", "Width" ], function(i, name){=0A=
=0A=
	var tl =3D i ? "Left"  : "Top",  // top or left=0A=
		br =3D i ? "Right" : "Bottom"; // bottom or right=0A=
=0A=
	// innerHeight and innerWidth=0A=
	jQuery.fn["inner" + name] =3D function(){=0A=
		return this[ name.toLowerCase() ]() +=0A=
			num(this, "padding" + tl) +=0A=
			num(this, "padding" + br);=0A=
	};=0A=
=0A=
	// outerHeight and outerWidth=0A=
	jQuery.fn["outer" + name] =3D function(margin) {=0A=
		return this["inner" + name]() +=0A=
			num(this, "border" + tl + "Width") +=0A=
			num(this, "border" + br + "Width") +=0A=
			(margin ?=0A=
				num(this, "margin" + tl) + num(this, "margin" + br) : 0);=0A=
	};=0A=
=0A=
});})();=0A=
=0A=
=0A=
//forms plugin=0A=
/*=0A=
 * jQuery Form Plugin=0A=
 * version: 2.12 (06/07/2008)=0A=
 * @requires jQuery v1.2.2 or later=0A=
 *=0A=
 * Examples and documentation at: http://malsup.com/jquery/form/=0A=
 * Dual licensed under the MIT and GPL licenses:=0A=
 *   http://www.opensource.org/licenses/mit-license.php=0A=
 *   http://www.gnu.org/licenses/gpl.html=0A=
 *=0A=
 * Revision: $Id$=0A=
 */=0A=
(function($) {=0A=
=0A=
/*=0A=
    Usage Note:  =0A=
    -----------=0A=
    Do not use both ajaxSubmit and ajaxForm on the same form.  These=0A=
    functions are intended to be exclusive.  Use ajaxSubmit if you want=0A=
    to bind your own submit handler to the form.  For example,=0A=
=0A=
    $(document).ready(function() {=0A=
        $('#myForm').bind('submit', function() {=0A=
            $(this).ajaxSubmit({=0A=
                target: '#output'=0A=
            });=0A=
            return false; // <-- important!=0A=
        });=0A=
    });=0A=
=0A=
    Use ajaxForm when you want the plugin to manage all the event binding=0A=
    for you.  For example,=0A=
=0A=
    $(document).ready(function() {=0A=
        $('#myForm').ajaxForm({=0A=
            target: '#output'=0A=
        });=0A=
    });=0A=
        =0A=
    When using ajaxForm, the ajaxSubmit function will be invoked for you=0A=
    at the appropriate time.  =0A=
*/=0A=
=0A=
/**=0A=
 * ajaxSubmit() provides a mechanism for immediately submitting =0A=
 * an HTML form using AJAX.=0A=
 */=0A=
$.fn.ajaxSubmit =3D function(options) {=0A=
    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)=0A=
    if (!this.length) {=0A=
        log('ajaxSubmit: skipping submit process - no element selected');=0A=
        return this;=0A=
    }=0A=
=0A=
    if (typeof options =3D=3D 'function')=0A=
        options =3D { success: options };=0A=
=0A=
    options =3D $.extend({=0A=
        url:  this.attr('action') || window.location.toString(),=0A=
        type: this.attr('method') || 'GET'=0A=
    }, options || {});=0A=
=0A=
    // hook for manipulating the form data before it is extracted;=0A=
    // convenient for use with rich editors like tinyMCE or FCKEditor=0A=
    var veto =3D {};=0A=
    this.trigger('form-pre-serialize', [this, options, veto]);=0A=
    if (veto.veto) {=0A=
        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');=0A=
        return this;=0A=
   }=0A=
=0A=
    var a =3D this.formToArray(options.semantic);=0A=
    if (options.data) {=0A=
        options.extraData =3D options.data;=0A=
        for (var n in options.data)=0A=
            a.push( { name: n, value: options.data[n] } );=0A=
    }=0A=
=0A=
    // give pre-submit callback an opportunity to abort the submit=0A=
    if (options.beforeSubmit && options.beforeSubmit(a, this, options) =
=3D=3D=3D false) {=0A=
        log('ajaxSubmit: submit aborted via beforeSubmit callback');=0A=
        return this;=0A=
    }    =0A=
=0A=
    // fire vetoable 'validate' event=0A=
    this.trigger('form-submit-validate', [a, this, options, veto]);=0A=
    if (veto.veto) {=0A=
        log('ajaxSubmit: submit vetoed via form-submit-validate =
trigger');=0A=
        return this;=0A=
    }    =0A=
=0A=
    var q =3D $.param(a);=0A=
=0A=
    if (options.type.toUpperCase() =3D=3D 'GET') {=0A=
        options.url +=3D (options.url.indexOf('?') >=3D 0 ? '&' : '?') + =
q;=0A=
        options.data =3D null;  // data is null for 'get'=0A=
    }=0A=
    else=0A=
        options.data =3D q; // data is the query string for 'post'=0A=
=0A=
    var $form =3D this, callbacks =3D [];=0A=
    if (options.resetForm) callbacks.push(function() { =
$form.resetForm(); });=0A=
    if (options.clearForm) callbacks.push(function() { =
$form.clearForm(); });=0A=
=0A=
    // perform a load on the target only if dataType is not provided=0A=
    if (!options.dataType && options.target) {=0A=
        var oldSuccess =3D options.success || function(){};=0A=
        callbacks.push(function(data) {=0A=
            $(options.target).html(data).each(oldSuccess, arguments);=0A=
        });=0A=
    }=0A=
    else if (options.success)=0A=
        callbacks.push(options.success);=0A=
=0A=
    options.success =3D function(data, status) {=0A=
        for (var i=3D0, max=3Dcallbacks.length; i < max; i++)=0A=
            callbacks[i].call(this, data, status, $form);=0A=
    };=0A=
=0A=
    // are there files to upload?=0A=
    var files =3D $('input:file', this).fieldValue();=0A=
    var found =3D false;=0A=
    for (var j=3D0; j < files.length; j++)=0A=
        if (files[j])=0A=
            found =3D true;=0A=
=0A=
    // options.iframe allows user to force iframe mode=0A=
   if (options.iframe || found) { =0A=
       // hack to fix Safari hang (thanks to Tim Molendijk for this)=0A=
       // see:  =
http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab5=
10dd5d=0A=
       if ($.browser.safari && options.closeKeepAlive)=0A=
           $.get(options.closeKeepAlive, fileUpload);=0A=
       else=0A=
           fileUpload();=0A=
       }=0A=
   else=0A=
       $.ajax(options);=0A=
=0A=
    // fire 'notify' event=0A=
    this.trigger('form-submit-notify', [this, options]);=0A=
    return this;=0A=
=0A=
=0A=
    // private function for handling file uploads (hat tip to YAHOO!)=0A=
    function fileUpload() {=0A=
        var form =3D $form[0];=0A=
        =0A=
        if ($(':input[@name=3Dsubmit]', form).length) {=0A=
            alert('Error: Form elements must not be named "submit".');=0A=
            return;=0A=
        }=0A=
        =0A=
        var opts =3D $.extend({}, $.ajaxSettings, options);=0A=
=0A=
        var id =3D 'jqFormIO' + (new Date().getTime());=0A=
        var $io =3D $('<iframe id=3D"' + id + '" name=3D"' + id + '" =
/>');=0A=
        var io =3D $io[0];=0A=
=0A=
        if ($.browser.msie || $.browser.opera) =0A=
            io.src =3D 'javascript:false;document.write("");';=0A=
        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' =
});=0A=
=0A=
        var xhr =3D { // mock object=0A=
            responseText: null,=0A=
            responseXML: null,=0A=
            status: 0,=0A=
            statusText: 'n/a',=0A=
            getAllResponseHeaders: function() {},=0A=
            getResponseHeader: function() {},=0A=
            setRequestHeader: function() {}=0A=
        };=0A=
=0A=
        var g =3D opts.global;=0A=
        // trigger ajax global events so that activity/block indicators =
work like normal=0A=
        if (g && ! $.active++) $.event.trigger("ajaxStart");=0A=
        if (g) $.event.trigger("ajaxSend", [xhr, opts]);=0A=
=0A=
        var cbInvoked =3D 0;=0A=
        var timedOut =3D 0;=0A=
        var operaHack =3D 0;=0A=
=0A=
        // add submitting element to data if we know it=0A=
        var sub =3D form.clk;=0A=
        if (sub) {=0A=
            var n =3D sub.name;=0A=
            if (n && !sub.disabled) {=0A=
                options.extraData =3D options.extraData || {};=0A=
                options.extraData[n] =3D sub.value;=0A=
                if (sub.type =3D=3D "image") {=0A=
                    options.extraData[name+'.x'] =3D form.clk_x;=0A=
                    options.extraData[name+'.y'] =3D form.clk_y;=0A=
                }=0A=
            }=0A=
        }=0A=
        =0A=
        // take a breath so that pending repaints get some cpu time =
before the upload starts=0A=
        setTimeout(function() {=0A=
            // make sure form attrs are set=0A=
            var t =3D $form.attr('target'), a =3D $form.attr('action');=0A=
            $form.attr({=0A=
                target:   id,=0A=
                encoding: 'multipart/form-data',=0A=
                enctype:  'multipart/form-data',=0A=
                method:   'POST',=0A=
                action:   opts.url=0A=
            });=0A=
=0A=
            // support timout=0A=
            if (opts.timeout)=0A=
                setTimeout(function() { timedOut =3D true; cb(); }, =
opts.timeout);=0A=
=0A=
            // add "extra" data to form if provided in options=0A=
            var extraInputs =3D [];=0A=
            try {=0A=
                if (options.extraData)=0A=
                    for (var n in options.extraData)=0A=
                        extraInputs.push(=0A=
                            $('<input type=3D"hidden" name=3D"'+n+'" =
value=3D"'+options.extraData[n]+'" />')=0A=
                                .appendTo(form)[0]);=0A=
            =0A=
                // add iframe to doc and submit the form=0A=
                $io.appendTo('body');=0A=
                io.attachEvent ? io.attachEvent('onload', cb) : =
io.addEventListener('load', cb, false);=0A=
                form.submit();=0A=
            }=0A=
            finally {=0A=
                // reset attrs and remove "extra" input elements=0A=
                $form.attr('action', a);=0A=
                t ? $form.attr('target', t) : $form.removeAttr('target');=0A=
                $(extraInputs).remove();=0A=
            }=0A=
        }, 10);=0A=
=0A=
        function cb() {=0A=
            if (cbInvoked++) return;=0A=
            =0A=
            io.detachEvent ? io.detachEvent('onload', cb) : =
io.removeEventListener('load', cb, false);=0A=
=0A=
            var ok =3D true;=0A=
            try {=0A=
                if (timedOut) throw 'timeout';=0A=
                // extract the server response from the iframe=0A=
                var data, doc;=0A=
=0A=
                doc =3D io.contentWindow ? io.contentWindow.document : =
io.contentDocument ? io.contentDocument : io.document;=0A=
                =0A=
                if ((!doc || (opts.dataType !=3D 'xml' && !doc.body)) && =
!operaHack && $.browser.opera) {=0A=
                    // In Opera 9.2.x the iframe DOM is not always =
traversable when=0A=
                    // the onload callback fires so we give Opera 100ms =
to right itself=0A=
                    operaHack =3D 1;=0A=
                    cbInvoked--;=0A=
                    setTimeout(cb, 100);=0A=
                    return;=0A=
                }=0A=
                =0A=
                xhr.responseText =3D doc.body ? doc.body.innerHTML : =
null;=0A=
                xhr.responseXML =3D doc.XMLDocument ? doc.XMLDocument : =
doc;=0A=
                xhr.getResponseHeader =3D function(header){=0A=
                    var headers =3D {'content-type': opts.dataType};=0A=
                    return headers[header];=0A=
                };=0A=
=0A=
                if (opts.dataType =3D=3D 'json' || opts.dataType =3D=3D =
'script') {=0A=
                    var ta =3D doc.getElementsByTagName('textarea')[0];=0A=
                    xhr.responseText =3D ta ? ta.value : =
xhr.responseText;=0A=
                }=0A=
                else if (opts.dataType =3D=3D 'xml' && !xhr.responseXML =
&& xhr.responseText !=3D null) {=0A=
                    xhr.responseXML =3D toXml(xhr.responseText);=0A=
                }=0A=
                data =3D $.httpData(xhr, opts.dataType);=0A=
            }=0A=
            catch(e){=0A=
                ok =3D false;=0A=
                $.handleError(opts, xhr, 'error', e);=0A=
            }=0A=
=0A=
            // ordering of these callbacks/triggers is odd, but that's =
how $.ajax does it=0A=
            if (ok) {=0A=
                opts.success(data, 'success');=0A=
                if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);=0A=
            }=0A=
            if (g) $.event.trigger("ajaxComplete", [xhr, opts]);=0A=
            if (g && ! --$.active) $.event.trigger("ajaxStop");=0A=
            if (opts.complete) opts.complete(xhr, ok ? 'success' : =
'error');=0A=
=0A=
            // clean up=0A=
            setTimeout(function() {=0A=
                $io.remove();=0A=
                xhr.responseXML =3D null;=0A=
            }, 100);=0A=
        };=0A=
=0A=
        function toXml(s, doc) {=0A=
            if (window.ActiveXObject) {=0A=
                doc =3D new ActiveXObject('Microsoft.XMLDOM');=0A=
                doc.async =3D 'false';=0A=
                doc.loadXML(s);=0A=
            }=0A=
            else=0A=
                doc =3D (new DOMParser()).parseFromString(s, 'text/xml');=0A=
            return (doc && doc.documentElement && =
doc.documentElement.tagName !=3D 'parsererror') ? doc : null;=0A=
        };=0A=
    };=0A=
};=0A=
=0A=
/**=0A=
 * ajaxForm() provides a mechanism for fully automating form submission.=0A=
 *=0A=
 * The advantages of using this method instead of ajaxSubmit() are:=0A=
 *=0A=
 * 1: This method will include coordinates for <input type=3D"image" /> =
elements (if the element=0A=
 *    is used to submit the form).=0A=
 * 2. This method will include the submit element's name/value data (for =
the element that was=0A=
 *    used to submit the form).=0A=
 * 3. This method binds the submit() method to the form for you.=0A=
 *=0A=
 * The options argument for ajaxForm works exactly as it does for =
ajaxSubmit.  ajaxForm merely=0A=
 * passes the options argument along after properly binding events for =
submit elements and=0A=
 * the form itself.=0A=
 */ =0A=
$.fn.ajaxForm =3D function(options) {=0A=
    return this.ajaxFormUnbind().bind('submit.form-plugin',function() {=0A=
        $(this).ajaxSubmit(options);=0A=
        return false;=0A=
    }).each(function() {=0A=
        // store options in hash=0A=
        $(":submit,input:image", =
this).bind('click.form-plugin',function(e) {=0A=
            var $form =3D this.form;=0A=
            $form.clk =3D this;=0A=
            if (this.type =3D=3D 'image') {=0A=
                if (e.offsetX !=3D undefined) {=0A=
                    $form.clk_x =3D e.offsetX;=0A=
                    $form.clk_y =3D e.offsetY;=0A=
                } else if (typeof $.fn.offset =3D=3D 'function') { // =
try to use dimensions plugin=0A=
                    var offset =3D $(this).offset();=0A=
                    $form.clk_x =3D e.pageX - offset.left;=0A=
                    $form.clk_y =3D e.pageY - offset.top;=0A=
                } else {=0A=
                    $form.clk_x =3D e.pageX - this.offsetLeft;=0A=
                    $form.clk_y =3D e.pageY - this.offsetTop;=0A=
                }=0A=
            }=0A=
            // clear form vars=0A=
            setTimeout(function() { $form.clk =3D $form.clk_x =3D =
$form.clk_y =3D null; }, 10);=0A=
        });=0A=
    });=0A=
};=0A=
=0A=
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm=0A=
$.fn.ajaxFormUnbind =3D function() {=0A=
    this.unbind('submit.form-plugin');=0A=
    return this.each(function() {=0A=
        $(":submit,input:image", this).unbind('click.form-plugin');=0A=
    });=0A=
=0A=
};=0A=
=0A=
/**=0A=
 * formToArray() gathers form element data into an array of objects that =
can=0A=
 * be passed to any of the following ajax functions: $.get, $.post, or =
load.=0A=
 * Each object in the array has both a 'name' and 'value' property.  An =
example of=0A=
 * an array for a simple login form might be:=0A=
 *=0A=
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: =
'secret' } ]=0A=
 *=0A=
 * It is this array that is passed to pre-submit callback functions =
provided to the=0A=
 * ajaxSubmit() and ajaxForm() methods.=0A=
 */=0A=
$.fn.formToArray =3D function(semantic) {=0A=
    var a =3D [];=0A=
    if (this.length =3D=3D 0) return a;=0A=
=0A=
    var form =3D this[0];=0A=
    var els =3D semantic ? form.getElementsByTagName('*') : =
form.elements;=0A=
    if (!els) return a;=0A=
    for(var i=3D0, max=3Dels.length; i < max; i++) {=0A=
        var el =3D els[i];=0A=
        var n =3D el.name;=0A=
        if (!n) continue;=0A=
=0A=
        if (semantic && form.clk && el.type =3D=3D "image") {=0A=
            // handle image inputs on the fly when semantic =3D=3D true=0A=
            if(!el.disabled && form.clk =3D=3D el)=0A=
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', =
value: form.clk_y});=0A=
            continue;=0A=
        }=0A=
=0A=
        var v =3D $.fieldValue(el, true);=0A=
        if (v && v.constructor =3D=3D Array) {=0A=
            for(var j=3D0, jmax=3Dv.length; j < jmax; j++)=0A=
                a.push({name: n, value: v[j]});=0A=
        }=0A=
        else if (v !=3D=3D null && typeof v !=3D 'undefined')=0A=
            a.push({name: n, value: v});=0A=
    }=0A=
=0A=
    if (!semantic && form.clk) {=0A=
        // input type=3D=3D'image' are not found in elements array! =
handle them here=0A=
        var inputs =3D form.getElementsByTagName("input");=0A=
        for(var i=3D0, max=3Dinputs.length; i < max; i++) {=0A=
            var input =3D inputs[i];=0A=
            var n =3D input.name;=0A=
            if(n && !input.disabled && input.type =3D=3D "image" && =
form.clk =3D=3D input)=0A=
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', =
value: form.clk_y});=0A=
        }=0A=
    }=0A=
    return a;=0A=
};=0A=
=0A=
/**=0A=
 * Serializes form data into a 'submittable' string. This method will =
return a string=0A=
 * in the format: name1=3Dvalue1&amp;name2=3Dvalue2=0A=
 */=0A=
$.fn.formSerialize =3D function(semantic) {=0A=
    //hand off to jQuery.param for proper encoding=0A=
    return $.param(this.formToArray(semantic));=0A=
};=0A=
=0A=
/**=0A=
 * Serializes all field elements in the jQuery object into a query =
string.=0A=
 * This method will return a string in the format: =
name1=3Dvalue1&amp;name2=3Dvalue2=0A=
 */=0A=
$.fn.fieldSerialize =3D function(successful) {=0A=
    var a =3D [];=0A=
    this.each(function() {=0A=
        var n =3D this.name;=0A=
        if (!n) return;=0A=
        var v =3D $.fieldValue(this, successful);=0A=
        if (v && v.constructor =3D=3D Array) {=0A=
            for (var i=3D0,max=3Dv.length; i < max; i++)=0A=
                a.push({name: n, value: v[i]});=0A=
        }=0A=
        else if (v !=3D=3D null && typeof v !=3D 'undefined')=0A=
            a.push({name: this.name, value: v});=0A=
    });=0A=
    //hand off to jQuery.param for proper encoding=0A=
    return $.param(a);=0A=
};=0A=
=0A=
/**=0A=
 * Returns the value(s) of the element in the matched set.  For example, =
consider the following form:=0A=
 *=0A=
 *  <form><fieldset>=0A=
 *      <input name=3D"A" type=3D"text" />=0A=
 *      <input name=3D"A" type=3D"text" />=0A=
 *      <input name=3D"B" type=3D"checkbox" value=3D"B1" />=0A=
 *      <input name=3D"B" type=3D"checkbox" value=3D"B2"/>=0A=
 *      <input name=3D"C" type=3D"radio" value=3D"C1" />=0A=
 *      <input name=3D"C" type=3D"radio" value=3D"C2" />=0A=
 *  </fieldset></form>=0A=
 *=0A=
 *  var v =3D $(':text').fieldValue();=0A=
 *  // if no values are entered into the text inputs=0A=
 *  v =3D=3D ['','']=0A=
 *  // if values entered into the text inputs are 'foo' and 'bar'=0A=
 *  v =3D=3D ['foo','bar']=0A=
 *=0A=
 *  var v =3D $(':checkbox').fieldValue();=0A=
 *  // if neither checkbox is checked=0A=
 *  v =3D=3D=3D undefined=0A=
 *  // if both checkboxes are checked=0A=
 *  v =3D=3D ['B1', 'B2']=0A=
 *=0A=
 *  var v =3D $(':radio').fieldValue();=0A=
 *  // if neither radio is checked=0A=
 *  v =3D=3D=3D undefined=0A=
 *  // if first radio is checked=0A=
 *  v =3D=3D ['C1']=0A=
 *=0A=
 * The successful argument controls whether or not the field element =
must be 'successful'=0A=
 * (per =
http://www.w3.org/TR/html4/interact/forms.html#successful-controls).=0A=
 * The default value of the successful argument is true.  If this value =
is false the value(s)=0A=
 * for each element is returned.=0A=
 *=0A=
 * Note: This method *always* returns an array.  If no valid value can =
be determined the=0A=
 *       array will be empty, otherwise it will contain one or more =
values.=0A=
 */=0A=
$.fn.fieldValue =3D function(successful) {=0A=
    for (var val=3D[], i=3D0, max=3Dthis.length; i < max; i++) {=0A=
        var el =3D this[i];=0A=
        var v =3D $.fieldValue(el, successful);=0A=
        if (v =3D=3D=3D null || typeof v =3D=3D 'undefined' || =
(v.constructor =3D=3D Array && !v.length))=0A=
            continue;=0A=
        v.constructor =3D=3D Array ? $.merge(val, v) : val.push(v);=0A=
    }=0A=
    return val;=0A=
};=0A=
=0A=
/**=0A=
 * Returns the value of the field element.=0A=
 */=0A=
$.fieldValue =3D function(el, successful) {=0A=
    var n =3D el.name, t =3D el.type, tag =3D el.tagName.toLowerCase();=0A=
    if (typeof successful =3D=3D 'undefined') successful =3D true;=0A=
=0A=
    if (successful && (!n || el.disabled || t =3D=3D 'reset' || t =3D=3D =
'button' ||=0A=
        (t =3D=3D 'checkbox' || t =3D=3D 'radio') && !el.checked ||=0A=
        (t =3D=3D 'submit' || t =3D=3D 'image') && el.form && =
el.form.clk !=3D el ||=0A=
        tag =3D=3D 'select' && el.selectedIndex =3D=3D -1))=0A=
            return null;=0A=
=0A=
    if (tag =3D=3D 'select') {=0A=
        var index =3D el.selectedIndex;=0A=
        if (index < 0) return null;=0A=
        var a =3D [], ops =3D el.options;=0A=
        var one =3D (t =3D=3D 'select-one');=0A=
        var max =3D (one ? index+1 : ops.length);=0A=
        for(var i=3D(one ? index : 0); i < max; i++) {=0A=
            var op =3D ops[i];=0A=
            if (op.selected) {=0A=
                // extra pain for IE...=0A=
                var v =3D $.browser.msie && =
!(op.attributes['value'].specified) ? op.text : op.value;=0A=
                if (one) return v;=0A=
                a.push(v);=0A=
            }=0A=
        }=0A=
        return a;=0A=
    }=0A=
    return el.value;=0A=
};=0A=
=0A=
/**=0A=
 * Clears the form data.  Takes the following actions on the form's =
input fields:=0A=
 *  - input text fields will have their 'value' property set to the =
empty string=0A=
 *  - select elements will have their 'selectedIndex' property set to -1=0A=
 *  - checkbox and radio inputs will have their 'checked' property set =
to false=0A=
 *  - inputs of type submit, button, reset, and hidden will *not* be =
effected=0A=
 *  - button elements will *not* be effected=0A=
 */=0A=
$.fn.clearForm =3D function() {=0A=
    return this.each(function() {=0A=
        $('input,select,textarea', this).clearFields();=0A=
    });=0A=
};=0A=
=0A=
/**=0A=
 * Clears the selected form elements.=0A=
 */=0A=
$.fn.clearFields =3D $.fn.clearInputs =3D function() {=0A=
    return this.each(function() {=0A=
        var t =3D this.type, tag =3D this.tagName.toLowerCase();=0A=
        if (t =3D=3D 'text' || t =3D=3D 'password' || tag =3D=3D =
'textarea')=0A=
            this.value =3D '';=0A=
        else if (t =3D=3D 'checkbox' || t =3D=3D 'radio')=0A=
            this.checked =3D false;=0A=
        else if (tag =3D=3D 'select')=0A=
            this.selectedIndex =3D -1;=0A=
    });=0A=
};=0A=
=0A=
/**=0A=
 * Resets the form data.  Causes all form elements to be reset to their =
original value.=0A=
 */=0A=
$.fn.resetForm =3D function() {=0A=
    return this.each(function() {=0A=
        // guard against an input with the name of 'reset'=0A=
        // note that IE reports the reset function as an 'object'=0A=
        if (typeof this.reset =3D=3D 'function' || (typeof this.reset =
=3D=3D 'object' && !this.reset.nodeType))=0A=
            this.reset();=0A=
    });=0A=
};=0A=
=0A=
/**=0A=
 * Enables or disables any matching elements.=0A=
 */=0A=
$.fn.enable =3D function(b) { =0A=
    if (b =3D=3D undefined) b =3D true;=0A=
    return this.each(function() { =0A=
        this.disabled =3D !b =0A=
    });=0A=
};=0A=
=0A=
/**=0A=
 * Checks/unchecks any matching checkboxes or radio buttons and=0A=
 * selects/deselects and matching option elements.=0A=
 */=0A=
$.fn.select =3D function(select) {=0A=
    if (select =3D=3D undefined) select =3D true;=0A=
    return this.each(function() { =0A=
        var t =3D this.type;=0A=
        if (t =3D=3D 'checkbox' || t =3D=3D 'radio')=0A=
            this.checked =3D select;=0A=
        else if (this.tagName.toLowerCase() =3D=3D 'option') {=0A=
            var $sel =3D $(this).parent('select');=0A=
            if (select && $sel[0] && $sel[0].type =3D=3D 'select-one') {=0A=
                // deselect all other options=0A=
                $sel.find('option').select(false);=0A=
            }=0A=
            this.selected =3D select;=0A=
        }=0A=
    });=0A=
};=0A=
=0A=
// helper fn for console logging=0A=
// set $.fn.ajaxSubmit.debug to true to enable debug logging=0A=
function log() {=0A=
    if ($.fn.ajaxSubmit.debug && window.console && window.console.log)=0A=
        window.console.log('[jquery.form] ' + =
Array.prototype.join.call(arguments,''));=0A=
};=0A=
=0A=
=0A=
})(jQuery);=0A=
=0A=
//scrollTo plugin=0A=
(function( $ ){=0A=
	=0A=
	var $scrollTo =3D $.scrollTo =3D function( target, duration, settings ){=0A=
		$(window).scrollTo( target, duration, settings );=0A=
	};=0A=
=0A=
	$scrollTo.defaults =3D {=0A=
		axis:'y',=0A=
		duration:1=0A=
	};=0A=
=0A=
	$scrollTo.window =3D function( scope ){=0A=
		return $(window).scrollable();=0A=
	};=0A=
=0A=
	$.fn.scrollable =3D function(){=0A=
		return this.map(function(){=0A=
			var win =3D this.parentWindow || this.defaultView,=0A=
				elem =3D this.nodeName =3D=3D '#document' ? win.frameElement || win =
: this,=0A=
				doc =3D elem.contentDocument || (elem.contentWindow || =
elem).document,=0A=
				isWin =3D elem.setInterval;=0A=
=0A=
			return elem.nodeName =3D=3D 'IFRAME' || isWin && $.browser.safari ? =
doc.body=0A=
				: isWin ? doc.documentElement=0A=
				: this;=0A=
		});=0A=
	};=0A=
=0A=
	$.fn.scrollTo =3D function( target, duration, settings ){=0A=
		if( typeof duration =3D=3D 'object' ){=0A=
			settings =3D duration;=0A=
			duration =3D 0;=0A=
		}=0A=
		if( typeof settings =3D=3D 'function' )=0A=
			settings =3D { onAfter:settings };=0A=
			=0A=
		settings =3D $.extend( {}, $scrollTo.defaults, settings );=0A=
		duration =3D duration || settings.speed || settings.duration;=0A=
		settings.queue =3D settings.queue && settings.axis.length > 1;=0A=
		=0A=
		if( settings.queue )=0A=
			duration /=3D 2;=0A=
		settings.offset =3D both( settings.offset );=0A=
		settings.over =3D both( settings.over );=0A=
=0A=
		return this.scrollable().each(function(){=0A=
			var elem =3D this,=0A=
				$elem =3D $(elem),=0A=
				targ =3D target, toff, attr =3D {},=0A=
				win =3D $elem.is('html,body');=0A=
=0A=
			switch( typeof targ ){=0A=
				case 'number':=0A=
				case 'string':=0A=
					if( /^([+-]=3D)?\d+(px)?$/.test(targ) ){=0A=
						targ =3D both( targ );=0A=
						break;=0A=
					}=0A=
					targ =3D $(targ,this);=0A=
				case 'object':=0A=
					if( targ.is || targ.style )=0A=
						toff =3D (targ =3D $(targ)).offset();=0A=
			}=0A=
			$.each( settings.axis.split(''), function( i, axis ){=0A=
				var Pos	=3D axis =3D=3D 'x' ? 'Left' : 'Top',=0A=
					pos =3D Pos.toLowerCase(),=0A=
					key =3D 'scroll' + Pos,=0A=
					old =3D elem[key],=0A=
					Dim =3D axis =3D=3D 'x' ? 'Width' : 'Height',=0A=
					dim =3D Dim.toLowerCase();=0A=
=0A=
				if( toff ){=0A=
					attr[key] =3D toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );=0A=
=0A=
					if( settings.margin ){=0A=
						attr[key] -=3D parseInt(targ.css('margin'+Pos)) || 0;=0A=
						attr[key] -=3D parseInt(targ.css('border'+Pos+'Width')) || 0;=0A=
					}=0A=
					=0A=
					attr[key] +=3D settings.offset[pos] || 0;=0A=
					=0A=
					if( settings.over[pos] )=0A=
						attr[key] +=3D targ[dim]() * settings.over[pos];=0A=
				}else=0A=
					attr[key] =3D targ[pos];=0A=
=0A=
				if( /^\d+$/.test(attr[key]) )=0A=
					attr[key] =3D attr[key] <=3D 0 ? 0 : Math.min( attr[key], max(Dim) =
);=0A=
=0A=
				if( !i && settings.queue ){=0A=
					if( old !=3D attr[key] )=0A=
						animate( settings.onAfterFirst );=0A=
					delete attr[key];=0A=
				}=0A=
			});			=0A=
			animate( settings.onAfter );			=0A=
=0A=
			function animate( callback ){=0A=
				$elem.animate( attr, duration, settings.easing, callback && =
function(){=0A=
					callback.call(this, target, settings);=0A=
				});=0A=
			};=0A=
			function max( Dim ){=0A=
				var attr =3D'scroll'+Dim,=0A=
					doc =3D elem.ownerDocument;=0A=
				=0A=
				return win=0A=
						? Math.max( doc.documentElement[attr], doc.body[attr]  )=0A=
						: elem[attr];=0A=
			};=0A=
		}).end();=0A=
	};=0A=
=0A=
	function both( val ){=0A=
		return typeof val =3D=3D 'object' ? val : { top:val, left:val };=0A=
	};=0A=
=0A=
})( jQuery );=0A=
=0A=
jQuery.fn.bgIframe =3D jQuery.fn.bgiframe =3D function() {=0A=
    // This is only for IE6=0A=
    if ( !(jQuery.browser.msie && typeof XMLHttpRequest =3D=3D =
'function') ) return this;=0A=
    var html =3D '<iframe class=3D"bgiframe" src=3D"javascript:;" =
tabindex=3D"-1" '=0A=
    		    +'style=3D"display:block; position:absolute; '=0A=
			+'top: =
expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)  || =
0) * -1) + \'px\'); '=0A=
			=
+'left:expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth=
) || 0) * -1) + \'px\'); ' =0A=
			+'z-index:-1; filter:Alpha(Opacity=3D\'0\'); '=0A=
			+'width:expression(this.parentNode.offsetWidth + \'px\'); '=0A=
			+'height:expression(this.parentNode.offsetHeight + \'px\')"/>';=0A=
    return this.each(function() {=0A=
	if ( !jQuery('iframe.bgiframe', this)[0] )=0A=
	    this.insertBefore( document.createElement(html), this.firstChild );=0A=
    });=0A=
};=0A=
=0A=
/**=0A=
 * jQuery.Preload=0A=
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com=0A=
 * Dual licensed under MIT and GPL.=0A=
 * Date: 3/12/2008=0A=
 *=0A=
 * @projectDescription Multifunctional preloader=0A=
 * @author Ariel Flesler=0A=
 * @version 1.0.7=0A=
 *=0A=
 * @id jQuery.preload=0A=
 * @param {String, jQuery, Array< String, <a>, <link>, <img> >} original =
Collection of sources to preload=0A=
 * @param {Object} settings Hash of settings.=0A=
 *=0A=
 * @id jQuery.fn.preload=0A=
 * @param {Object} settings Hash of settings.=0A=
 * @return {jQuery} Returns the same jQuery object, for chaining.=0A=
 *=0A=
 * @example Link Mode:=0A=
 *	$.preload( '#images a' );=0A=
 *=0A=
 * @example Rollover Mode:=0A=
 *	$.preload( '#images img', {=0A=
 *		find:/\.(gif|jpg)/,=0A=
 *		replace:'_over.$1'=0A=
 *	});=0A=
 *=0A=
 * @example Src Mode:=0A=
 *	$.preload( [ 'red', 'blue', 'yellow' ], {=0A=
 *		base:'images/colors/',=0A=
 *		ext:'.jpg'=0A=
 *	});=0A=
 *=0A=
 * @example Placeholder Mode:=0A=
 *	$.preload( '#images img', {=0A=
 *		placeholder:'placeholder.jpg',=0A=
 *		notFound:'notfound.jpg'=0A=
 *	});=0A=
 *=0A=
 * @example Placeholder+Rollover Mode(High res):=0A=
 *	$.preload( '#images img', {=0A=
 *		placeholder:true,=0A=
 *		find:/\.(gif|jpg)/,=0A=
 *		replace:'_high.$1'=0A=
 *	});=0A=
 */=0A=
(function( $ ){=0A=
=0A=
	var $preload =3D $.preload =3D function( original, settings ){=0A=
		if( original.split )//selector=0A=
			original =3D $(original);=0A=
=0A=
		settings =3D $.extend( {}, $preload.defaults, settings );=0A=
		var sources =3D $.map( original, function( source ){=0A=
			if( !source ) =0A=
				return;//skip=0A=
			if( source.split )//URL Mode=0A=
				return settings.base + source + settings.ext;=0A=
			var url =3D source.src || source.href;//save the original source=0A=
			if( typeof settings.placeholder =3D=3D 'string' && source.src =
)//Placeholder Mode, if it's an image, set it.=0A=
				source.src =3D settings.placeholder;=0A=
			if( url && settings.find )//Rollover mode=0A=
				url =3D url.replace( settings.find, settings.replace );=0A=
			return url || null;//skip if empty string=0A=
		});=0A=
=0A=
		var data =3D {=0A=
			loaded:0,//how many were loaded successfully=0A=
			failed:0,//how many urls failed=0A=
			next:0,//which one's the next image to load (index)=0A=
			done:0,//how many urls were tried=0A=
			//found:false,//whether the last one was successful=0A=
			total:sources.length//how many images are being preloaded overall=0A=
		};=0A=
		=0A=
		if( !data.total )//nothing to preload=0A=
			return finish();=0A=
		=0A=
		var imgs =3D '<img/>',//ensure one=0A=
			thres =3D settings.threshold;//save a copy=0A=
		=0A=
		while( --thres > 0 )//it could be oddly negative=0A=
			imgs +=3D '<img/>';=0A=
		imgs =3D =
$(imgs).load(handler).error(handler).bind('abort',handler).each(fetch);=0A=
		=0A=
		function handler( e ){=0A=
			data.found =3D e.type =3D=3D 'load';=0A=
			data.image =3D this.src;=0A=
			var orig =3D data.original =3D original[this.index];=0A=
			data[data.found?'loaded':'failed']++;=0A=
			data.done++;=0A=
			if( settings.placeholder && orig.src )//special case when on =
placeholder mode=0A=
				orig.src =3D data.found ? data.image : settings.notFound || orig.src;=0A=
			if( settings.onComplete )=0A=
				settings.onComplete( data );=0A=
			if( data.done < data.total )//let's continue=0A=
				fetch( 0, this );=0A=
			else{//we are finished=0A=
				if( imgs.unbind )//sometimes IE gets here before finishing line 84=0A=
					imgs.unbind('load').unbind('error').unbind('abort');//cleanup=0A=
				imgs =3D null;=0A=
				finish();=0A=
			}=0A=
		};=0A=
		function fetch( i, img, retry ){=0A=
			if( $.browser.msie && data.next && data.next % $preload.gap =3D=3D 0 =
&& !retry ){//IE problem, can't preload more than 15=0A=
				setTimeout(function(){ fetch( i, img, true ); }, 0);=0A=
				return false;=0A=
			}=0A=
			if( data.next =3D=3D data.total ) return false;//no more to fetch=0A=
			img.index =3D data.next;//save it, we'll need it.=0A=
			img.src =3D sources[data.next++];=0A=
			if( settings.onRequest ){=0A=
				data.image =3D img.src;=0A=
				data.original =3D original[data.next-1];=0A=
				settings.onRequest( data );=0A=
			}=0A=
		};=0A=
		function finish(){=0A=
			if( settings.onFinish )=0A=
				settings.onFinish( data );=0A=
		};=0A=
	};=0A=
=0A=
	// each time we load this amount and it's IE, we must rest for a while, =
make it lower if you get stack overflow.=0A=
	$preload.gap =3D 14; =0A=
=0A=
	$preload.defaults =3D {=0A=
		threshold:2,//how many images to load simultaneously=0A=
		base:'',//URL mode: a base url can be specified, it is prepended to =
all string urls=0A=
		ext:'',//URL mode:same as base, but it's appended after the original =
url.=0A=
		replace:''//Rollover mode: replacement (can be left empty)=0A=
		/*=0A=
		find:null,//Rollover mode: a string or regex for the replacement=0A=
		notFound:''//Placeholder Mode: Optional url of an image to use when =
the original wasn't found=0A=
		placeholder:'',//Placeholder Mode: url of an image to set while loading=0A=
		onRequest:function( data ){ ... },//callback called every time a new =
url is requested=0A=
		onComplete:function( data ){ ... },//callback called every time a =
response is received(successful or not)=0A=
		onFinish:function( data ){ ... }//callback called after all the images =
were loaded(or failed)=0A=
		*/=0A=
	};=0A=
=0A=
	$.fn.preload =3D function( settings ){=0A=
		$preload( this, settings );=0A=
		return this;=0A=
	};=0A=
=0A=
})( jQuery );=0A=
//!!!!=0A=
=0A=
=0A=
=0A=
//props:=0A=
//type: 0 - fixed element (app or window), 1 - popup element (menu), 2 - =
global listener (desktop)=0A=
//owner: free format value to be used as backlink to owner of focus (app =
or end object etc)=0A=
//thispar: this for all handlers=0A=
//param: user param for all handlers=0A=
//parent: parent _uFocus object which will get all events=0A=
=0A=
//       Event handlers are propagated from the highest parent focus =
down to current focus=0A=
//       True return value from handler stops propagation (so parent =
focus can intercept event)=0A=
//       Global focus listeners get all events and can cancel them for =
all other focus objects.=0A=
//onkeydown: thispar.func(event,param,target focusobj)     true return =
value means that event must not be propagated to child focus objects (or =
all other is current is global)=0A=
//onkeyup: thispar.func(event,param,target focusobj)=0A=
//onkeypress: thispar.func(event,param,target focusobj)=0A=
//       Activates are propagated in the same way as key events but =
propagation cannot be cancelled, except for new activate=0A=
//onactivate: only for type 0 and 1; thispar.func(param,oldfocus,target =
focusobj) return value of -1 shows that activate() was called and =
current focus change processing must be stopped immediately=0A=
//		 Check whether focus can be activated; propagated as key events; =
false - forbid activation=0A=
//canactivate: only for type 0 and 1; thispar.func(param,oldfocus,target =
focusobj) false - cannot, true (but not -1) - can, return value of -1 =
shows that activate() was called and current focus change processing =
must be stopped immediately=0A=
//       Deactivates are propagated in reverse order, from current to =
highest parent =0A=
//ondeactivate: only for type 0 and 1; thispar.func(param,oldfocus (THIS =
is part of it),target focusobj) return value of -1 shows that activate() =
was called and current focus change processing must be stopped =
immediately=0A=
=0A=
function _uFocus(props) {=0A=
	if(!props) props=3D{};=0A=
	this.constructor=3D_uFocus;=0A=
	this._tp=3Dprops.type || 0;=0A=
	this._thispar=3Dprops.thispar || null;//this for all handlers=0A=
	this._param=3Dprops.param || null;//user param for all handlers=0A=
	this._parent=3Dprops.parent || null;//user param for all handlers=0A=
	delete props.type;=0A=
	delete props.thispar;=0A=
	delete props.param;=0A=
	delete props.parent;=0A=
=0A=
	this.owner=3Dnull;=0A=
=0A=
	$.extend(this,props || {});=0A=
	this.destroyed=3D0;=0A=
=0A=
	if(!_uFocus.globalset) {=0A=
		_uFocus.globalset=3Dtrue;=0A=
	    $(document).bind("keydown keyup keypress",_uFocus._onkey);=0A=
	}=0A=
	if(this._tp=3D=3D2) {=0A=
		_uFocus.glisteners.push(this);=0A=
	}=0A=
}=0A=
=0A=
_uFocus.current=3Dnull; //current listener of type 0 or 1 if any=0A=
_uFocus.last_fixed=3Dnull; //if current has type=3D1, then previos =
current of type 0 stored here=0A=
_uFocus.glisteners=3D[]; //list of global listeners=0A=
_uFocus.globalset=3Dfalse;=0A=
_uFocus.inprocess=3D0;=0A=
_uFocus.delayedactivate=3Dnull; //if somefocus.activate() was called =
from canactivate or onactivate handler, somefocus is stored here and =
repeated after=0A=
=0A=
_uFocus._onkey=3Dfunction(e) {=0A=
	var fn=3D'on'+e.type,t;=0A=
	//correct opera bugs in processing arrow keys=0A=
	if(e.type=3D=3D'keypress') {=0A=
		if(=0A=
			(	(e.keyCode=3D=3D37 || e.keyCode=3D=3D38 || e.keyCode=3D=3D39 || =
e.keyCode=3D=3D40 || =0A=
					(e.keyCode=3D=3D0 && $.browser.opera)=0A=
				) &&=0A=
				e.target && =0A=
				e.target.tagName.toLowerCase()!=3D'input' && =
e.target.tagName.toLowerCase()!=3D'textarea'=0A=
			) ||=0A=
			(e.keyCode=3D=3D32 && e.ctrlKey)=0A=
		   )=0A=
//alert(e.target);=0A=
//e.stopPropagation();=0A=
			e.preventDefault();=0A=
	}=0A=
	if(e.type=3D=3D'keydown' && $.browser.opera && e.keyCode=3D=3D0) { //it =
must be APP key 93=0A=
		e.keyCode=3D93;=0A=
	}=0A=
	//send event to global handlers=0A=
	for(var i=3D0;i<_uFocus.glisteners.length;i++) {=0A=
		t=3D_uFocus.glisteners[i];=0A=
		if(!t[fn]) continue;=0A=
		if(t[fn].call(t._thispar,e,t._param,_uFocus.current)) return; //stop =
propagation=0A=
	}=0A=
	t=3D_uFocus.current;=0A=
	if(!t) return; //no active focus=0A=
	//else send to active focus beginning from deepest parent=0A=
	var pars=3D[]; //list of our parents and self=0A=
	while(t) {=0A=
		pars.unshift(t);=0A=
		t=3Dt._parent;=0A=
	}=0A=
	for(var i=3D0;i<pars.length;i++) {=0A=
		if(!pars[i][fn]) continue;=0A=
		=
if(pars[i][fn].call(pars[i]._thispar,e,pars[i]._param,_uFocus.current)) =
return; //stop propagation=0A=
	}=0A=
};=0A=
_uFocus.prototype=3D{=0A=
	//return 0 if no focus was set, true on success, -1 if activate was =
delayed=0A=
	activate: function() { =0A=
		if(this.destroyed || (this._tp!=3D0 && this._tp!=3D1)) return 0; =
//only such types can use explicit activate=0A=
		if(_uFocus.inprocess) {=0A=
			_uFocus.delayedactivate=3Dthis;=0A=
			return -1;=0A=
		}=0A=
		var r;=0A=
		_uFocus.inprocess=3D1;=0A=
//		_uFocus.delayedactivate=3Dnull;=0A=
		r=3Dthis._activate(this,_uFocus.current);=0A=
		_uFocus.inprocess=3D0;=0A=
		if(_uFocus.delayedactivate) {=0A=
			setTimeout("var =
f=3D_uFocus.delayedactivate;_uFocus.delayedactivate=3Dnull;if(f)f.activat=
e();",0);=0A=
		}=0A=
		return r;=0A=
	},=0A=
	deactivate: function() {=0A=
		if(this.destroyed || (this._tp!=3D0 && this._tp!=3D1) || =
_uFocus.inprocess) return; //only such types can use explicit deactivate=0A=
		var r;=0A=
		_uFocus.inprocess=3D1;=0A=
//		_uFocus.delayedactivate=3Dnull;=0A=
		r=3Dthis._deactivate(_uFocus.current,null); //after this call we have =
current pointing to parent of THIS if r!=3D-1=0A=
		_uFocus.inprocess=3D0;=0A=
		if(_uFocus.delayedactivate) {=0A=
			setTimeout("var =
f=3D_uFocus.delayedactivate;_uFocus.delayedactivate=3Dnull;if(f)f.activat=
e();",0);=0A=
			return;=0A=
		}=0A=
		if(r=3D=3D1 && _uFocus.last_fixed && (!_uFocus.current || =
_uFocus.current._tp!=3D1)) { //here tp can be only =3D=3D1=0A=
			_uFocus.last_fixed.activate();=0A=
		}=0A=
	},=0A=
	isactive: function(nochild) {=0A=
		return this=3D=3D_uFocus.current || (!nochild && =
this.isparentof(_uFocus.current));=0A=
	},=0A=
	isparentof: function(obj) { //checks whether obj is parent of THIS=0A=
		if(!obj) return 0;=0A=
		var t=3Dobj._parent;=0A=
		while(t) {=0A=
			if(t=3D=3Dthis) return 1;=0A=
			t=3Dt._parent;=0A=
		}=0A=
		return 0;=0A=
	},=0A=
	_activate: function(tobj,prevobj,nochild) { //target focus object of =
first activate() for correct propagation. previous focus=0A=
		var t,r;=0A=
//console.log('Focus in _activate('+nochild+') '+descr(this));=0A=
		//check that current focus is not this on any depth=0A=
		if(this.isactive()) {=0A=
			t=3D_uFocus.current;=0A=
			if(!nochild || t=3D=3Dthis) return 1;=0A=
			//else deactivate all child focuses=0A=
//			while(t && t._parent!=3Dthis) {=0A=
//				t=3Dt._parent;=0A=
//			}=0A=
//			if(t) t._deactivate(prevobj,tobj); //it will update _uFocus.current=0A=
		}=0A=
//console.log('Focus isactive is false for '+descr(this));=0A=
		=0A=
		//transfer command to parent if have any=0A=
		if(this._parent) {=0A=
			if(!this._parent._activate(this._parent,prevobj)) return 0;=0A=
		}=0A=
		//at this point all parents are active or none exists but =
_uFocus.current can point to old focus=0A=
=0A=
		//deactivate previous focus up to the common parent or null=0A=
		t=3D_uFocus.current;=0A=
		if(t && t!=3Dthis._parent) {=0A=
			while(t._parent && t._parent!=3Dthis._parent) {=0A=
				t=3Dt._parent;=0A=
			}=0A=
			if(t._deactivate(prevobj,tobj)=3D=3D-1) return 0; //it will update =
_uFocus.current; -1 means another activate was called=0A=
		}=0A=
=0A=
		//at this point all parents are active and _uFocus.current points to =
parent (if any) or null=0A=
		//we can try to activate THIS focus=0A=
		//send canactivate notification to global handlers=0A=
		for(var i=3D0;i<_uFocus.glisteners.length;i++) {=0A=
			t=3D_uFocus.glisteners[i];=0A=
			if(!t.canactivate) continue;=0A=
			r=3Dt.canactivate.call(t._thispar,t._param,prevobj,tobj);=0A=
			if(!r || (r=3D=3D-1 && _uFocus.delayedactivate)) return 0; //cancel =
focus activation=0A=
		}=0A=
		//send canactivate notification to all parents. any parent can cancel =
activation of THIS focus=0A=
		var pars=3D[this]; //list of our parents and self=0A=
		t=3Dthis._parent;=0A=
		while(t) {=0A=
			pars.unshift(t);=0A=
			t=3Dt._parent;=0A=
		}=0A=
		for(var i=3D0;i<pars.length;i++) {=0A=
			if(!pars[i].canactivate) continue;=0A=
			=
r=3Dpars[i].canactivate.call(pars[i]._thispar,pars[i]._param,prevobj,tobj=
);=0A=
			if(!r || (r=3D=3D-1 && _uFocus.delayedactivate)) return 0; //cancel =
focus activation=0A=
		}=0A=
		//here all parents and THIS allowed activation=0A=
		_uFocus.current=3Dthis;=0A=
		if(this._tp=3D=3D1 && prevobj && prevobj._tp=3D=3D0) =
_uFocus.last_fixed=3Dprevobj; //remember last fixed focus for new popup =
focus=0A=
			else if(this._tp=3D=3D0) _uFocus.last_fixed=3Dnull; //if this =
type=3D=3D1 and prev type=3D=3D1 then last_fixed unchanged=0A=
=0A=
		//notify about successful activation=0A=
		for(var i=3D0;i<_uFocus.glisteners.length;i++) {=0A=
			t=3D_uFocus.glisteners[i];=0A=
			if(t.onactivate) =0A=
				if(t.onactivate.call(t._thispar,t._param,prevobj,tobj)=3D=3D-1 && =
_uFocus.delayedactivate) return 0;=0A=
		}=0A=
		for(var i=3D0;i<pars.length;i++) {=0A=
			if(pars[i].onactivate) =0A=
				=
if(pars[i].onactivate.call(pars[i]._thispar,pars[i]._param,prevobj,tobj)=3D=
=3D-1 && _uFocus.delayedactivate) return 0;=0A=
		}=0A=
		//here all parents and THIS are notified of activation=0A=
		return 1;		=0A=
	},=0A=
	_deactivate: function(tobj,newobj) {=0A=
		//check that current focus is really in use=0A=
		if(!this.isactive()) return 0;=0A=
=0A=
		//send ondeactivate to all children and THIS=0A=
		var ii,tt;=0A=
		var t=3D_uFocus.current;=0A=
		while(t) {=0A=
			_uFocus.current=3Dt._parent; //ondeactivate handlers must not see its =
active status=0A=
			if(t.ondeactivate) {=0A=
				if(t.ondeactivate.call(t._thispar,t._param,tobj,newobj)=3D=3D-1 && =
_uFocus.delayedactivate) return -1;=0A=
			}=0A=
			if(t._tp!=3D1) _uFocus.last_fixed=3Dnull; //only deactivation of =
whole hierarchy of focuses with tp=3D=3D1 preserves last_fixed=0A=
=0A=
			//send deactivate notification to global handlers=0A=
			for(ii=3D0;ii<_uFocus.glisteners.length;ii++) {=0A=
				tt=3D_uFocus.glisteners[ii];=0A=
				if(tt.ondeactivate) {=0A=
					tt.ondeactivate.call(tt._thispar,tt._param,t,newobj);=0A=
				}=0A=
			}=0A=
=0A=
			if(t=3D=3Dthis) break;=0A=
			t=3Dt._parent;=0A=
		}=0A=
		return 1;=0A=
	},=0A=
	destroy: function() {=0A=
		if(this.destroyed) return;=0A=
		this.deactivate();=0A=
		if(this._tp=3D=3D2) { //remove global listener=0A=
			for(var i=3D0;i<_uFocus.glisteners.length;i++) {=0A=
				if(_uFocus.glisteners[i]=3D=3Dthis) {=0A=
					_uFocus.glisteners.splice(i,1);=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
		this.destroyed=3D1;=0A=
	}=0A=
};=0A=
=0A=
function _uGetOffset(obj){=0A=
	if(!obj) return { 'left' : 0, 'top' : 0 };=0A=
	var left_offset =3D obj.offsetLeft;=0A=
	var top_offset =3D obj.offsetTop;=0A=
	if(!left_offset && !top_offset && obj.offsetParent=3D=3Dnull) {=0A=
	left_offset=3DparseInt(obj.style.left);=0A=
	top_offset=3DparseInt(obj.style.top);=0A=
	} else=0A=
	while ((obj =3D obj.offsetParent) !=3D null)=0A=
	{=0A=
		left_offset +=3D obj.offsetLeft;=0A=
		top_offset +=3D obj.offsetTop;=0A=
	}=0A=
=0A=
	return { 'left' : left_offset, 'top' : top_offset };=0A=
}=0A=
=0A=
=0A=
function _uMenu(id,par,group) {=0A=
    this.init(id,par,group);=0A=
}=0A=
_uMenu.get=3Dfunction(id) {=0A=
    var o=3D$('#'+id)[0];=0A=
    if(o) return o._umenu;=0A=
    return null;=0A=
}=0A=
_uMenu.show=3Dfunction(id,par,tp,mid,dy,dx) {=0A=
    var o=3D_uMenu.get(id);=0A=
    if(o)o.show_menu(par,tp,mid,dy,dx);=0A=
};=0A=
_uMenu.hide=3Dfunction(id,c) {=0A=
    var o=3D_uMenu.get(id);=0A=
    if(o) if(!c)o.hide_menu();else o.hide_child();=0A=
};=0A=
_uMenu.hideAll=3Dfunction(e) {=0A=
//    if (e.which!=3D1 && e.type =3D=3D 'click')return;=0A=
    var gr;=0A=
    with(_uMenu.prototype) {=0A=
	for (gr in have_active) {=0A=
	    if(have_active[gr] && !donothide[gr]) {=0A=
		for (var i in all_menus[gr]) _uMenu.hide(i);=0A=
    	    have_active[gr]=3D'';=0A=
	    }=0A=
	donothide[gr]=3Dfalse;=0A=
	}=0A=
    }=0A=
};=0A=
_uMenu.showOver=3Dfunction (id,par,tp,mid,dy,dx) {=0A=
    var o=3D_uMenu.get(id);=0A=
    if(o) {=0A=
	var gr=3Do.group;=0A=
        with(_uMenu.prototype) {=0A=
	    if(timerid2[gr]) clearTimeout(timerid2[gr]);=0A=
	    if (have_active[gr].length>0 && =
have_active[gr].indexOf(","+id+",")=3D=3D-1)=0A=
		o.show_menu(par,tp,mid,dy,dx);=0A=
	}=0A=
    }=0A=
};=0A=
_uMenu.schedule_hidechild=3Dfunction(id) {=0A=
    var o=3D_uMenu.get(id);=0A=
    if(o) {=0A=
	var gr=3Do.group;=0A=
        with(_uMenu.prototype) {=0A=
    	if(timerid2[gr]) clearTimeout(timerid2[gr]);=0A=
	    =
timerid2[gr]=3DsetTimeout("_uMenu.hide('"+id+"',1);_uMenu.prototype.timer=
id2['"+gr+"']=3D0;",800);=0A=
	}=0A=
    }=0A=
}=0A=
=0A=
_uMenu.prototype=3D{=0A=
    donothide: [], //group is first key=0A=
    all_menus: [], //group is first key=0A=
    have_active: [], //group is first key=0A=
    timerid: [], //group is first key=0A=
    timerid2: [], //group is first key=0A=
    global_set: false,=0A=
    init: function (id,par,group){=0A=
		this.id=3Did;=0A=
        this.obj=3D$('#'+id)[0];=0A=
        if(!this.obj) return;=0A=
        this.obj._umenu=3Dthis;=0A=
        if(!par) par=3Did;=0A=
        this.parentid=3Dpar;=0A=
        if(!group) group=3D'def';=0A=
        this.group=3Dgroup;=0A=
        this.obj.style.display =3D 'none';=0A=
        $(this.obj).bind("click",this,function(e) =
{e.data.donothide[e.data.group]=3Dtrue;});=0A=
	if(this.all_menus[group]=3D=3Dundefined) this.all_menus[group]=3D[];=0A=
	if(this.have_active[group]=3D=3Dundefined) this.have_active[group]=3D'';=0A=
	this.all_menus[group][id]=3Dthis;=0A=
	if(!this.global_set) {=0A=
	    $(document).bind("click",_uMenu.hideAll);=0A=
	    $(window).bind("resize",_uMenu.hideAll);=0A=
	    _uMenu.prototype.global_set=3Dtrue;	=0A=
	}=0A=
    },=0A=
    show_menu: function (par,tp,mid,dy,dx) { =0A=
        var ddX=3D0;=0A=
        var ddY=3D0;=0A=
        if(this.timerid2[this.group]) =
clearTimeout(this.timerid2[this.group]);=0A=
        if(this.have_active[this.group].indexOf(","+this.id+",")>=3D0) {=0A=
                this.hide_menu();=0A=
                return;=0A=
        }=0A=
        if(!dy)dy=3D0;=0A=
        if(!dx)dx=3D0;=0A=
        if(mid){=0A=
                ddX=3D$('#'+mid)[0].offsetLeft;=0A=
                ddY=3D$('#'+mid)[0].offsetTop;=0A=
        }=0A=
        this.allmenus_hidenp();=0A=
        if(!par) par=3Dthis.obj.parentNode; else par=3D$('#'+par)[0];=0A=
        var pos=3D_uGetOffset(par);=0A=
        pos['left']+=3Ddx-ddX;=0A=
        pos['top']+=3Ddy-ddY;=0A=
        if(tp=3D=3D'r') pos['left']+=3Dpar.offsetWidth-4;=0A=
    	    else pos['top']+=3Dpar.offsetHeight+1; //tp=3D=3D'd'=0A=
        var ww=3D$(window).width();=0A=
        with(this.obj.style) {=0A=
    	left=3Dpos['left']+'px';=0A=
    	top=3Dpos['top']+'px';=0A=
    	display=3D'';=0A=
    	visibility=3D'visible';=0A=
        };=0A=
        try { if(pos['left']+this.obj.offsetWidth>ww) {=0A=
                pos['left']=3Dww-this.obj.offsetWidth-5;=0A=
                this.obj.style.left=3Dpos['left']+'px';=0A=
                }=0A=
        } catch(e) {}=0A=
        if(!this.have_active[this.group]) =
this.have_active[this.group]=3D'';=0A=
        this.have_active[this.group]+=3D','+this.id+',';=0A=
        if(this.timerid[this.group]) =
clearTimeout(this.timerid[this.group]);=0A=
        this.donothide[this.group]=3Dtrue;=0A=
        =
this.timerid[this.group]=3DsetTimeout("with(_uMenu.prototype){donothide['=
"+this.group+"']=3Dfalse;timerid['"+this.group+"']=3Dnull;};",100);=0A=
    },=0A=
    allmenus_hidenp: function () {=0A=
        var parents=3D{};=0A=
        var id=3Dthis.id;=0A=
        while(this.all_menus[this.group][id] && =
this.all_menus[this.group][id].parentid!=3Did && id) =
{parents[this.all_menus[this.group][id].parentid]=3D1;id=3Dthis.all_menus=
[this.group][id].parentid;}=0A=
        for (var i in this.all_menus[this.group]) {=0A=
                if(parents[i]=3D=3D1) continue;=0A=
                this.all_menus[this.group][i].hide_menu();=0A=
        }=0A=
    },=0A=
    hide_menu: function () {=0A=
      with(this) {=0A=
        hide_child();=0A=
        var x=3Dhave_active[group].indexOf(","+id+",");=0A=
        if(x>=3D0) =
have_active[group]=3Dhave_active[group].substring(0,x);=0A=
        obj.style.display =3D 'none';=0A=
        obj.style.visibility =3D 'hidden';=0A=
      }=0A=
    },=0A=
    hide_child: function () {=0A=
      with(this) {=0A=
        for (var i in all_menus[group]) =
if(all_menus[group][i].parentid=3D=3Did && i!=3Did) =
all_menus[group][i].hide_menu();=0A=
      }=0A=
    }=0A=
};=0A=
=0A=
=0A=
/*=0A=
Each menu item can be in form:=0A=
1.  'string' - just string with default action onitem (if it's defined) =
or without action. in last case item has not hover hightlight by default=0A=
2.  'sep' - separator=0A=
3.  ['label',action,props]=0A=
	def props is {hl:0} if action is not defined=0A=
	action can be:=0A=
	3.1 'a' - tells that item has <a> tag and item action is to follow href =
in that tag=0A=
	3.2 function - action(item_index,menuobj,id,item_opts,event). if null =
then global onitem is used. default this parameter is thispar from menu =
props=0A=
	3.3 array - submenu=0A=
	props:=0A=
		{=0A=
		action - 'a' or function if second element was array for creating =
submenu (to add action to item opening submenu)=0A=
		id - item string id which will be sent to action or onitem func in =
addition to index=0A=
		hl  - hover highlight. can be used to overwrite menu property=0A=
		thispar - this parameter for action=0A=
		mark - if menu has marks enabled specifies the state of mark (false - =
hidden, true - visible)=0A=
		marktext - if mark is visible (mark is true) then specifies html =
content for mark element (e.g. img tag). can be specified as array =
(object). then mark true values are used as index to this array. =
menu.props.withmarks is the default value of this field=0A=
		onldown - action for left mouse down=0A=
		onrdown - action for right mouse down=0A=
		pos - override default pos properties for submenu=0A=
		opts - override default properties for submenu=0A=
		}=0A=
*/=0A=
=0A=
function _uMENU(name,pos,opts,elems,noinit) {=0A=
	this.constructor=3D_uMENU;=0A=
	this.name=3Dname;=0A=
	this.pos=3D$.extend({=0A=
		pos: null,=0A=
		alignObj: null,=0A=
		align: 'd',=0A=
//r(R) - to the right from object + dx, top edge from object + dy ; R =
will change horiz pos to l-rules if goes out screen=0A=
//l(L) - to the left from object + dx, top edge from object + dy ; L =
will change horiz pos to r-rules if goes out screen=0A=
//d(D) - left (right from rtl) edge from object+dx, to the down from =
object + dy ; D will change vert pos to u-rules if goes out screen=0A=
//u(U) - left (right from rtl) edge from object+dx, to the up from =
object + dy ; U will change vert pos to d-rules or horiz pos to l-rules =
if goes out screen=0A=
		parent: null,=0A=
		parentfocus:null, //apps must specify app._focus for popup without =
windows=0A=
		dx:0,=0A=
		dy:0,=0A=
		childdy:0,=0A=
		childdx:0=0A=
	},pos || {});=0A=
	this.props=3D$.extend({=0A=
		parentnode: null, //inherited by child menus=0A=
		design: _uMENU.defdesign || 'std',=0A=
		hidden: opts.statical && elems && elems.length>0 ? 0 : 1,=0A=
		shadow: 1,=0A=
		addclass: '', //add this class to class of top menu html object=0A=
		withmarks: null, //if true (some object specified) then items of this =
menu can have marks to the left (u-menumarks is added to top menu =
object). value of this field is the default marktext=0A=
		highlight: 1, //whether hovered items must be highlighted by adding =
class u-menuitemhl=0A=
		statical: opts.horiz ? 1 : 0, //do not hide menu on mouse clicks=0A=
		hidetimer: 0, //time in ms to hide menu if no item was hovered=0A=
		horiz: 0, //whether menu is horizontal=0A=
		noabs: 0, //do not use position:absolute for menu=0A=
		width: 0, //0 - width is calculated by content, auto - width is just =
not assigned (for noabs=3D1), X - specified value=0A=
		onshow: null, //(menuobj,menuidx) called just before menu is shown =
(can be used to set marks)=0A=
		onhide: null,=0A=
		ondestroy: null,=0A=
		onitem: null, //inherited by child menus, reaction to item click=0A=
		onldown: null, //inherited by child menus, reaction to item left mouse =
down=0A=
		onrdown: null, //inherited by child menus, reaction to item right =
mouse down=0A=
		thispar: null, //'this' param for handlers; inherited by child menus=0A=
		onreadycreate: null, //(menu) called when menu is fully inited=0A=
		wnd:null, //inherited by child menus, focus will be child of window's =
focus=0A=
		rtl:0 //inherited by child menus=0A=
	},opts || {});=0A=
	this.state=3D{visible:false,init:false,destroyed:false};=0A=
    this.design=3Dthis.props.design && _uMENU.designs[this.props.design] =
? _uMENU.designs[this.props.design] : _uMENU.designs['std'];=0A=
    this.idx=3D_uMENU.nextidx++;=0A=
    _uMENU.all[this.idx]=3Dthis;=0A=
   	if(!this.pos.parent) this.zpos=3D_uMENU.defz;=0A=
   		else this.zpos=3Dthis.pos.parent.zpos+5;=0A=
    this.xpos=3Dthis.ypos=3D0;=0A=
	this.width=3D10;=0A=
	this.height=3D10;	=0A=
	this.elems=3D[];=0A=
	this.add_elems=3Delems && elems.length>0 ? [elems] : [];=0A=
	this.del_elems=3D[];=0A=
	this.pend_show=3Dnull;=0A=
	this.appendtimer=3Dnull;=0A=
	this.decor=3D{w:0,h:0};=0A=
	this.frame=3Dnull;=0A=
	this.childtimer=3Dnull;=0A=
	this.sh=3Dnull;=0A=
	this.hidetimer=3Dnull;=0A=
=0A=
	this.hlitem=3D-1; //highlighted item or -1 if none=0A=
	this.have_active=3Dnull;=0A=
=0A=
	this._focus=3Dnew =
_uFocus({type:1,thispar:this,owner:this,parent:this.pos.parentfocus ? =
this.pos.parentfocus : (this.pos.parent ? this.pos.parent._focus : =
(this.props.wnd ? this.props.wnd._focus : =
null)),onkeydown:this.onkeydown,ondeactivate:this.onfocusdeactivate});=0A=
=0A=
	var t=3Ddocument.createElement("div");=0A=
	t.id=3D"_umenu"+this.idx;=0A=
	if(!this.props.parentnode) $($("body")[0]).prepend(t);=0A=
		else this.props.parentnode.appendChild(t);=0A=
=0A=
	this.top=3Dt;=0A=
    =
$(t).addClass("x-unselectable").css({visibility:'hidden',display:'block'}=
);=0A=
    var m=3Ddocument.createElement("div");=0A=
    t.appendChild(m);=0A=
    this.menu=3Dm;=0A=
=0A=
	if(=0A=
//	!this.props.horiz || =0A=
	!this.props.noabs) {=0A=
    	$(t).css({position:'absolute',zIndex:this.zpos});=0A=
	    if($.browser.msie && parseFloat($.browser.version)<7){=0A=
		    var html =3D '<iframe tabindex=3D"-1" '=0A=
    		    +'style=3D"display:block; position:absolute; '=0A=
			+'filter:Alpha(Opacity=3D\'0\'); '=0A=
			+'width:'+this.width+'px'=0A=
			+'height:'+this.height+'px;border:0"/>';=0A=
=0A=
	    	this.frame=3Ddocument.createElement(html);=0A=
			t.appendChild(this.frame);=0A=
	    }=0A=
	    if(this.props.shadow && !this.props.horiz && (!$.browser.msie || =
$.browser.version>6)) {=0A=
			this.shadow_init();=0A=
			this._resizeSh();=0A=
	    }=0A=
    	$(m).css({position:"absolute",zIndex:2,left:0});=0A=
	}=0A=
   	=
$(m).css("width","50px").bind("mousedown",this,_uMENU._onmenumousedown);=0A=
=0A=
    this.parts=3Dthis.design.menu_init(m,this.props.horiz ? 10 : =
50,this.props,this.pos.parent);=0A=
	if(!_uMENU.globalset) {=0A=
		_uMENU.globalset=3Dtrue;=0A=
	    $(document).bind("mousedown",_uMENU.hideallmenus);=0A=
	    $(window).bind("resize",_uMENU.hideallmenus);=0A=
	}=0A=
	this.toinit=3D[]; //submenus which require init1()=0A=
	this.tocalcsize=3D[]; //submenus which require calcsize()=0A=
	this.createsubmenus();=0A=
=0A=
	if(!this.props.hidden) this.show();=0A=
	if(!noinit)setTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m)m.init1();",10);=0A=
}=0A=
=0A=
=0A=
_uMENU.all=3D[];=0A=
_uMENU.nextidx=3D0;=0A=
_uMENU.lastz=3D0;=0A=
_uMENU.defz=3D25050;=0A=
_uMENU.defdesign=3D'std';=0A=
_uMENU.globalset=3Dfalse;=0A=
_uMENU.ignoreclick=3Dnull;=0A=
=0A=
_uMENU.getbyname=3Dfunction(name) {=0A=
    var a=3Dthis.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && a[i].name=3D=3Dname) return =
a[i];=0A=
    return null;=0A=
};=0A=
=0A=
_uMENU.designs=3D{=0A=
    std: {=0A=
	sh_sz: [4,2], //design specific shadow config=0A=
=0A=
	shadow_init: function(top) {=0A=
	    var sh=3D[];=0A=
	    for(var i=3D0;i<3;i++) {=0A=
		sh[i]=3Ddocument.createElement("div");=0A=
		top.appendChild(sh[i]);=0A=
		=
$(sh[i]).attr("class","x-sh").css("position","absolute").css("z-index",1)=
;=0A=
	    }=0A=
	    =
$(sh[0]).addClass("xsl").css({width:(this.sh_sz[0]+this.sh_sz[1])+"px",le=
ft:(-this.sh_sz[0])+"px",top:"0px"}).html('<div class=3D"xstl"><div =
class=3D"xsml"></div></div>');=0A=
	    =
$(sh[1]).addClass("xsr").css({width:(this.sh_sz[0]+this.sh_sz[1])+"px",to=
p:"0px"}).html('<div class=3D"xstr"><div class=3D"xsmr"></div></div>');=0A=
	    =
$(sh[2]).addClass("xsb").css({height:(this.sh_sz[0]+this.sh_sz[1])+"px",l=
eft:(-this.sh_sz[0])+"px"}).html('<div class=3D"xsbl"><div =
class=3D"xsbr"><div class=3D"xsbc"></div></div></div>');=0A=
	    return sh;=0A=
	},=0A=
	shadow_resize: function(sh,w,h) {=0A=
	    $(sh[0]).css({height:(h-this.sh_sz[1])+"px"});=0A=
	    =
$(sh[1]).css({height:(h-this.sh_sz[1])+"px",left:(w-this.sh_sz[1])+"px"})=
;=0A=
	    =
$(sh[2]).css({width:(w+this.sh_sz[0]*2)+"px",top:(h-this.sh_sz[1])+"px"})=
;=0A=
	},=0A=
	shadow_hide: function(sh) {=0A=
	    $(sh[0]).add(sh[1]).add(sh[2]).hide();=0A=
	},=0A=
	shadow_show: function(sh) {=0A=
	    $(sh[0]).add(sh[1]).add(sh[2]).show();=0A=
	},=0A=
	menu_init: function(menu,inith,props,parent) {=0A=
	    var p=3D{};=0A=
		if(!props.horiz) {=0A=
			$(menu).attr("class","u-menu"+(props.addclass ? ' =
'+String(props.addclass): '')+(props.withmarks ? ' u-menumarks': ''));=0A=
			if($.browser.msie) $(menu).css("overflow","hidden");=0A=
		    $(menu).html(=0A=
(parent && parent.props.horiz ? '' : '<div class=3D"xw-tl"><div =
class=3D"xw-tr"><div class=3D"xw-tc xw-tsps"></div></div></div>')=0A=
+ '<div class=3D"xw-ml"><div class=3D"xw-mr"><div class=3D"xw-mc"><div =
class=3D"u-menubody">'=0A=
+ '<div class=3D"u-menucont" =
style=3D"overflow:visible;height:'+inith+'px"></div></div></div></div></d=
iv>'=0A=
+ '<div class=3D"xw-bl"><div class=3D"xw-br"><div class=3D"xw-bc"><div =
class=3D"xw-footer"></div></div></div></div>'=0A=
		    );=0A=
//		    p.upper=3D$(menu).find(".xw-tl")[0];=0A=
//		    p.center=3D$(wnd).find(".xw-ml")[0];=0A=
//	    	=
$(wnd).find(".xw-mc").bind("mousedown",function(e){e.stopPropagation();})=
;=0A=
		} else {=0A=
			$(menu).attr("class","u-menuh"+(props.addclass ? ' =
'+String(props.addclass): '')+(props.withmarks ? ' u-menumarks': =
'')).css("overflow","hidden");=0A=
			$(menu).html('<div class=3D"u-menubody"><div class=3D"u-menucont" =
style=3D"overflow:hidden;height:'+inith+'px"></div></div>');=0A=
		}=0A=
	    p.content=3D$(menu).find(".u-menucont")[0];=0A=
		p.elems=3D[];=0A=
		p.marks=3D[];=0A=
		$(menu).find("div,span").andSelf().attr("unselectable","on");=0A=
	    return p;=0A=
	},=0A=
	append_item: function(o,el,hl) {=0A=
		var i=3Do.elems.length,a,txt,act=3Dnull,mark,actl,actr;=0A=
		act=3Del[1] ? el[1] : (typeof (el[2].action)!=3D'undefined' ? =
el[2].action : o.props.onitem);=0A=
		actl=3Del[2].onldown || o.props.onldown;=0A=
		actr=3Del[2].onrdown || o.props.onrdown;=0A=
		txt=3Del[0];=0A=
		if(el[2].hl!=3Dundefined) hl=3Del[2].hl;=0A=
		if(o.props.withmarks && txt!=3D'sep' && el[2].mark!=3Dundefined) { =
//if we have to add u-menumark object=0A=
			txt=3D'<div class=3D"u-menumark"></div>'+txt;=0A=
			mark=3D1;=0A=
		}=0A=
		if(act && (act=3D=3D'a' || el[2].action=3D=3D'a')) {=0A=
			a=3Ddocument.createElement('a');=0A=
			$(a).css('display','block');=0A=
		} else a=3Ddocument.createElement('div');=0A=
		if(!o.props.horiz) {=0A=
			if(txt=3D=3D'sep') {=0A=
				a.className=3D'u-menuvsep';=0A=
			} else {=0A=
				a.className=3D'u-menuvitem';=0A=
				if(!act || act.constructor!=3D_uMENU) {=0A=
					$(a).html(txt);=0A=
					if(hl) =
$(a).bind("mouseover",{hl:hl,item:i,obj:o},_uMENU._onitemmouseover).bind(=
"mouseout",{hl:hl,item:-1,obj:o},_uMENU._onitemmouseout);=0A=
					if(act) =
$(a).bind("click",{act:act,obj:o,item:i,itemobj:el},_uMENU._onitemclick);=0A=
					if(actl || actr) =
$(a).bind("mousedown",{actl:actl,actr:actr,obj:o,item:i,itemobj:el},_uMEN=
U._onitemmousedown);=0A=
				} else {=0A=
//					$(a).addClass('u-menuvitemparent').html('<div =
class=3D"u-menuarrow" style=3D"float:right"></div>'+txt);=0A=
//					$(a).addClass('u-menuvitemparent').html('<table align=3D"center" =
style=3D"text-align:left;padding:0;margin:0;botder:0" cellspacing=3D"0" =
cellpadding=3D"0"><tr><td =
style=3D"white-space:nowrap">'+txt+'</td><td><div =
class=3D"u-menuarrow"></div></td></tr></table>');=0A=
					$(a).addClass('u-menuvitemparent').html('<div =
class=3D"u-menuarrow"></div>'+txt);=0A=
					=
$(a).bind("mouseover",{hl:hl,item:i,obj:o},_uMENU._onitemmouseover).bind(=
"mouseout",{hl:hl,item:i,obj:o},_uMENU._onitemmouseout);=0A=
					=
$(a).bind("mousedown",{child:act,obj:o,item:i,itemobj:el},_uMENU._onitemc=
lick);=0A=
					if(el[2].action) =
$(a).bind("click",{act:el[2].action,obj:o,item:i,itemobj:el},_uMENU._onit=
emclick);=0A=
					if(actl || actr) =
$(a).bind("mousedown",{actl:actl,actr:actr,obj:o,item:i,itemobj:el},_uMEN=
U._onitemmousedown);=0A=
				}=0A=
			}=0A=
		} else { //horiz=0A=
			$(a).css("float","left"); =0A=
			if(txt=3D=3D'sep') {=0A=
				a.className=3D'u-menuhsep';=0A=
			} else {=0A=
				a.className=3D'u-menuhitem';=0A=
				if(!act || act.constructor!=3D_uMENU) {=0A=
					$(a).html(txt);=0A=
					if(hl) =
$(a).bind("mouseover",{hl:hl,item:i,obj:o},_uMENU._onitemmouseover).bind(=
"mouseout",{hl:hl,item:i,obj:o},_uMENU._onitemmouseout);=0A=
					if(act) =
$(a).bind("click",{act:act,obj:o,item:i,itemobj:el},_uMENU._onitemclick);=0A=
					if(actl || actr) =
$(a).bind("mousedown",{actl:actl,actr:actr,obj:o,item:i,itemobj:el},_uMEN=
U._onitemmousedown);=0A=
				} else {=0A=
					$(a).addClass('u-menuhitemparent').html(txt);=0A=
					=
$(a).bind("mouseover",{hl:hl,item:i,obj:o},_uMENU._onitemmouseover).bind(=
"mouseout",{hl:hl,item:i,obj:o},_uMENU._onitemmouseout);=0A=
					=
$(a).bind("mousedown",{child:act,obj:o,item:i,itemobj:el},_uMENU._onitemc=
lick);=0A=
					if(el[2].action) =
$(a).bind("click",{act:el[2].action,obj:o,item:i,itemobj:el},_uMENU._onit=
emclick);=0A=
					if(actl || actr) =
$(a).bind("mousedown",{actl:actl,actr:actr,obj:o,item:i,itemobj:el},_uMEN=
U._onitemmousedown);=0A=
				}=0A=
			}=0A=
		}=0A=
		if(hl) =
$(a).find("*").andSelf().filter('[nodeType=3D1]').attr("unselectable","on=
");=0A=
		o.elems[i]=3Del;=0A=
		o.parts.elems[i]=3Da;=0A=
		if(mark) o.parts.marks[i]=3D$(a).find('.u-menumark')[0];=0A=
		if(o.props.horiz && (o.props.rtl || window._rtl))=0A=
			o.parts.content.insertBefore(a,o.parts.content.firstChild);=0A=
			else=0A=
			o.parts.content.appendChild(a);=0A=
	},=0A=
	calc_size: function(o) {=0A=
		var w=3D0,h=3D0,hm=3D0,prevm=3D0;=0A=
		if(!o.props.horiz) {=0A=
			for(var i=3D0;i<o.parts.elems.length;i++) {=0A=
				=
w=3DMath.max(w,Math.max(o.parts.elems[i].offsetWidth,o.parts.elems[i].scr=
ollWidth));=0A=
				=
hm+=3DMath.max(prevm,parseInt('0'+$(o.parts.elems[i]).css('margin-top')))=
;=0A=
				prevm=3DparseInt('0'+$(o.parts.elems[i]).css('margin-bottom'));=0A=
				h+=3Do.parts.elems[i].offsetHeight;=0A=
			}=0A=
			h+=3Dhm+prevm;=0A=
		} else {  //horiz=0A=
			for(var i=3D0;i<o.parts.elems.length;i++) {=0A=
				=
w+=3DMath.max(o.parts.elems[i].offsetWidth,o.parts.elems[i].scrollWidth);=0A=
				h=3DMath.max(h,o.parts.elems[i].offsetHeight);=0A=
			}=0A=
		}=0A=
		return {w:w,h:h};=0A=
	},=0A=
	_onitemhl: function(e,st) {=0A=
		if(st) $(this).addClass("u-menuitemhl");=0A=
			else $(this).removeClass("u-menuitemhl");=0A=
	}=0A=
    }	=0A=
};=0A=
_uMENU._onitemmouseover=3Dfunction(e) {=0A=
		var d=3De.data;=0A=
=0A=
		var prev=3Dd.obj.hlitem,it,hl;=0A=
		if(prev>=3D0 && prev!=3Dd.item) { //unhighlight previous item=0A=
			it=3Dd.obj.elems[prev];=0A=
			if(it && it[0]!=3D'sep') {=0A=
				hl=3Dd.obj.props.highlight;=0A=
				if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
				if(hl) {=0A=
					d.obj.design._onitemhl.apply(d.obj.parts.elems[prev],[null,0]);=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
=0A=
		if(d.hl) d.obj.design._onitemhl.apply(this,[e,1]);=0A=
		d.obj.hlitem=3Dd.item;=0A=
		if(d.obj.hidetimer) clearTimeout(d.obj.hidetimer); =
d.obj.hidetimer=3Dnull;=0A=
		if(d.item>=3D0)if(!d.obj.props.horiz || =
d.obj._focus.isactive())d.obj.schedule_childopen(d.item);=0A=
};=0A=
_uMENU._onitemmouseout=3Dfunction(e) {=0A=
		var d=3De.data,it;=0A=
		//that that we do not have opened child=0A=
		if(d.hl) {=0A=
			if(d.obj.props.statical && d.obj._focus.isactive()) return; //do not =
blur active static menus=0A=
			if(d.item=3D=3Dd.obj.hlitem && d.item>=3D0) {=0A=
				it=3Dd.obj.elems[d.item];=0A=
				if(it && it[1] && it[1].constructor=3D=3D_uMENU && =
it[1].state.visible) return; //do not blur active submenu=0A=
				d.obj.design._onitemhl.apply(this,[e,0]);=0A=
				d.obj.hlitem=3D-1;=0A=
			}=0A=
		}=0A=
//		d.obj.reset_childopen();=0A=
};=0A=
_uMENU._onitemclick=3Dfunction(e) {=0A=
		var d=3De.data,act=3Dd.itemobj[1] || d.itemobj[2].action || =
d.obj.props.onitem;=0A=
		if(!d.child && act) {=0A=
			if(!d.obj.props.statical)d.obj.hide(true);else d.obj.hidechildren();=0A=
			if(act.constructor=3D=3DFunction) {=0A=
				act.apply(d.itemobj[2].thispar || =
d.obj.props.thispar,[d.item,d.obj,d.itemobj[2].id,d.itemobj[2],e]);=0A=
			} =0A=
			else if(act=3D=3D'a') {=0A=
				var l=3Dnull;=0A=
			    if(this=3D=3De.target || e.target.tagName.toLowerCase()!=3D'a') {=0A=
					if(this!=3De.target) { //check that we do not have tag-A parent=0A=
						var =
c1=3D$(e.target).find('*').andSelf(),c2=3D$(this).find('*').not(c1);=0A=
						if(c2.filter("A").length=3D=3D0) l=3D$(this).find("a")[0];=0A=
							else l=3Dnull;=0A=
					} else l=3D$(this).find("a")[0];=0A=
					if(l) {=0A=
						this.target=3Dl.target;=0A=
						this.href=3Dl.href;=0A=
						if(l.onclick) return l.onclick();=0A=
					}=0A=
				}=0A=
				if(!l){=0A=
					this.removeAttribute('href');=0A=
				}=0A=
			}=0A=
			return;=0A=
		}=0A=
		if(!d.child) return;=0A=
//		_uMENU.ignoreclick=3Dd.child;=0A=
		d.obj.reset_childopen();=0A=
		d.obj.hidechildren(d.child);=0A=
		if(d.obj.props.horiz && d.child.state.visible) =
{d.child.hide();d.obj._focus.deactivate();}=0A=
			else=0A=
		if(!d.child.state.visible)// d.child.hide();=0A=
//			else =0A=
			d.obj.childopen(d.item);=0A=
};=0A=
_uMENU._onitemmousedown=3Dfunction(e) {=0A=
		var d=3De.data,actl=3Dd.actl || d.obj.props.onldown,actr=3Dd.actr || =
d.obj.props.onrdown;=0A=
		if(e.which=3D=3D1 && e.ctrlKey) e.which=3D3;=0A=
		if(e.which=3D=3D1 && actl) {=0A=
			_uWnd.globalmousedown();=0A=
			actl.apply(d.itemobj[2].thispar || =
d.obj.props.thispar,[d.item,d.obj,d.itemobj[2].id,d.itemobj[2],e]);=0A=
			e.stopPropagation();=0A=
		} else if(e.which=3D=3D3 && actr) {=0A=
//			_uWnd.globalmousedown();=0A=
			actr.apply(d.itemobj[2].thispar || =
d.obj.props.thispar,[d.item,d.obj,d.itemobj[2].id,d.itemobj[2],e]);=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
		}=0A=
};=0A=
//hides all non-statical menus which are visible except for 'exc' and =
its parents=0A=
_uMENU.hideallmenus=3Dfunction() { //optional exception=0A=
	var i,m,ig;=0A=
loop:=0A=
	for(i=3D0;i<_uMENU.all.length;i++) {=0A=
		m=3D_uMENU.all[i];=0A=
		if(!m || !m.state.visible) continue;=0A=
		if(m.props.statical) {m._focus.deactivate();continue;}=0A=
		ig=3D_uMENU.ignoreclick;=0A=
		while(ig) {=0A=
			if(ig=3D=3Dm) continue loop;=0A=
			ig=3Dig.pos.parent;=0A=
		}=0A=
		m.hide();=0A=
	}=0A=
	if(_uMENU.ignoreclick)setTimeout("_uMENU.ignoreclick=3Dnull;",10);=0A=
};=0A=
_uMENU._onmenumousedown=3Dfunction(e) {=0A=
//	if(!_uMENU.ignoreclick)_uMENU.ignoreclick=3De.data;=0A=
	if(e.data.props.wnd) e.data.props.wnd.activate(e,1);=0A=
	if(e.which=3D=3D1 && e.ctrlKey) e.which=3D3;=0A=
	if(e.which=3D=3D3 && e.data.props.horiz) return;=0A=
	e.stopPropagation();=0A=
};=0A=
_uMENU.prototype=3D{=0A=
	onfocusdeactivate: function() {=0A=
		if(this.props.statical) { //unhighlight previous item=0A=
			var prev=3Dthis.hlitem,it,hl;=0A=
			if(prev>=3D0) { =0A=
				it=3Dthis.elems[prev];=0A=
				if(it && it[0]!=3D'sep') {=0A=
					hl=3Dthis.props.highlight;=0A=
					if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
					if(hl) {=0A=
						this.design._onitemhl.apply(this.parts.elems[prev],[null,0]);=0A=
					}=0A=
				}=0A=
			}=0A=
		} else {=0A=
			this.hide();=0A=
		}=0A=
	},=0A=
	onkeydown: function(e,un,t) {=0A=
		var k=3De.keyCode,n,cur,it,hl,prev,i,delta;=0A=
		if(k=3D=3D27 && t=3D=3Dthis._focus) { //escape, hide topmost menu=0A=
			if(!this.props.statical) {=0A=
				this.hide();=0A=
				if(this.pos.parent && this.pos.parent.props.statical) //closing =
child of static menu must disable focus of static menu=0A=
					this.pos.parent._focus.deactivate();=0A=
			}=0A=
			else { //this can happen only when static menu was activated by =
opening child and then cursor moved to non-dropdown item of that static =
menu=0A=
				this.hidechildren();=0A=
				this._focus.deactivate();=0A=
			}=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			return 1;=0A=
		}=0A=
		if((k=3D=3D17 || k=3D=3D18) && e.ctrlKey && e.altKey) { //ctrl+alt, =
hide all menus=0A=
//			this.hidechildren();=0A=
//			if(!this.props.statical) this.hide();=0A=
			this._focus.deactivate();=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			return 1;=0A=
		}=0A=
=0A=
		if((k=3D=3D13 || (k=3D=3D40 && this.props.horiz)) && =
t=3D=3Dthis._focus) {//enter=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			if(this.hlitem<0) return 1;=0A=
			cur=3Dthis.hlitem;=0A=
			it=3Dthis.elems[cur];=0A=
			var act=3Dit[1] || it[2].action || this.props.onitem;=0A=
			var actl=3Dit[2].onldown || this.props.onldown;=0A=
			hl=3D0; //whether to hide menu=0A=
			if(act && act.constructor=3D=3D_uMENU) { //submenu, open it=0A=
				this.reset_childopen();=0A=
				this.hidechildren(cur);=0A=
				if(!act.state.visible) this.childopen(cur,0);=0A=
			}  //continue processing in case action of ldown specified=0A=
			else if(it[2].action) act=3Dit[2].action;=0A=
			else if(!act || act.constructor!=3DFunction) act=3Dnull;=0A=
			if(k=3D=3D40) return 1; //DOWN was pressed in horiz menu when no =
popup is opened=0A=
			if(act && act.constructor=3D=3DFunction) { //run main action=0A=
				act.apply(it[2].thispar || =
this.props.thispar,[cur,this,it[2].id,it[2],e]);=0A=
				hl=3D1;=0A=
			} =0A=
			if(actl && actl.constructor=3D=3DFunction) { //run left down action=0A=
				actl.apply(it[2].thispar || =
this.props.thispar,[cur,this,it[2].id,it[2],e]);=0A=
				hl=3D1;=0A=
			}=0A=
			if(hl) =0A=
				if(!this.props.statical) this.hide(1);else this.hidechildren();=0A=
			return 1;=0A=
		}=0A=
		if(k=3D=3D93 && t=3D=3Dthis._focus) {//APP-key=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			if(this.hlitem<0) return 1;=0A=
			cur=3Dthis.hlitem;=0A=
			it=3Dthis.elems[cur];=0A=
			var actr=3Dit[2].onrdown || this.props.onrdown;=0A=
			if(actr && actr.constructor=3D=3DFunction) { //run right down action=0A=
				actr.apply(it[2].thispar || =
this.props.thispar,[cur,this,it[2].id,it[2],e]);=0A=
			}=0A=
			return 1;=0A=
		}=0A=
		if((k=3D=3D37 || k=3D=3D39) && t=3D=3Dthis._focus && =
!this.props.horiz) { //LEFT and RIGHT on vert menus=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			if(k=3D=3D39 && this.hlitem>=3D0) { //right, try to open submenu if =
any=0A=
				cur=3Dthis.hlitem;=0A=
				it=3Dthis.elems[cur];=0A=
				if(it && it[1] && it[1].constructor=3D=3D_uMENU) {=0A=
					this.childopen(cur,0);=0A=
					return 1;=0A=
				}=0A=
			}=0A=
			else if(k=3D=3D37 && this.pos.parent && !this.pos.parent.props.horiz) =
{//left, close submenu if our parent not horiz=0A=
				this.hide();=0A=
				return 1;=0A=
			}=0A=
			//otherwise just give transfer event to horizontal parent=0A=
			it=3Dthis.pos.parent;=0A=
			while(it && !it.props.horiz && it!=3Dthis) it=3Dit.pos.parent;=0A=
			if(it && it.props.horiz) it.onkeydown(e,un,it._focus);=0A=
		}=0A=
		if((k=3D=3D40 || k=3D=3D38 || ((k=3D=3D37 || k=3D=3D39) && =
this.props.horiz)) && t=3D=3Dthis._focus) { //DOWN and UP in vert and =
LEFT RIGHT in horiz=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			if(this.props.horiz && (k=3D=3D40 || k=3D=3D38)) return 1;=0A=
			if(k=3D=3D40 || k=3D=3D39) delta=3D1; //down or right=0A=
				else delta=3D-1;=0A=
			prev=3Dcur=3Dthis.hlitem;=0A=
			n=3Dthis.elems.length;=0A=
			for(i=3D0;i<n;i++) {=0A=
				cur+=3Ddelta;=0A=
				if(cur>=3Dn || cur<0) cur=3Ddelta>0 ? 0 : n-1;=0A=
				it=3Dthis.elems[cur];=0A=
				if(it && it[0]!=3D'sep') {=0A=
					hl=3Dthis.props.highlight;=0A=
					if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
					if(hl) break;=0A=
				}=0A=
			} =0A=
			if(i>=3Dn || prev=3D=3Dcur) return 1; //no movement=0A=
			this.hlitem=3Dcur;=0A=
=0A=
			if(prev>=3D0) { //unhighlight previous item=0A=
				it=3Dthis.elems[prev];=0A=
				if(it && it[0]!=3D'sep') {=0A=
					hl=3Dthis.props.highlight;=0A=
					if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
					if(hl) {=0A=
						this.design._onitemhl.apply(this.parts.elems[prev],[e,0]);=0A=
						this.reset_childopen();=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			//highlight new item=0A=
			this.design._onitemhl.apply(this.parts.elems[cur],[e,1]);=0A=
			if(this.hidetimer) clearTimeout(this.hidetimer); =
this.hidetimer=3Dnull;=0A=
			if(this.props.horiz) this.childopen(cur,0);=0A=
			return 1;=0A=
		}=0A=
	},=0A=
	shadow_init:function() {=0A=
    	this.sh=3Dthis.design.shadow_init(this.top);=0A=
	},=0A=
	_resizeSh:function() {=0A=
	    =
if(this.sh)this.design.shadow_resize(this.sh,this.width,this.height);=0A=
	},=0A=
	moveTo:function(x,y) {=0A=
		with(this) {=0A=
			$(top).css("left",x+'px').css("top",y+'px');=0A=
		    xpos=3Dx;=0A=
    		ypos=3Dy;=0A=
  		}=0A=
	},=0A=
	resizeTo:function(w,h) {=0A=
		with(this) {=0A=
			if(props.width=3D=3D0) $(menu).css("width",w+'px');=0A=
				else if(props.width!=3D'auto') $(menu).css("width",props.width);=0A=
				else $(menu).css("width",'auto');=0A=
			if(props.horiz) {=0A=
				$(menu).css("height",h+'px');=0A=
	    		=
$(parts.content).css("width",(w-decor.w)+'px').css("height",(h-decor.h)+'=
px');=0A=
			} else {=0A=
//			    $(menu).css("width",w+'px');//.css("height",h+'px');=0A=
    			=
$(parts.content).css("width",(w-decor.w)+'px');//.css("height",(h-decor.h=
)+'px');=0A=
				if($.browser.opera) $(top).css("width",w+'px'); //correct bug with =
thin menus=0A=
			}=0A=
//   		$(parts.upper).css("width",w+'px');=0A=
//    		$(parts.upper.firstChild.firstChild).css("width",w+'px');=0A=
		    if(frame) $(frame).css("width",w+'px').css("height",h+'px');=0A=
		    width=3Dw;=0A=
		    height=3Dh;=0A=
		    _resizeSh();=0A=
		}=0A=
	},=0A=
	init1: function(nocalcsize) {=0A=
		with(this) {=0A=
    		decor.w=3D50-parts.content.offsetWidth;=0A=
    		decor.h=3Dmenu.offsetHeight-(props.horiz ? 10 : 50);=0A=
			state.init=3Dtrue;=0A=
//alert('in init of '+this.idx);=0A=
			_initsubmenus();=0A=
			if(add_elems)appendItems(null,0,nocalcsize); =0A=
				else {=0A=
				if(pend_show)show(pend_show);=0A=
				if(props.onreadycreate) props.onreadycreate.call(props.thispar,this);=0A=
				props.onreadycreate=3Dnull;=0A=
//				if(oninit && props.wnd)oninit.apply(props.wnd);=0A=
				}=0A=
  		}=0A=
	},=0A=
	show: function(pos,inititem) {=0A=
		if(this.state.destroyed) return;=0A=
		if(!this.state.init){this.pend_show=3Dpos || {};return;}=0A=
		this.pend_show=3Dnull;=0A=
		this.pos=3D$.extend(this.pos,pos || {});=0A=
		if(this.pos.parent && !this.pos.parent.state.visible) return; =
//children of hidden parent cannot be shown=0A=
		this._focus.deactivate();=0A=
		this._focus._parent=3Dthis.pos.parentfocus ? this.pos.parentfocus : =
(this.pos.parent ? this.pos.parent._focus : (this.props.wnd ? =
this.props.wnd._focus : null));=0A=
	    if(!this.pos.parent) {=0A=
	    	this.zpos=3D_uMENU.defz;=0A=
	    }=0A=
    	else {=0A=
    		this.zpos=3Dthis.pos.parent.zpos+5;=0A=
    	}=0A=
		$(this.top).css("z-index",this.zpos);=0A=
		if(this.pos.pos || this.pos.alignObj) {=0A=
			var a,pos,ow,oh;=0A=
//			this.moveTo(this.pos.pos.x,this.pos.pos.y);=0A=
			if(this.pos.alignObj) {=0A=
				a=3Dthis.pos.alignObj;=0A=
				pos=3D$(a).offset();=0A=
				ow=3Da.offsetWidth;=0A=
				oh=3Da.offsetHeight;=0A=
			} else {=0A=
				pos=3D{left:this.pos.pos.x,top:this.pos.pos.y};=0A=
				ow=3Doh=3D0;=0A=
			}=0A=
		        var ppos,x,y,=0A=
		        	=
d=3D_uWnd.getdims(),ww=3Dd.clientW,wh=3Dd.clientH,wl=3Dd.clientLeft,wt=3D=
d.clientTop,=0A=
		        	al=3Dthis.pos.align || 'd';=0A=
				if(this.props.wnd && this.props.wnd.desktop) {=0A=
					d=3Dthis.props.wnd.desktop;=0A=
					ww=3Dd.width;=0A=
					wh=3Dd.height;=0A=
					wl=3D0;=0A=
					wt=3D0;=0A=
				}=0A=
				if(this.props.rtl || window._rtl) =
x=3Dpos.left+ow+this.pos.dx-this.width;=0A=
					else=0A=
					x=3Dpos.left+this.pos.dx;=0A=
				y=3Dpos.top+this.pos.dy;=0A=
=0A=
				if(al=3D=3D'r' || al=3D=3D'R') x=3Dpos.left+ow+this.pos.dx;=0A=
					else if(al=3D=3D'l' || al=3D=3D'L') =
x=3Dpos.left-this.width+this.pos.dx;=0A=
					else if(al=3D=3D'd' || al=3D=3D'D') y=3Dpos.top+oh+this.pos.dy;=0A=
					else if(al=3D=3D'u' || al=3D=3D'U') =
y=3Dpos.top-this.height+this.pos.dy;=0A=
				if(x-wl+this.width>ww-3-this.design.sh_sz[0] || x-wl<1)=0A=
					if(al=3D=3D'R' || al=3D=3D'U') x=3Dpos.left-this.width-this.pos.dx;=0A=
						else if(al=3D=3D'L') x=3Dpos.left+ow-this.pos.dx;=0A=
				if(x-wl+this.width>ww-3) x=3Dww-3-this.design.sh_sz[0]-this.width+wl;=0A=
				if(x-wl<1) x=3D1+wl;=0A=
=0A=
				if(y-wt+this.height>wh-3-this.design.sh_sz[1] || y-wt<1)=0A=
					if(al=3D=3D'D') y=3Dpos.top-this.height-this.pos.dy;=0A=
						else if(al=3D=3D'U') y=3Dpos.top+oh-this.pos.dy;=0A=
				if(y-wt+this.height>wh-3) =
y=3Dwh-3-this.design.sh_sz[1]-this.height+wt;=0A=
				if(y-wt<1) y=3D1+wt;=0A=
=0A=
		        if(this.props.parentnode){=0A=
		        	ppos=3D$(this.props.parentnode).offset();=0A=
		        	x-=3Dppos.left;=0A=
		        	y-=3Dppos.top;=0A=
		        }=0A=
        		this.moveTo(x,y);=0A=
			}=0A=
    	if(this.props.onshow) =
this.props.onshow.apply(this.props.thispar,[this,this.idx]);=0A=
		//check marks=0A=
		if(this.props.withmarks) {=0A=
			for(var i=3D0;i<this.elems.length;i++) {=0A=
				var c=3Dthis.elems[i];=0A=
				if(c && c[2] && this.parts.marks[i]) {=0A=
					if(!c[2].mark) this.parts.marks[i].style.display=3D'none';=0A=
						else {=0A=
							var m=3Dc[2].marktext || this.props.withmarks;=0A=
							if(typeof m=3D=3D'object' && m.constructr!=3DString) =
m=3Dm[c[2].mark];=0A=
							this.parts.marks[i].innerHTML=3DString(m);=0A=
							this.parts.marks[i].style.display=3D'block';=0A=
						}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		if(!this.props.statical && this.hlitem>=3D0) { //unhighlight previous =
item=0A=
			var	it=3Dthis.elems[this.hlitem];=0A=
			if(it && it[0]!=3D'sep') {=0A=
				var hl=3Dthis.props.highlight;=0A=
				if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
				if(hl) {=0A=
					this.design._onitemhl.apply(this.parts.elems[this.hlitem],[null,0]);=0A=
				}=0A=
			}=0A=
			this.hlitem=3D-1;=0A=
		}=0A=
		$(this.top).show();=0A=
		this.state.visible=3Dtrue;=0A=
//		if(this.pos.parent) =0A=
		if(!this.props.statical) {=0A=
			this._focus.activate();//this.pos.parent.have_active=3Dthis;=0A=
		}=0A=
		if(typeof inititem!=3Dundefined && Number(inititem)!=3DNaN) {=0A=
			var a=3DNumber(inititem);=0A=
			if(a>=3D0 && a<this.elems.length) {=0A=
				var	it=3Dthis.elems[a];=0A=
				if(it && it[0]!=3D'sep') {=0A=
					var hl=3Dthis.props.highlight;=0A=
					if(it[2].hl!=3Dundefined) hl=3Dit[2].hl;=0A=
					if(hl) {=0A=
						this.design._onitemhl.apply(this.parts.elems[a],[null,1]);=0A=
						this.hlitem=3Da;=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
		if(this.props.hidetimer>0) this.hidetimer=3DsetTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m)m.hide();",this.props.hidetimer);=0A=
	},=0A=
	hidechildren: function(except) {=0A=
		if(this.state.destroyed) return;=0A=
		var e=3Dthis.elems;=0A=
		for(var i=3D0;i<e.length;i++)=0A=
			if(e[i] && e[i].constructor=3D=3DArray && e[i][1] && =
e[i][1].constructor=3D=3D_uMENU) if(e[i][1]!=3Dexcept) e[i][1].hide();=0A=
	},=0A=
	hide: function(withpar) {=0A=
		if(this.state.destroyed) return;=0A=
		if(!this.state.visible) return;=0A=
		$(this.top).hide();=0A=
		this.state.visible=3Dfalse;=0A=
		if(this.hidetimer) clearTimeout(this.hidetimer); this.hidetimer=3Dnull;=0A=
=0A=
		this.pend_show=3Dnull;=0A=
		this.hidechildren();=0A=
//		if(this.pos.parent && this.pos.parent.have_active=3D=3Dthis) =
this.pos.parent.have_active=3Dnull;=0A=
    	if(this.props.onhide) =
this.props.onhide.apply(this.props.thispar,[this,this.idx]);=0A=
		this._focus.deactivate();=0A=
		=0A=
		if(withpar) { //hide all non-statical parents=0A=
			var p=3Dthis.pos.parent;=0A=
			while(p && !p.props.statical && p!=3Dthis) =
{p.hide(false);p=3Dp.pos.parent;}=0A=
			if(p && p!=3Dthis && p.props.statical) p._focus.deactivate();=0A=
		} =0A=
	},=0A=
	childopen: function(i,inititem) {=0A=
		if(this.state.destroyed) return;=0A=
		if(this.childtimer) clearTimeout(this.childtimer);=0A=
		this.childtimer=3Dnull;=0A=
		var h=3Dthis.parts.elems[i];=0A=
		var c=3Dthis.elems[i];=0A=
		if(!c) return;=0A=
		c=3Dc[1];=0A=
		if(!c || c.constructor!=3D_uMENU) {=0A=
//			if(this.props.horiz || 1) =
{this.hidechildren(c);this.have_active=3Dthis;}=0A=
			this.hidechildren(c);=0A=
			return;=0A=
		}=0A=
		this.hidechildren(c);=0A=
		c.show({dx:(this.props.horiz ? 0 : -3 * (this.props.rtl || window._rtl =
? -1 : 1)),alignObj:h,align:(this.props.horiz ? 'D' : (this.props.rtl || =
window._rtl ? 'L' : 'R')),parent:this},inititem);=0A=
	},=0A=
	schedule_childopen: function(i) {=0A=
		if(this.state.destroyed) return;=0A=
		if(this.childtimer) clearTimeout(this.childtimer);=0A=
		this.childtimer=3DsetTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m)m.childopen("+i+");",100);=0A=
	},=0A=
	reset_childopen: function() {=0A=
		if(this.childtimer) clearTimeout(this.childtimer);=0A=
	},=0A=
	_initsubmenus: function() {=0A=
	  with(this) {=0A=
		for(var i=3D0;i<toinit.length;i++) =
{toinit[i].init1(true);tocalcsize[tocalcsize.length]=3Dtoinit[i];}=0A=
		toinit.length=3D0;=0A=
	  }=0A=
	},=0A=
	_calcsizesubmenus: function() {=0A=
	  with(this) {=0A=
		for(var i=3D0;i<tocalcsize.length;i++) tocalcsize[i]._setsize();=0A=
		tocalcsize.length=3D0;=0A=
	  }=0A=
	},=0A=
	createsubmenus: function() {=0A=
		var i,was=3Dfalse;=0A=
		for(i=3D0;i<this.add_elems.length;i++) {=0A=
			var el=3Dthis.add_elems[i];=0A=
			var n=3Del.length;=0A=
			for(var j=3D0;j<n;j++) {=0A=
				if(el[j] && el[j].constructor=3D=3DArray && el[j][1] && =
el[j][1].constructor=3D=3DArray) { //create submenu=0A=
					var o=3D{},pos,opts,s;=0A=
					if(el[j][2] && (typeof el[j][2])=3D=3D'object') o=3Del[j][2];=0A=
						else if((typeof el[j][2])=3D=3D'number') o=3D{hl:el[j][2]};=0A=
						else if((typeof el[j][2])=3D=3D'string') o=3D{id:el[j][2]};=0A=
					el[j][2]=3Do;=0A=
					pos=3D$.extend({=0A=
						parent:this,=0A=
						dx:this.props.horiz ? this.pos.childdx : 0,=0A=
						dy:this.props.horiz ? this.pos.childdy : 0=0A=
						},o.pos || {});=0A=
					opts=3D$.extend({=0A=
						shadow:this.props.shadow,=0A=
						rtl:this.props.rtl ? 1 : 0,=0A=
						parentnode:this.props.wnd ? this.props.wnd.top : =
this.props.parentnode,=0A=
						wnd:this.props.wnd,=0A=
						onitem: this.props.onitem,=0A=
						thispar: this.props.thispar=0A=
						},o.opts || {});=0A=
					s=3Dnew _uMENU('',pos,opts,el[j][1],true);=0A=
					el[j][1]=3Ds;=0A=
					this.toinit[this.toinit.length]=3Ds;=0A=
					was=3Dtrue;=0A=
				}=0A=
			}=0A=
		}=0A=
		return was;=0A=
	},=0A=
	indexById: function(id) { //find index by string id=0A=
		id=3DString(id);=0A=
		for(var i=3D0;i<this.elems.length;i++)=0A=
			if(this.elems[i][2].id=3D=3Did) return i;=0A=
		return -1;=0A=
	},=0A=
	removeItems: function(idx,nodestroy,norecalc) {=0A=
		var i,p,e;=0A=
		if(idx=3D=3Dundefined || idx=3D=3Dnull) { //remove all=0A=
			idx=3D[];=0A=
			for(i=3D0;i<this.elems.length;i++)idx[i]=3Dthis.elems.length-1-i;=0A=
		} else if(idx.constructor!=3DArray) idx=3D[idx];=0A=
		for(i=3D0;i<idx.length;i++)=0A=
			if(idx[i]=3D=3Dundefined || idx[i]=3D=3Dnull || =
idx[i].constructor!=3DNumber) idx[i]=3Dthis.indexById(idx[i]);=0A=
		idx.sort(function(a,b){return b-a;});=0A=
		p=3D-1;=0A=
		for(i=3D0;i<idx.length;i++) {=0A=
			if(idx[i]=3D=3Dp || idx[i]<0 || idx[i]>=3Dthis.elems.length) continue;=0A=
			e=3Dthis.elems[idx[i]];=0A=
			if(!nodestroy && e && e.constructor=3D=3DArray && e[1] && =
e[1].constructor=3D=3D_uMENU) e[1].destroy();=0A=
			this.elems.splice(idx[i],1);=0A=
			=
this.parts.elems[idx[i]].parentNode.removeChild(this.parts.elems[idx[i]])=
;=0A=
			this.parts.elems.splice(idx[i],1);=0A=
			p=3Didx[i];=0A=
		}=0A=
		if(!norecalc) this.appendItems(null,0);=0A=
	},	=0A=
	appendItems: function(el,idx,nocalcsize) {=0A=
		if(this.state.destroyed) return;=0A=
		if(el && el.constructor=3D=3DArray && =
el.length>0)this.add_elems[this.add_elems.length]=3Del;=0A=
		if(!this.state.init)return;=0A=
//alert('in appendItems of '+this.idx);=0A=
		if(this.createsubmenus()) { //=0A=
			setTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m){m._initsubmenus();m.appendItems(null,0=
,"+nocalcsize+");}",10);=0A=
			return;=0A=
		}=0A=
=0A=
		if(this.appendtimer)clearTimeout(this.appendtimer);=0A=
		this.appendtimer=3Dnull;=0A=
   		$(this.top).css("visibility",'hidden').css("display",'block');=0A=
		if(this.props.horiz) {=0A=
			if(!this.props.noabs) =
$(this.menu).css("width","2100px").css("height","auto");=0A=
				else $(this.menu).css("width",this.props.width=3D=3D0 ? "auto" : =
this.props.width=3D=3D'auto' ? 'auto' : this.props.width+"px");=0A=
   			$(this.parts.content).css("width","2000px").css("height","auto");=0A=
   		} else {=0A=
	    	if($.browser.opera) $(this.top).css('width','2000px');=0A=
	   		$(this.menu).css("width","auto").css("height","auto");=0A=
   			$(this.parts.content).css("width",$.browser.msie ? "50px" : =
"auto").css("height","auto");=0A=
   		}=0A=
		var i;=0A=
		for(i=3D0;i<this.add_elems.length;i++) {=0A=
			el=3Dthis.add_elems[i];=0A=
			var n=3Del.length;=0A=
			for(var j=3D0;j<n;j++) {=0A=
				if(!el[j] || el[j].constructor!=3DArray) el[j]=3D[''+el[j]];=0A=
				var o=3D{};=0A=
				if(el[j][2] && (typeof el[j][2])=3D=3D'object') o=3Del[j][2];=0A=
					else if((typeof el[j][2])=3D=3D'number') o=3D{hl:el[j][2]};=0A=
					else if((typeof el[j][2])=3D=3D'string') o=3D{id:el[j][2]};=0A=
				el[j][2]=3Do;=0A=
				this.design.append_item(this,el[j],this.props.highlight);=0A=
			}=0A=
		}=0A=
		this.add_elems.splice(0,i);=0A=
//		if(onfinish && this.props.wnd)this.onsetsize=3Donfinish;=0A=
		if(!nocalcsize)this.appendtimer=3DsetTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m){m.appendtimer=3Dnull;m._setsize();}",1=
0);=0A=
	},=0A=
	_setsize: function() {=0A=
		var d=3Dthis.design.calc_size(this);=0A=
		this.resizeTo(d.w+this.decor.w,d.h+this.decor.h);=0A=
=0A=
//alert('in setsize of '+this.idx);=0A=
		this._calcsizesubmenus();=0A=
=0A=
   		$(this.top).css("display",'none').css("visibility",'visible');=0A=
		if(this.pend_show || this.state.visible)this.show(this.pend_show);=0A=
//	alert('setsize');=0A=
		if(this.props.onreadycreate) =
{this.props.onreadycreate.call(this.props.thispar,this);this.props.onread=
ycreate=3Dnull;}=0A=
		if(this.onsetsize) {=0A=
			var a=3Dthis.onsetsize;=0A=
			this.onsetsize=3Dnull;=0A=
			if(this.props.wnd)a.apply(this.props.wnd);=0A=
		}=0A=
	},=0A=
	destroy: function() {=0A=
		if(this.state.destroyed) return;=0A=
		this.removeItems();=0A=
	    this.top.parentNode.removeChild(this.top);=0A=
	    _uMENU.all[this.idx]=3Dnull;=0A=
	    this._focus.destroy();=0A=
	    this.state.destroyed=3Dtrue;=0A=
    	if(this.props.ondestroy) =
this.props.ondestroy.apply(this.props.thispar,[this,this.idx]);=0A=
	}=0A=
};=0A=
//inputId - input ID or object=0A=
//vals - =
[[val1,icon1,issel1,text11,text12,...],[val2,icon2,issel2,text21,text22,.=
..]] =0A=
//cols - number of text columns (0 if valX is used as displayed text), =
place for icons is reserved always=0A=
function _uComboBox(name,inputId,opts,cols,vals) {=0A=
	this.constructor=3D_uComboBox;=0A=
	this.name=3Dname;=0A=
	this.obj=3DinputId && inputId.tagName ? inputId : =
document.getElementById(inputId);=0A=
	if(!this.obj) return null;=0A=
	this.props=3D$.extend({=0A=
//		parentnode: null, //parent node for drop-down list=0A=
		design: 'std',=0A=
		readonly: false,=0A=
		noicons: -1,=0A=
		deficon: null,=0A=
		listwidth: 'auto',=0A=
//		height: 'auto',=0A=
		maxlistheight: 'auto',=0A=
		colwidth: null,=0A=
//		hidden: 0,=0A=
//		onshow: null,=0A=
//		onhide: null,=0A=
//		ondestroy: null,=0A=
		onchange: null,=0A=
		wnd:null, //parent window determines parentnode for list and this (as =
wnd.app) for handlers=0A=
		rtl:0=0A=
	},opts || {});=0A=
	this.app=3Dthis.props.wnd && this.props.wnd.app ? this.props.wnd.app : =
null;=0A=
	this.textvals=3Dcols > 0 ? cols : 0;=0A=
	this.tablecols=3Dcols<=3D0 ? 1 : cols;=0A=
	this.colwidth=3Dthis.props.colwidth || [];=0A=
	this.destroyed=3Dfalse;=0A=
    this.design=3Dthis.props.design && =
_uComboBox.designs[this.props.design] ? =
_uComboBox.designs[this.props.design] : _uComboBox.designs['std'];=0A=
    this.idx=3D_uComboBox.nextidx++;=0A=
    _uComboBox.all[this.idx]=3Dthis;=0A=
//    if(this.props.width=3D=3D'auto') {=0A=
//    	this.width=3Dthis.obj.offsetWidth || =
parseInt(this.obj.style.width);=0A=
//    	if(!this.width>0) this.width=3D100;=0A=
//    } else this.width=3Dthis.props.width;=0A=
//    if(this.props.height=3D=3D'auto') {=0A=
//    	this.height=3Dthis.obj.offsetHeight || =
parseInt(this.obj.style.height);=0A=
//    	if(!this.height>0) this.height=3D100;=0A=
//    } else this.height=3Dthis.props.height;=0A=
//	this.zpos=3Dthis.props.wnd ? 5 : _uComboBox.defz;=0A=
	this.data=3D[];=0A=
	if(!vals) vals=3D[];=0A=
	var defIdx=3D-1;=0A=
	for(var i=3D0;i<vals.length;i++) {=0A=
		if(defIdx<0 && vals[i][2]) defIdx=3Di;=0A=
	}=0A=
	this.userInput=3Dthis.prevInput=3Dthis.obj.value; =0A=
	if(this.props.readonly) {=0A=
		this.obj.readOnly=3Dtrue;=0A=
		this.valobj=3D$('<input type=3D"hidden" name=3D"'+this.obj.name+'" =
value=3D"">')[0];=0A=
		this.obj.removeAttribute('name');=0A=
		if(this.obj.form) this.obj.form.appendChild(this.valobj);=0A=
		if(defIdx<0 || defIdx>=3Dvals.length) defIdx=3D0;=0A=
	} else {=0A=
		this.obj.readOnly=3Dfalse;=0A=
		this.valobj=3Dthis.obj; //object which holds form value=0A=
		if(defIdx<0 || defIdx>=3Dvals.length) defIdx=3D-1;=0A=
	}=0A=
	this.selected=3Dthis.userIdx=3DdefIdx;=0A=
	this.changetimer=3Dnull;=0A=
=0A=
=0A=
	this.haveicons=3Dthis.props.noicons>0;=0A=
	if(this.props.noicons<0) =0A=
		for(var i=3D0;i<vals.length;i++) =0A=
			if(vals[i][1]) {this.haveicons=3Dtrue;break;}=0A=
=0A=
=0A=
	this.frame=3Dnull;=0A=
	this.opened=3Dfalse;=0A=
	this.updated=3Dtrue;=0A=
	this.showtimer=3Dnull;=0A=
	this.blurtimer=3Dnull;=0A=
	this.cancelblur=3Dfalse;=0A=
//	var c=3Ddocument.createElement("div");=0A=
//	c.id=3D"_ucombo"+this.idx;=0A=
//	this.obj.parentNode.insertBefore(c,this.obj);=0A=
	this.combo=3Dnull;=0A=
=0A=
	var t=3Ddocument.createElement("div");=0A=
	t.id=3D"_ucombolist"+this.idx;=0A=
//	this.combo.appendChild(t);=0A=
//	if(!this.props.parentnode) $($("body")[0]).prepend(t);=0A=
//		else this.props.parentnode.appendChild(t);=0A=
	this.toplist=3Dt;=0A=
=0A=
   	=
$(t).css({position:'absolute',zIndex:5,display:'none'});//zIndex:this.zpo=
s,=0A=
    if($.browser.msie && parseFloat($.browser.version)<8){=0A=
		    var html =3D '<iframe tabindex=3D"-1" '=0A=
    		    +'style=3D"display:block; position:absolute; '=0A=
			+'filter:Alpha(Opacity=3D\'0\'); '=0A=
			+'width:1px;height:1px;border:0"/>';=0A=
=0A=
	    	this.frame=3Ddocument.createElement(html);=0A=
			t.appendChild(this.frame);=0A=
	}=0A=
=0A=
    this.parts=3Dthis.design.combo_init(this);=0A=
    $(this.obj).attr("autocomplete", "off")=0A=
	.bind("focus",this,_uComboBox._onobjfocus)=0A=
	.bind("blur",this,_uComboBox._onobjblur)=0A=
	.bind("beforedeactivate",this,_uComboBox._onobjdeact)=0A=
	.bind("keydown",this,function(e) {return e.data.onkeydown(e);})=0A=
	.bind("keyup",this,function(e) {return e.data.onkeyup(e);});=0A=
=0A=
	$(this.combo).bind("mousedown",this,_uComboBox._oncombomousedown);=0A=
	$(this.toplist).bind("mousedown",this,_uComboBox._onlistmousedown);=0A=
    for(var i=3D0;i<vals.length;i++) this.appendItem(vals[i]);=0A=
	if(!_uComboBox.globalset) {=0A=
		_uComboBox.globalset=3Dtrue;=0A=
	    $(document).bind("mousedown",_uComboBox.hideall);=0A=
	    $(window).bind("resize",_uComboBox.hideall);=0A=
	}=0A=
	if(defIdx>=3D0) this.select(defIdx,false,true);=0A=
//	setTimeout("var =
m=3D_uComboBox.all["+this.idx+"];if(m)m.showlist();",10);=0A=
//	this.showlist();=0A=
//	if(!this.props.hidden) this.show();=0A=
//	if(!noinit)setTimeout("var =
m=3D_uMENU.all["+this.idx+"];if(m)m.init1();",10);=0A=
}=0A=
=0A=
=0A=
_uComboBox.all=3D[];=0A=
_uComboBox.nextidx=3D0;=0A=
_uComboBox.defz=3D20015;=0A=
_uComboBox.globalset=3Dfalse;=0A=
_uComboBox.ignoreclick=3Dnull;=0A=
=0A=
_uComboBox.getbyname=3Dfunction(name) {=0A=
    var a=3Dthis.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && a[i].name=3D=3Dname) return =
a[i];=0A=
    return null;=0A=
};=0A=
_uComboBox.hideall=3Dfunction() {=0A=
    var a=3D_uComboBox.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && !a[i].destroyed && =
_uComboBox.ignoreclick!=3Da[i]) a[i].hidelist();=0A=
	=
if(_uComboBox.ignoreclick)setTimeout("_uComboBox.ignoreclick=3Dnull;",10)=
;=0A=
};=0A=
_uComboBox.designs=3D{=0A=
    std: {=0A=
	combo_init: function(o) {=0A=
	    var p=3D{};=0A=
		o.combo=3D$('<table id=3D"_ucombo'+o.idx+'" =
style=3D"position:relative" cellspacing=3D"0" cellpadding=3D"0" =
border=3D"0" class=3D"x-unselectable u-combo" align=3D"left">'=0A=
				+'<tr><td class=3D"u-comboeditcell"></td><td =
class=3D"u-combobutcell"><div class=3D"u-combobut"></td></tr>'=0A=
				+'</table>')[0];=0A=
		o.obj.parentNode.insertBefore(o.combo,o.obj);=0A=
		if(!o.props.wnd) o.obj.parentNode.insertBefore(o.toplist,o.obj);=0A=
			else o.props.wnd.top.appendChild(o.toplist);=0A=
//		$(o.combo).attr("class","x-unselectable =
u-combo").css({position:'relative'}).prepend('<img border=3D"0" =
class=3D"u-combobut" src=3D"http://src.ucoz.net/img/1px.gif">');=0A=
		p.editcell=3D$(o.combo).find(".u-comboeditcell")[0];=0A=
		p.button=3D$(o.combo).find(".u-combobut")[0];=0A=
		p.butcell=3D$(o.combo).find(".u-combobutcell")[0];=0A=
		p.editcell.appendChild(o.obj);=0A=
		$(o.obj).attr("class","x-selectable u-comboedit"+(o.haveicons ? " =
u-comboeditimg" : "")+" "+$(o.obj).attr("class"));=0A=
//		if($.browser.msie) =
$(o.obj).css({marginTop:'-1px',marginBottom:'-1px'});=0A=
=0A=
	    $(o.toplist).append('<div class=3D"u-combolist"><div =
style=3D"zoom:1"><table border=3D"0" cellspacing=3D"0" =
class=3D"x-unselectable u-combocont" =
width=3D"100%"></table></div></div>');=0A=
		p.list=3D$(o.toplist).find(".u-combolist")[0];=0A=
		p.content=3D$(o.toplist).find(".u-combocont")[0];=0A=
=0A=
		if(!o.props.readonly) =
$(p.button).bind("mousedown",o,_uComboBox._onbutclick);=0A=
			else {=0A=
				$(o.obj).bind("mousedown",function(e){e.preventDefault();return 0;});=0A=
			}=0A=
		=
$(p.button).bind("mouseover",o.design._onbutmouseover).bind("mouseout",o.=
design._onbutmouseout);=0A=
=0A=
		p.items=3D[];=0A=
		=
$(o.toplist).find("div,span,table").andSelf().attr("unselectable","on");=0A=
	    return p;=0A=
	},=0A=
	append_item: function(o,el) {=0A=
		var row,cell,t=3Do.parts.content,i=3Dt.rows.length,txt;=0A=
		row=3Do.parts.items[i]=3Dt.insertRow(i);=0A=
		=
$(row).attr("class","u-comborow").bind("mouseover",o,_uComboBox._onitemmo=
useover).bind("mouseout",o,_uComboBox._onitemmouseout)=0A=
			.bind("click",o,_uComboBox._onitemclick);=0A=
		for(var j=3D0;j<o.tablecols;j++) {=0A=
			cell=3Drow.insertCell(j);=0A=
			txt=3D j+3<el.length ? el[j+3] : (j=3D=3D0 ? el[0] : '&nbsp;');=0A=
			if(j=3D=3D0 && el[1]) txt=3D'<img class=3D"u-comborowicon" =
border=3D"0" src=3D"'+el[1]+'">'+txt;=0A=
			$(cell).attr("class","u-combocell"+j).html(txt);=0A=
			if(o.colwidth[j]) $(cell).attr("width",o.colwidth[j]);=0A=
		}=0A=
		$(row).find("*").andSelf().attr("unselectable","on");=0A=
	},=0A=
	remove_item: function(o,i) {=0A=
		var t=3Do.parts.content;=0A=
		if(i<0 || i>=3Dt.rows.length) return;=0A=
		$(t.rows[i]).unbind();=0A=
		o.parts.items.splice(i,1);=0A=
		t.deleteRow(i);=0A=
	},=0A=
	calc_size: function(o) {=0A=
		var w=3D0,h=3D0;=0A=
		if(!o.props.horiz) {=0A=
			for(var i=3D0;i<o.parts.elems.length;i++) {=0A=
				=
w=3DMath.max(w,Math.max(o.parts.elems[i].offsetWidth,o.parts.elems[i].scr=
ollWidth));=0A=
				h+=3Do.parts.elems[i].offsetHeight;=0A=
			}=0A=
		} else {  //horiz=0A=
			for(var i=3D0;i<o.parts.elems.length;i++) {=0A=
				=
w+=3DMath.max(o.parts.elems[i].offsetWidth,o.parts.elems[i].scrollWidth);=0A=
				h=3DMath.max(h,o.parts.elems[i].offsetHeight);=0A=
			}=0A=
		}=0A=
		return {w:w,h:h};=0A=
	},=0A=
	_onitemmouseover: function(e) {=0A=
		$(this).addClass("u-comborowhl");=0A=
	},=0A=
	_onitemmouseout: function(e) {=0A=
		$(this).removeClass("u-comborowhl");=0A=
	},=0A=
	_onbutmouseover: function() {=0A=
		$(this).addClass("u-combobuthl");=0A=
	},=0A=
	_onbutmouseout: function() {=0A=
		$(this).removeClass("u-combobuthl");=0A=
	},=0A=
	_onlistopen: function(o) {=0A=
		$(o.combo).addClass("u-comboopen");=0A=
	},=0A=
	_onlisthide: function(o) {=0A=
		$(o.combo).removeClass("u-comboopen");=0A=
	},=0A=
	_onfocus: function(o,e) {=0A=
		$(o.combo).addClass("u-combofocus");=0A=
	},=0A=
	_onblur: function(o,e) {=0A=
		$(o.combo).removeClass("u-combofocus");=0A=
	},=0A=
	_select: function(o,i) {=0A=
		$(o.parts.items[i]).addClass("u-comborowsel");=0A=
	},=0A=
	_deselect: function(o,i) {=0A=
		$(o.parts.items[i]).removeClass("u-comborowsel");=0A=
	},=0A=
	seticon: function(o,icon) {=0A=
		if(icon) $(o.obj).css("background-image","url("+icon+")");=0A=
			else $(o.obj).css("background-image",o.props.deficon ? =
"url("+o.props.deficon+")" : "none")=0A=
	}=0A=
    }	=0A=
};=0A=
=0A=
_uComboBox._onitemmouseover=3Dfunction(e) {=0A=
		e.data.design._onitemmouseover.apply(this,[e]);=0A=
};=0A=
_uComboBox._onitemmouseout=3Dfunction(e) {=0A=
		e.data.design._onitemmouseout.apply(this,[e]);=0A=
};=0A=
_uComboBox._onitemclick=3Dfunction(e) {=0A=
		var o=3De.data;=0A=
		for(var i=3D0;i<o.parts.items.length;i++)=0A=
			if(o.parts.items[i]=3D=3Dthis) {=0A=
				o.select(i);=0A=
				o.hidelist();=0A=
				o.obj.focus();=0A=
			}=0A=
		e.stopPropagation();=0A=
		e.preventDefault();=0A=
};=0A=
_uComboBox._onbutclick=3Dfunction(e) {=0A=
		var o=3De.data;=0A=
		_uComboBox.ignoreclick=3De.data;=0A=
		_uWnd.globalmousedown();=0A=
		if(o.opened) o.hidelist(); else o.showlist();=0A=
		o.obj.focus();=0A=
		if($.browser.msie && !e.data.cancelblur) {=0A=
			e.data.cancelblur=3Dtrue;=0A=
			setTimeout("var =
c=3D_uComboBox.all["+e.data.idx+"];if(c)c.cancelblur=3Dfalse;",10);=0A=
		}=0A=
		e.stopPropagation();=0A=
		e.preventDefault();=0A=
};=0A=
_uComboBox._onlistmousedown=3Dfunction(e) {=0A=
	_uComboBox.ignoreclick=3De.data;=0A=
	_uWnd.globalmousedown();=0A=
	e.data.obj.focus();=0A=
	if($.browser.msie && !e.data.cancelblur) {=0A=
		e.data.cancelblur=3Dtrue;=0A=
		setTimeout("var =
c=3D_uComboBox.all["+e.data.idx+"];if(c)c.cancelblur=3Dfalse;",10);=0A=
	}=0A=
	e.stopPropagation();=0A=
	e.preventDefault();=0A=
};=0A=
_uComboBox._oncombomousedown=3Dfunction(e) {=0A=
	_uComboBox.ignoreclick=3De.data;=0A=
	_uWnd.globalmousedown();=0A=
	if(e.which!=3D1) return;=0A=
	var o=3De.data;=0A=
	if(o.props.readonly) if(o.opened) o.hidelist(); else o.showlist();=0A=
	o.obj.focus();=0A=
	if($.browser.msie && !o.cancelblur) {=0A=
		o.cancelblur=3Dtrue;=0A=
		setTimeout("var =
c=3D_uComboBox.all["+o.idx+"];if(c)c.cancelblur=3Dfalse;",10);=0A=
	}=0A=
	e.stopPropagation();=0A=
	if(e.target!=3Do.obj) e.preventDefault();=0A=
};=0A=
_uComboBox._onobjfocus=3Dfunction(e) {=0A=
	var o=3De.data;=0A=
	if(o.blurtimer) clearTimeout(o.blurtimer);=0A=
	o.blurtimer=3Dnull;=0A=
	o.design._onfocus(o,e);=0A=
};=0A=
_uComboBox._onobjblur=3Dfunction(e) {=0A=
	e.data.onblur();=0A=
};=0A=
_uComboBox._onobjdeact=3Dfunction(e) {=0A=
	var o=3De.data;=0A=
	if(o.cancelblur) e.preventDefault();=0A=
};=0A=
=0A=
_uComboBox.isUpKey=3Dfunction (code) {=0A=
    return code=3D=3D38 || code =3D=3D 63232;=0A=
};=0A=
_uComboBox.isDownKey=3Dfunction (code) {=0A=
    return code=3D=3D40 || code =3D=3D 63233;=0A=
};=0A=
=0A=
_uComboBox.prototype=3D{=0A=
	_setvalue: function(i) {=0A=
	  with(this) {=0A=
		if(i>=3D0 && i<data.length) {=0A=
			valobj.value=3DprevInput=3Ddata[i][0];=0A=
			if(props.readonly) obj.value=3Ddata[i].length>2 ? data[i][2] : =
data[i][0];=0A=
			if(haveicons) design.seticon(this,data[i][1]);=0A=
		} else {=0A=
			if(props.readonly) {valobj.value=3D'';obj.value=3DuserInput;}=0A=
				else {valobj.value=3DprevInput=3DuserInput;}=0A=
			if(haveicons) this.design.seticon(this,null);=0A=
		}=0A=
	  }=0A=
	},=0A=
	_selectitem: function(i) {=0A=
	  with(this) {=0A=
		if(selected>=3D0 && selected<data.length) {=0A=
			design._deselect(this,selected);=0A=
			selected=3D-1;=0A=
		}=0A=
		if(i>=3D0 && i<data.length) {=0A=
			design._select(this,i);=0A=
			selected=3Di;=0A=
		}=0A=
	  }=0A=
	},=0A=
	setvalue: function (v) {=0A=
	  with(this) {=0A=
	  	var ch=3Dfalse;=0A=
		if(props.readonly) return;=0A=
		if(changetimer) clearTimeout(changetimer);=0A=
		if(valobj.value!=3Dv) ch=3Dtrue;=0A=
		valobj.value=3DprevInput=3DuserInput=3Dv;=0A=
		if(selected!=3D-1) ch=3Dtrue;=0A=
		_selectitem(-1);=0A=
		userIdx=3D-1;=0A=
		if(haveicons) this.design.seticon(this,null);=0A=
		if(props.onchange && ch) props.onchange.apply(this.app || =
this,[selected,v]);=0A=
	  }=0A=
	},=0A=
	select: function (i,soft) { //=0A=
	  with(this) {=0A=
		var ch=3Dfalse;=0A=
		if(changetimer) clearTimeout(changetimer);=0A=
		changetimer=3Dnull;=0A=
	  	_selectitem(i);=0A=
		_setvalue(selected);=0A=
		if(!soft) {=0A=
			if(selected!=3DuserIdx) ch=3Dtrue;=0A=
			userIdx=3Dselected;=0A=
			if(props.onchange && ch) props.onchange.apply(this.app || =
this,[selected,valobj.value]);=0A=
		}=0A=
	  }=0A=
	},=0A=
	onblur: function (e) {=0A=
		if(this.blurtimer) clearTimeout(this.blurtimer);=0A=
		this.blurtimer=3DsetTimeout("var =
c=3D_uComboBox.all["+this.idx+"];if(c)c._onblur2();",10);=0A=
	}, =0A=
	_onblur2: function (e) {=0A=
		this.blurtimer=3Dnull;=0A=
		this.design._onblur(this,e);=0A=
	}, =0A=
	onkeydown: function (e) {=0A=
	  var i;=0A=
	  with(this) {=0A=
    	var c=3De.keyCode;=0A=
    	if(c=3D=3D27 && opened) {=0A=
			select(userIdx,true);=0A=
			hidelist();=0A=
			return false;=0A=
    	}=0A=
    	if(data.length=3D=3D0) return;=0A=
	    if(c=3D=3D13) {=0A=
	    	select(selected);=0A=
			hidelist();=0A=
			obj.focus();=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			return false;=0A=
	    }=0A=
		if(c=3D=3D9) {=0A=
			if(changetimer) select(selected);=0A=
			return;=0A=
		}=0A=
	    if(_uComboBox.isDownKey(c) || _uComboBox.isUpKey(c)) {=0A=
			i=3Dselected+(_uComboBox.isDownKey(c) ? 1 : -1);=0A=
			if(props.readonly) {=0A=
	    		if(i>=3Ddata.length) i=3D0;=0A=
					else if(i<0) i=3Ddata.length-1;=0A=
			} else {=0A=
    			if(i>=3Ddata.length) i=3D-1;=0A=
					else if(i<-1) i=3Ddata.length-1;=0A=
			}=0A=
			select(i,true); //select clears changetimer=0A=
			if(!opened) changetimer=3DsetTimeout("var =
c=3D_uComboBox.all["+this.idx+"];if(c)c.select("+i+");",500);=0A=
			return false;=0A=
    	}=0A=
  	  }=0A=
	},=0A=
	onkeyup: function (e) {=0A=
  	  with(this) {=0A=
    	if(props.readonly || obj.value=3D=3DprevInput) return;=0A=
		if(changetimer) clearTimeout(changetimer);=0A=
    	prevInput=3DuserInput=3Dobj.value;=0A=
		_selectitem(-1);=0A=
		userIdx=3D-1;=0A=
		if(haveicons) this.design.seticon(this,null);=0A=
		if(props.onchange) props.onchange.apply(this.app || =
this,[-1,obj.value]);=0A=
  	  }=0A=
	},=0A=
	appendItem: function(elem) { //0 - id, 1 - optional icon, 2... - text =
labels=0A=
		this.data[this.data.length]=3D[elem[0],elem[1],elem[3]];=0A=
		this.design.append_item(this,elem);=0A=
		this.updated=3Dtrue;=0A=
	},=0A=
	removeItem: function(idx) {=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		this.design.remove_item(this,idx);=0A=
		this.data.splice(idx,1);=0A=
		this.updated=3Dtrue;=0A=
	},=0A=
	removeAll: function() {=0A=
		for(var i=3D0;i<this.data.length;i++) this.design.remove_item(this,0);=0A=
		this.data.splice(0,this.data.length);=0A=
		this.updated=3Dtrue;=0A=
	},=0A=
	hidelist: function() {=0A=
	    this.toplist.style.display=3D'none';=0A=
	    this.opened=3Dfalse;=0A=
		this.design._onlisthide(this);=0A=
	},=0A=
	showlist: function () {=0A=
    	var w,x,y;=0A=
		if(!this.props.wnd) {=0A=
			x=3Dthis.combo.offsetLeft;=0A=
			y=3Dthis.combo.offsetTop;=0A=
		} else {=0A=
			var =
pos=3D$(this.combo).offset(),ppos=3D$(this.props.wnd.top).offset();=0A=
			x=3Dpos.left-ppos.left;=0A=
			y=3Dpos.top-ppos.top;=0A=
		}=0A=
    	if(this.props.listwidth=3D=3D'auto') =
w=3Dthis.combo.offsetWidth+'px';=0A=
    		else w=3Dthis.props.listwidth;=0A=
		=
$(this.toplist).css({left:x+'px',top:(y+this.combo.offsetHeight-1)+'px',w=
idth:w,minWidth:this.combo.offsetWidth+'px'});=0A=
	    if(this.frame) $(this.frame).css({width:w});=0A=
		if(this.updated) {=0A=
			$(this.parts.list).css({height:'auto',overflow:'hidden'});=0A=
			$(this.toplist).css({visibility:'hidden'}).css({display:'block'});=0A=
			if(this.showtimer) clearTimeout(this.showtimer);=0A=
			this.showtimer=3DsetTimeout("var =
c=3D_uComboBox.all["+this.idx+"];if(c)c._showlist();",10);=0A=
		} else {=0A=
		    this.toplist.style.display=3D'block';=0A=
		}=0A=
		this.design._onlistopen(this);=0A=
		this.opened=3Dtrue;=0A=
	    this.updated=3Dfalse;=0A=
	},=0A=
	_showlist:function(){=0A=
		this.showtimer=3Dnull;=0A=
		var o=3Dthis.parts.list,h,maxh,pos,d=3D_uWnd.getdims();=0A=
		h=3DMath.max(o.scrollHeight,o.offsetHeight);=0A=
		pos=3D$(this.toplist).offset();=0A=
		if(this.props.maxlistheight>0) =
maxh=3DMath.max(50,Math.min(this.props.maxlistheight,d.clientH-pos.top));=0A=
			else maxh=3DMath.max(50,d.clientH-pos.top);=0A=
		if(h>maxh) {=0A=
			$(this.parts.list).css({height:maxh+'px',overflow:'auto'});=0A=
			h=3Dmaxh;=0A=
		}=0A=
	    if(this.frame) $(this.frame).css({height:h+'px'});=0A=
=0A=
		$(this.toplist).css({visibility:'visible'});=0A=
	}=0A=
};=0A=
=0A=
//vals in form:=0A=
//{'word1':[['word11',col2],['word12',col2]],'word2':[['word21',col2],['w=
ord22',col2]]}=0A=
=0A=
//function =
_uSuggestList(editId,cachegroup,tblClass,normalclass,highclass,minlength,=
url,vals) {=0A=
function _uSuggestList(name,inputId,opts,vals) { //inputId can be ID or =
object=0A=
	this.constructor=3D_uSuggestList;=0A=
	this.name=3Dname;=0A=
	this.obj=3Dtypeof inputId=3D=3D'string' ? =
document.getElementById(inputId) : inputId;=0A=
	if(!this.obj) return null;=0A=
	this.props=3D$.extend({=0A=
		design: 'std',=0A=
		maxlistheight: 'auto',=0A=
		colwidth: null,=0A=
		cachegroup: 'def',=0A=
		minlen: 2,=0A=
		url: null,=0A=
		separator: null=0A=
//		hidden: 0,=0A=
//		onshow: null,=0A=
//		onhide: null,=0A=
//		ondestroy: null,=0A=
//		onchange: null,=0A=
//		wnd:null,=0A=
//		rtl:0=0A=
	},opts || {});=0A=
	this.colwidth=3Dthis.props.colwidth || [];=0A=
//	this.destroyed=3Dfalse;=0A=
    this.design=3Dthis.props.design && =
_uSuggestList.designs[this.props.design] ? =
_uSuggestList.designs[this.props.design] : _uSuggestList.designs['std'];=0A=
    this.idx=3D_uSuggestList.nextidx++;=0A=
    _uSuggestList.all[this.idx]=3Dthis;=0A=
    this.cacheGroup=3Dthis.props.cachegroup;=0A=
    if(!this.queryCache[this.cacheGroup]) =
this.queryCache[this.cacheGroup]=3D[];=0A=
    if(vals) this.queryCache[this.cacheGroup]=3Dvals;=0A=
=0A=
    this.visible=3Dtrue;=0A=
    this.hlIndex=3D-1; //highlighted item=0A=
    this.hlRow=3Dnull; //highlighted row=0A=
    this.blockMouseOver=3Dfalse;=0A=
=0A=
    this.userInput=3Dthis.obj.value; //saved value=0A=
    this.previousInput=3Dthis.obj.value; //to track changes=0A=
    this.resultInput=3D""; //value for which we have result if result is =
not empty=0A=
    this.requestedInput=3D""; //to track value which will be requested =
remotely=0A=
    this.ignoreInput=3D""; //value which must be ignored=0A=
	this.sep_pos=3D-1;=0A=
=0A=
    this.remoteReqTimer=3Dnull;=0A=
    this.hideTimer=3Dnull;=0A=
    this.AJAXretries=3D0;=0A=
    this.AJAXTimer=3Dnull;=0A=
=0A=
=0A=
	this.frame=3Dnull;=0A=
=0A=
=0A=
	var t=3Ddocument.createElement("div");=0A=
	t.id=3D"_usuggest"+this.idx;=0A=
	this.top=3Dt;=0A=
	=0A=
	var wnd;=0A=
	if(wnd=3D_uWnd.findparent(this.obj)) {=0A=
		this.parent=3Dwnd.top;=0A=
		this.parent.appendChild(t);=0A=
	} else {=0A=
		this.parent=3Dthis.obj.parentNode;=0A=
		this.parent.insertBefore(t,this.obj);=0A=
=0A=
	}=0A=
=0A=
   	=
$(t).css({position:'absolute',zIndex:5,display:'none',zoom:1});//zIndex:t=
his.zpos,=0A=
    if(0 && $.browser.msie && parseFloat($.browser.version)<7){=0A=
		    var html =3D '<iframe tabindex=3D"-1" '=0A=
    		    +'style=3D"display:block; position:absolute;'=0A=
			+'filter:Alpha(Opacity=3D\'100\'); '=0A=
			+'width:1px;height:20px;border:0"/>';=0A=
=0A=
	    	this.frame=3Ddocument.createElement(html);=0A=
			t.appendChild(this.frame);=0A=
	}=0A=
=0A=
    this.parts=3Dthis.design.suggest_init(this);=0A=
=0A=
    $(this.obj).attr("autocomplete", "off").css("position","relative")=0A=
//	.bind("focus",this,_uComboBox._onobjfocus)=0A=
	.bind("blur",this,function(e) {return e.data.onblur(e);})=0A=
//	.bind("beforedeactivate",this,_uComboBox._onobjdeact)=0A=
	.bind("keydown",this,function(e) {return e.data.onkeydown(e);})=0A=
	.bind("keyup",this,function(e) {return e.data.onkeyup(e);});=0A=
=0A=
//	$(this.combo).bind("mousedown",this,_uComboBox._oncombomousedown);=0A=
//	$(this.toplist).bind("mousedown",this,_uComboBox._onlistmousedown);=0A=
	if(!_uSuggestList.globalset) {=0A=
		_uSuggestList.globalset=3Dtrue;=0A=
	    $(document).bind("mousedown",_uSuggestList.hideall);=0A=
	    $(window).bind("resize",_uSuggestList.hideall);=0A=
	}=0A=
=0A=
=0A=
    this.hide();=0A=
//    $(window).bind("resize",this,function(e) {return =
e.data.positionResult();});=0A=
=0A=
    //attach event to parent form=0A=
    if(this.obj.form) {=0A=
	$(this.obj.form).bind("submit."+this.idx,this,function(e) {return =
e.data.onsubmitform(e);});=0A=
    }=0A=
}=0A=
=0A=
_uSuggestList.all=3D[];=0A=
_uSuggestList.nextidx=3D0;=0A=
_uSuggestList.defz=3D20015;=0A=
_uSuggestList.globalset=3Dfalse;=0A=
_uSuggestList.ignoreclick=3Dnull;=0A=
=0A=
_uSuggestList.getbyname=3Dfunction(name) {=0A=
    var a=3Dthis.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && a[i].name=3D=3Dname) return =
a[i];=0A=
    return null;=0A=
};=0A=
_uSuggestList.hideall=3Dfunction() {=0A=
    var a=3D_uSuggestList.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && !a[i].destroyed && =
_uSuggestList.ignoreclick!=3Da[i]) a[i].hide();=0A=
	=
if(_uSuggestList.ignoreclick)setTimeout("_uSuggestList.ignoreclick=3Dnull=
;",10);=0A=
};=0A=
=0A=
_uSuggestList.designs=3D{=0A=
	std: {=0A=
	suggest_init: function(o) {=0A=
	    var p=3D{};=0A=
		$(o.obj).attr("class","x-selectable u-suggedit =
"+$(o.obj).attr("class"));=0A=
//		if($.browser.msie) =
$(o.obj).css({marginTop:'-1px',marginBottom:'-1px'});=0A=
=0A=
	    $(o.top).append('<div class=3D"u-sugglist" style=3D"zoom:1"><div =
style=3D"zoom:1"><table border=3D"0" cellspacing=3D"0" =
class=3D"x-unselectable u-suggcont" =
width=3D"100%"></table></div></div>');=0A=
		p.list=3D$(o.top).find(".u-sugglist")[0];=0A=
		p.content=3D$(o.top).find(".u-suggcont")[0];=0A=
//		p.items=3D[];=0A=
		$(o.top).find("div,span,table").andSelf().attr("unselectable","on");=0A=
	    return p;=0A=
=0A=
		},=0A=
	append_row: function(o,item,cols,key) {=0A=
		var row=3Do.parts.content.insertRow(-1);=0A=
		$(row).bind("mousedown",o,o._onrowmousedown)=0A=
	      .bind("mousemove",o,o._onrowmousemove)=0A=
	      =
.bind("mouseover",o,o._onrowmouseover).addClass('u-suggrow').attr("usugge=
ststr",item[0]);=0A=
		var v=3DString(item[0]);=0A=
	    if(v.toLowerCase().substr(0,key.length)=3D=3Dkey.toLowerCase()) =
v=3D'<span =
class=3D"u-suggmark">'+v.substr(0,key.length)+'</span>'+v.substr(key.leng=
th);=0A=
		for(var j=3D0;j<cols;j++) {=0A=
		    $(row).append("<td unselectable=3D'on' =
class=3D'u-suggcell"+j+"'>"+(j=3D=3D0?v:item[j])+"</td>");=0A=
		}=0A=
	},=0A=
//	_onlistopen: function(o) {=0A=
//		$(o.combo).addClass("u-comboopen");=0A=
//	},=0A=
//	_onlisthide: function(o) {=0A=
//		$(o.combo).removeClass("u-comboopen");=0A=
//	}=0A=
	_select: function(o,row) {=0A=
		$(row).addClass("u-suggrowhl");=0A=
	},=0A=
	_deselect: function(o,row) {=0A=
		$(row).removeClass("u-suggrowhl");=0A=
	}=0A=
=0A=
	}=0A=
=0A=
};=0A=
=0A=
_uSuggestList.prototype =3D {=0A=
queryCache: [],=0A=
onsubmitform: function (e) {=0A=
    if(this.visible) {=0A=
	if(this.resultInput!=3D"") this.obj.value=3Dthis.userInput;=0A=
	this.hide();=0A=
    }=0A=
},=0A=
hide: function () {=0A=
  with(this) {=0A=
    top.style.display=3D'none';=0A=
	visible=3Dfalse;=0A=
	if(hlRow) design._deselect(this,hlRow);=0A=
	hlRow=3Dnull;=0A=
	hlIndex=3D-1;=0A=
  }=0A=
},=0A=
show: function () {=0A=
  with(this) {=0A=
    if(!visible && numItems()>0) {=0A=
	   	var w=3Dobj.offsetWidth,x,y,off,offp;=0A=
	   	off=3D$(obj).offset();=0A=
	   	offp=3D$(parent).offset();=0A=
		=
$(top).css({left:off.left-offp.left+'px',top:off.top-offp.top+obj.offsetH=
eight+'px',width:w+'px'});=0A=
	    if(frame) $(frame).css({width:w+'px'});=0A=
	    top.style.display=3D'block';=0A=
		visible=3Dtrue;=0A=
		blockMouseOver=3Dtrue;=0A=
    }=0A=
  }=0A=
},=0A=
numItems: function () {=0A=
    return this.parts.content ? this.parts.content.rows.length : 0;=0A=
},=0A=
onblur: function (e) {=0A=
  with(this) {=0A=
    if(visible) {=0A=
	if(hlIndex>=3D0) obj.value=3DuserInput;=0A=
	hide();=0A=
    }=0A=
  }=0A=
}, =0A=
onkeydown: function (e) {=0A=
  with(this) {=0A=
    var c=3De.keyCode;=0A=
    if(c=3D=3D27 && visible) {=0A=
	if(resultInput!=3D"") _setvalue_sep(userInput);=0A=
	hide();=0A=
	return false;=0A=
    }=0A=
    if(resultInput=3D=3D"") return;=0A=
    if(c=3D=3D13 && hlIndex>=3D0 && visible) {=0A=
	previousInput=3Dobj.value;=0A=
	userInput=3D_getvalue_sep();=0A=
	resetRequest(userInput);=0A=
	hide();=0A=
	if(userInput !=3D resultInput) clearResult();=0A=
	obj.focus();=0A=
	e.preventDefault();=0A=
	e.stopPropagation();=0A=
	return false;=0A=
    }=0A=
    if(isDownKey(c)) {=0A=
	moveSelection(hlIndex+1);=0A=
	return false;=0A=
    }=0A=
    if(isUpKey(c)) {=0A=
	moveSelection(hlIndex-1);=0A=
	return false;=0A=
    }=0A=
  }=0A=
},=0A=
onkeyup: function (e) {=0A=
  with(this) {=0A=
    if(ignoreInput!=3D"" && _getvalue_sep()=3D=3DignoreInput) return;=0A=
    if(obj.value=3D=3DpreviousInput) return;=0A=
    ignoreInput=3DresultInput=3D"";=0A=
    previousInput=3Dobj.value;=0A=
    userInput=3D_getvalue_sep();=0A=
    if(hideTimer) clearTimeout(hideTimer);=0A=
    hideTimer=3DsetTimeout("var =
c=3D_uSuggestList.all["+idx+"];if(c)c.clearResult(true);",2000);=0A=
	=0A=
    procRequest(userInput);=0A=
  }=0A=
},=0A=
_setvalue_sep: function(v) {=0A=
	with(this){=0A=
		if(sep_pos>=3D0) =
obj.value=3Dobj.value.substr(0,sep_pos)+props.separator+' '+v;=0A=
			else obj.value=3Dv;=0A=
	}=0A=
},=0A=
_getvalue_sep: function() {=0A=
  with(this){=0A=
  	if(props.separator) sep_pos=3Dobj.value.lastIndexOf(props.separator);=0A=
	if(sep_pos>=3D0) {=0A=
		var t=3Dobj.value.substr(sep_pos+props.separator.length);=0A=
	    t=3Dt.replace(/^\s+/,"");=0A=
	    return t;=0A=
	} else return obj.value;=0A=
  }=0A=
},=0A=
moveSelection: function (newi) {=0A=
  with(this) {=0A=
    if(resultInput=3D=3D"" && ignoreInput!=3D"" && =
_getvalue_sep()=3D=3DignoreInput) {=0A=
	procRequest(_getvalue_sep(),true);=0A=
	return;=0A=
    }=0A=
    if(!visible && resultInput.length>0 && =
resultInput=3D=3D_getvalue_sep()) {=0A=
	show();=0A=
	return;=0A=
    }=0A=
    if(!visible) return;=0A=
    if(hlRow) design._deselect(this,hlRow);=0A=
    hlRow=3Dnull;=0A=
    var cnt=3DnumItems();=0A=
    if(newi>=3Dcnt) newi=3D-1;=0A=
	else if(newi<-1) newi=3Dcnt-1;=0A=
    if(newi=3D=3D-1) {=0A=
	hlIndex=3D-1;=0A=
	_setvalue_sep(userInput);=0A=
	obj.focus();=0A=
	return;=0A=
    }=0A=
    hlIndex=3Dnewi;=0A=
    hlRow=3Dparts.content.rows[newi];=0A=
    design._select(this,hlRow);=0A=
    ignoreInput=3D$(hlRow).attr("usuggeststr");=0A=
    _setvalue_sep(ignoreInput);=0A=
  }=0A=
},	=0A=
isUpKey: function (code) {=0A=
    return code=3D=3D38 || code =3D=3D 63232;=0A=
},=0A=
isDownKey: function (code) {=0A=
    return code=3D=3D40 || code =3D=3D 63233;=0A=
},=0A=
resetRequest: function(txt) {=0A=
  with(this) {=0A=
    if(remoteReqTimer && requestedInput=3D=3Dtxt) return;=0A=
    clearTimeout(remoteReqTimer); 	remoteReqTimer=3Dnull;=0A=
    requestedInput=3Dtxt;=0A=
    clearTimeout(AJAXTimer); AJAXTimer=3Dnull;=0A=
    try{if(AJAXObj) AJAXObj.abort(); AJAXObj=3Dnull;}catch(e){};=0A=
  }=0A=
},=0A=
procRequest: function (txt,nopause) {=0A=
  with(this) {=0A=
    resetRequest(txt);=0A=
=0A=
    if(txt.length<props.minlen) {=0A=
	clearResult(true);=0A=
	return;=0A=
    }=0A=
    if(queryCache[cacheGroup][txt]) {=0A=
	setResult(txt,queryCache[cacheGroup][txt]);=0A=
	return;=0A=
    }=0A=
    AJAXretries=3D0;=0A=
    if(!props.url) return;=0A=
    if(nopause) remoteRequest();=0A=
	else remoteReqTimer=3DsetTimeout("var =
c=3D_uSuggestList.all["+this.idx+"];if(c)c.remoteRequest();",350);=0A=
  }=0A=
},=0A=
remoteRequest: function () {=0A=
  with(this) {=0A=
    clearTimeout(remoteReqTimer);=0A=
    remoteReqTimer=3Dnull;=0A=
    try{if(AJAXObj) AJAXObj.abort(); AJAXObj=3Dnull;}catch(e){};=0A=
=0A=
    if(AJAXretries>1) return;=0A=
    clearTimeout(AJAXTimer);=0A=
    AJAXTimer=3DsetTimeout("var =
c=3D_uSuggestList.all["+this.idx+"];if(c){c.AJAXretries++;c.remoteRequest=
();}",12000);=0A=
=0A=
    AJAXObj=3D$.ajax({=0A=
	type: "GET",=0A=
	dataType: "text",=0A=
	cache: false,=0A=
	url: props.url,=0A=
	data: {tag:requestedInput},=0A=
	success: new Function("resp","status","var =
c=3D_uSuggestList.all["+this.idx+"];if(c)c.parseRequest(resp,status);"),=0A=
	timeout: 10000=0A=
    });=0A=
  }=0A=
},=0A=
parseRequest: function (resp,status) {=0A=
    clearTimeout(this.AJAXTimer);=0A=
    this.AJAXTimer=3Dnull;=0A=
    this.AJAXretries=3D0;=0A=
    var res=3D[];=0A=
    try {=0A=
	res=3Deval("res=3D"+resp);=0A=
    } catch(e) {}=0A=
    this.AJAXObj=3Dreq=3Dnull;=0A=
    if(!res || res.length<2 || res[1]<1 || res[1]>10) {=0A=
	this.clearResult();=0A=
	return;=0A=
    }=0A=
    var n=3Dres[1],idx=3D0;=0A=
    var data=3D[];=0A=
    for(var i=3D2;i<res.length;i+=3Dn,idx++) {=0A=
	data[idx]=3D[];=0A=
	for(var j=3D0;j<n;j++) {=0A=
	    data[idx][j]=3Dres[i+j];=0A=
	}=0A=
    }=0A=
    this.queryCache[this.cacheGroup][res[0]]=3Ddata;=0A=
    if(res[0]=3D=3Dthis.requestedInput) =
this.setResult(res[0],this.queryCache[this.cacheGroup][res[0]]);=0A=
},=0A=
_onrowmousemove: function(e) {=0A=
    return e.data.onrowmousemove(e);=0A=
},=0A=
_onrowmouseover: function(e) {=0A=
    return e.data.onrowmouseover(e);=0A=
},=0A=
_onrowmousedown: function(e) {=0A=
    return e.data.onrowmousedown(e);=0A=
},=0A=
onrowmousemove: function(e) {=0A=
    if(this.blockMouseOver) { //mouseOver is disable right after showing =
results=0A=
	this.blockMouseOver=3Dfalse;=0A=
	this.onrowmouseover(e);=0A=
    }=0A=
},=0A=
onrowmouseover: function(e) {=0A=
  with(this) {=0A=
    if(blockMouseOver) return;=0A=
    if(hlRow) design._deselect(this,hlRow);=0A=
    hlRow=3Dnull;=0A=
    hlIndex=3D-1;=0A=
    for(var i=3D0;i<parts.content.rows.length;i++) {=0A=
	if(parts.content.rows[i]=3D=3De.target || =
jQuery.inArray(e.target,$(parts.content.rows[i]).contents())>=3D0) {=0A=
	    hlIndex=3Di;=0A=
	    hlRow=3Dparts.content.rows[i];=0A=
	    design._select(this,hlRow);=0A=
	    break;=0A=
	}=0A=
    }=0A=
  }=0A=
},=0A=
onrowmousedown: function(e) {=0A=
  with(this) {=0A=
    if(numItems()<=3D0 || !hlIndex<0 || !hlRow) return;=0A=
    ignoreInput=3DuserInput=3D$(hlRow).attr("usuggeststr");=0A=
    _setvalue_sep(userInput);=0A=
    previousInput=3Dobj.value;=0A=
    resetRequest(userInput);=0A=
    hide();=0A=
    if(userInput !=3D resultInput) clearResult();=0A=
    obj.focus();=0A=
  }=0A=
},=0A=
=0A=
setResult: function (phrase,table) { //array of arrays=0A=
  with(this) {=0A=
    if(hideTimer) clearTimeout(hideTimer);=0A=
    hideTimer=3Dnull;=0A=
    clearResult();=0A=
    hlIndex=3D-1;=0A=
    hlRow=3Dnull;=0A=
    resultInput=3Dphrase;=0A=
    var cnt=3Dtable.length;=0A=
    if(cnt<=3D0) {hide();return;}	=0A=
    var cols=3Dtable[0].length; //determine num cols by first item=0A=
    for(var i=3D0;i<cnt;i++) {=0A=
	    design.append_row(this,table[i],cols,phrase);=0A=
    }=0A=
    show();=0A=
  }=0A=
},=0A=
clearResult: function (hide) {=0A=
  with(this) {=0A=
    if(hide) hide();=0A=
    resultInput=3D"";=0A=
    hlRow=3Dnull;=0A=
    hlIndex=3D-1;=0A=
    while(parts.content.rows.length > 0)parts.content.deleteRow(-1);=0A=
  }=0A=
}=0A=
};=0A=
//obj - this for all handlers=0A=
function _uDraggable(obj,onmove,oninitdrag,onstartdrag,onstopdrag) {=0A=
	this.par=3Dobj;=0A=
	this.x=3Dthis.y=3Dthis.w=3Dthis.h=3Dthis.m=3D0;=0A=
	this.moved=3Dfalse;=0A=
	this.active=3Dfalse;=0A=
	this.onmove=3Donmove || _uDraggable.dummy;=0A=
	this.oninitdrag=3Doninitdrag || _uDraggable.dummy;=0A=
	this.onstartdrag=3Donstartdrag || _uDraggable.dummy;=0A=
	this.onstopdrag=3Donstopdrag || _uDraggable.dummy;=0A=
        if(!_uDraggable.globalset) {=0A=
		_uDraggable.globalset=3Dtrue;=0A=
		$(document).bind("mouseup",_uDraggable.onmouseup);=0A=
		$(document).bind("mousemove",_uDraggable.onmousemove);=0A=
//		if($.browser.msie)$(document).bind("mouseout",function(e) =
{if(!e.relatedTarget && !e.toElement)_uWnd._dragging=3Dnull});=0A=
	}=0A=
}=0A=
_uDraggable.dummy=3Dfunction(){};=0A=
_uDraggable.obj=3Dnull;=0A=
_uDraggable.clkX=3D0;=0A=
_uDraggable.clkY=3D0;=0A=
_uDraggable.scrL=3D0;=0A=
_uDraggable.scrT=3D0;=0A=
_uDraggable.globalset=3Dfalse;=0A=
_uDraggable.onmousemove=3Dfunction(e) {=0A=
  with(_uDraggable) {=0A=
    var o=3Dobj;=0A=
    if(!o) return;=0A=
	o.event=3De;=0A=
	if(typeof(e.which)!=3D'undefined' && e.which!=3D1) =
{o.stop();obj=3Dnull;return;}=0A=
	e.stopPropagation();=0A=
	e.preventDefault();=0A=
        var d=3D_uWnd.getdims();=0A=
	if(!o.moved && (e.clientX!=3DclkX || e.clientY!=3DclkY)) =
{o.onstartdrag.apply(o.par,[o.x,o.y,o.w,o.h,o.m]);o.moved=3Dtrue;}=0A=
=0A=
	=
o.onmove.apply(o.par,[e.clientX-clkX-(scrL-d.clientLeft),e.clientY-clkY-(=
scrT-d.clientTop),o.x,o.y,o.w,o.h,o.m]);=0A=
	o.event=3Dnull;=0A=
	return false;=0A=
  }=0A=
};=0A=
_uDraggable.onmouseup=3Dfunction(e) {=0A=
    if(e.which!=3D1) return;=0A=
  with(_uDraggable) {=0A=
    var o=3Dobj;=0A=
    if(!o) return;=0A=
  	if(o.moved)onmousemove(e);=0A=
	o.event=3De;=0A=
  	o.stop();=0A=
  	o.event=3Dnull;=0A=
  	obj=3Dnull;=0A=
  }=0A=
};=0A=
_uDraggable.prototype=3D{=0A=
	start: function(e,x,y,w,h,m) {=0A=
		var r=3D_uDraggable;=0A=
		if(r.obj) =
{r.obj.event=3De;r.obj.onstopdrag.apply(r.obj.par);r.obj.event=3Dnull;}=0A=
		this.x=3Dx;=0A=
		this.y=3Dy;=0A=
		this.w=3Dw;=0A=
		this.h=3Dh;=0A=
		this.m=3Dm;=0A=
		this.active=3Dtrue;=0A=
		this.moved=3Dfalse;=0A=
		r.obj=3Dthis;=0A=
	    var d=3D_uWnd.getdims();=0A=
	    r.clkX=3De.clientX;=0A=
	    r.clkY=3De.clientY;=0A=
	    r.scrL=3Dd.clientLeft;=0A=
	    r.scrT=3Dd.clientTop;=0A=
            this.event=3De;=0A=
	    this.oninitdrag.apply(this.par,[x,y,w,h,m]);=0A=
//window.dump("drag start\n");=0A=
=0A=
	},=0A=
	stop: function() {=0A=
		var r=3D_uDraggable;=0A=
		if(r.obj=3D=3Dthis) r.obj=3Dnull;=0A=
		if(this.active) {=0A=
			this.onstopdrag.apply(this.par,[this.x,this.y,this.w,this.h,this.m]);=0A=
			this.active=3Dfalse;=0A=
//window.dump("drag stop \n");=0A=
		}=0A=
	}=0A=
=0A=
};=0A=
=0A=
//moverID - id or html object of moving object=0A=
//type - v or h for vert or horiz=0A=
//minV - minimal value returned by slider=0A=
//maxV - maximal value=0A=
function _uSlider(moverID,type,minV,maxV,opts) {=0A=
        if(minV=3D=3DmaxV) return;=0A=
        if(typeof(moverID)!=3D'object') this.slider=3D$('#'+moverID)[0]; =
else this.slider=3DmoverID;=0A=
        if(!this.slider) return;=0A=
        this.slider._uslider=3Dthis;=0A=
        this.type =3D type.substr(0,1).toLowerCase()=3D=3D'v' ? 'v' : =
'h';=0A=
=0A=
        this.props=3D$.extend({=0A=
            step: 0, //step of value change, if 0 then minimal possible =
(corresponding to 1 pixel)=0A=
            initval: (minV+maxV)/2, //initial value (between min and max)=0A=
            disabled: 0, //if initially disabled=0A=
            minpos: 0, //offset in pixels which corresponds to minimal =
value=0A=
            maxpos: null, //offset in pixels which corresponds to =
maximal value, by default size of parent - size of slider=0A=
            hotspot: null, //offset of slider hot spot from left (top) =
edge, by default a half of slider size=0A=
=0A=
            thispar: null, //this for handlers=0A=
            onchange: null, //(newvalue,user param,sliderobj)=0A=
            param: null //user param for onchange=0A=
        },opts || {});=0A=
=0A=
        this.disabled=3D!!this.props.disabled;=0A=
=0A=
        this.min_value=3DminV; //min numerical value of slider=0A=
        this.max_value=3DmaxV; //max=0A=
        this.step=3DMath.abs(this.props.step); //if zero, than step is =
minimal possible=0A=
=0A=
        this.value=3D0;=0A=
=0A=
        this.min_pos=3Dthis.props.minpos;=0A=
        if(this.props.maxpos!=3Dnull) this.max_pos=3Dthis.props.maxpos;=0A=
                else { //get max pos from parent size=0A=
                        var p=3Dthis.slider.parentNode;=0A=
                        if(p) {=0A=
                            this.max_pos=3Dthis.type=3D=3D'h' ? =
p.offsetWidth-this.slider.offsetWidth : =
p.offsetHeight-this.slider.offsetHeight;=0A=
                        } else this.max_pos=3D1;=0A=
                }=0A=
        if(this.props.hotspot!=3Dnull) this.hotoff=3Dthis.props.hotspot;=0A=
                else this.hotoff=3Dthis.type=3D=3D'h' ? =
Math.floor(this.slider.offsetWidth/2) : =
Math.floor(this.slider.offsetHeight/2);=0A=
=0A=
        if(this.min_pos=3D=3Dthis.max_pos) this.max_pos=3Dthis.min_pos+1;=0A=
=0A=
        this.pos=3D0; //position of slider in parent node=0A=
        this.setValue(this.props.initval);=0A=
        this.drag=3Dnew =
_uDraggable(this,this._ondrag,null,null,this._ondragstop);=0A=
        $(this.slider).unbind('onmousemove =
mousedown').bind('onmousemove',_uSlider._onmousemove).bind('mousedown',th=
is,_uSlider._onmousedown);=0A=
        if(this.slider.parentNode) =
$(this.slider.parentNode).unbind('mousedown').bind('mousedown',this,_uSli=
der._onmousedownparent);=0A=
}=0A=
_uSlider._onmousedownparent=3Dfunction (e) {=0A=
    var o=3De.data;=0A=
    if(o.disabled) return;=0A=
    var x=3Do.type=3D=3D'h' ? e.pageX : e.pageY,=0A=
        coord=3D$(this).offset(),=0A=
        dx=3Do.type=3D=3D'h' ? x-coord.left : x-coord.top;=0A=
    o.setPos(dx-o.hotoff);=0A=
    e.preventDefault();=0A=
};=0A=
_uSlider._onmousedown=3Dfunction (e) {=0A=
    var o=3De.data;=0A=
    if(o.disabled) return;=0A=
    o.drag.start(e,o.pos);=0A=
    };=0A=
_uSlider._onmousemove=3Dfunction (e) {e.preventDefault();};=0A=
_uSlider.prototype=3D{=0A=
    setPos:function (newpos) {=0A=
                if(newpos<this.min_pos) newpos=3Dthis.min_pos;=0A=
                        else if(newpos>this.max_pos) =
newpos=3Dthis.max_pos;=0A=
                var sign=3Dthis.min_value<this.max_value ? 1 : -1;=0A=
                var =
newvalue=3D(newpos-this.min_pos)/(this.max_pos-this.min_pos)*(this.max_va=
lue-this.min_value)+this.min_value;=0A=
                if(this.step>0) { //allign value with step=0A=
                        =
newvalue=3DMath.round((newvalue-this.min_value)/this.step)*this.step+this=
.min_value;=0A=
                        =
newpos=3D(newvalue-this.min_value)/(this.max_value-this.min_value)*(this.=
max_pos-this.min_pos)+this.min_pos;=0A=
                        newpos=3DMath.round(newpos);=0A=
                }=0A=
                if(newvalue*sign<this.min_value*sign) =
newvalue=3Dthis.min_value;=0A=
                        else if(newvalue*sign>this.max_value*sign) =
newvalue=3Dthis.max_value;=0A=
                if(newvalue!=3Dthis.value) {=0A=
                        this.pos=3Dnewpos;=0A=
                        if(this.type=3D=3D'h') =
this.slider.style.left=3Dthis.pos+"px";=0A=
                                else =
this.slider.style.top=3Dthis.pos+"px";=0A=
                        this.value=3Dnewvalue;=0A=
                        if(this.props.onchange) =
this.props.onchange.call(this.props.thispar,this.value,this.props.param,t=
his);=0A=
                }=0A=
    },=0A=
    _ondrag:function (dx,dy,p) {=0A=
                if(this.disabled) return;=0A=
                this.setPos(p+dx);=0A=
    },=0A=
    setValue:function (V) {=0A=
                var sign=3Dthis.min_value<this.max_value ? 1 : -1;=0A=
                if(V*sign<this.min_value*sign || =
V*sign>this.max_value*sign) return;=0A=
                if(this.step>0) { //allign value with step=0A=
                        =
V=3DMath.round((V-this.min_value)/this.step)*this.step+this.min_value;=0A=
                        if(V*sign<this.min_value*sign) =
V=3Dthis.min_value;=0A=
                                else if(V*sign>this.max_value*sign) =
V=3Dthis.max_value;=0A=
                }=0A=
                var =
pos=3D(V-this.min_value)/(this.max_value-this.min_value)*(this.max_pos-th=
is.min_pos)+this.min_pos;=0A=
                this.pos=3DMath.round(pos);=0A=
                if(this.type=3D=3D'h') =
this.slider.style.left=3Dthis.pos+"px";=0A=
                        else this.slider.style.top=3Dthis.pos+"px";=0A=
                this.value=3DV;=0A=
                if(!this.disabled && this.props.onchange) =
this.props.onchange.call(this.props.thispar,this.value,this.props.param,t=
his);=0A=
    }=0A=
};=0A=
=0A=
=0A=
//id - ID of slider in returned code=0A=
_uSlider.buildH=3Dfunction(id,opts) {=0A=
    var p=3D$.extend({=0A=
        w: 124, //outer width of slider control in pixels or %=0A=
        lw: 0, //width of left image with padding (if any)=0A=
        limg: '', //left image=0A=
        limgcss: '', //additional css styles for left background prop =
(like 'no-repeat 0 8px'), url added by limg=0A=
        rw: 0, //width of right image with padding (if any)=0A=
        rimg: null, //right image=0A=
        rimgcss: '', //additional css styles for right background prop =
(like 'no-repeat 0 8px'), url added by rimg=0A=
        title: '', //title for central part if any=0A=
        ch: 20, //height of background DIV in pixels=0A=
        cw: 120, //width of background DIV in pixels=0A=
        cimg: '/img/d/sldBg.gif', //central background image=0A=
        cimgcss: 'no-repeat 0 10px', //additional css styles for central =
background prop (like 'no-repeat 0 8px'), url added by cimg=0A=
        simg: '/img/d/sld.gif', //slider image=0A=
        simgcss: 'no-repeat 0 0', //additional css styles for slider =
background prop (like 'no-repeat 0 8px'), url added by simg=0A=
        sh: 20, //height of slider DIV in pixels=0A=
        sw: 9, //width of slider DIV in pixels=0A=
        st: 2 //top css property of slider DIV in pixels=0A=
    },opts || {});=0A=
    if(String(p.w).indexOf('%')<0 && =
String(p.w).toLowerCase().indexOf('px')<0) p.w+=3D'px';=0A=
    return '<table border=3D"0" cellpadding=3D"1" cellspacing=3D"1" =
style=3D"width:'+p.w+'"><tr>'=0A=
+(p.lw>0 ? '<td width=3D"'+p.lw+'" '+(p.limg || o.limgcss ? =
'style=3D"background:'+(p.limg ? 'url('+p.limg+') ' : '')+p.limgcss+'"' =
: '')+'></td>' : '')=0A=
+'<td><div'+(p.title ? ' title=3D"'+p.title+'"' : '')+' =
style=3D"height:'+p.ch+'px;width:'+p.cw+'px'+(p.cimg || o.cimgcss ? =
';background:'+(p.cimg ? 'url('+p.cimg+') ' : '')+p.cimgcss : '')+'">'=0A=
+'<div unselectable=3D"on" id=3D"'+id+'" =
style=3D"cursor:pointer;-moz-user-select:none;height:'+p.sh+'px; =
width:'+p.sw+'px; position:relative; top:'+p.st+'px'+(p.simg || =
o.simgcss ? ';background:'+(p.simg ? 'url('+p.simg+') ' : '')+p.simgcss =
: '')+'"></div></div></td>'=0A=
+(p.rw>0 ? '<td width=3D"'+p.rw+'" '+(p.rimg || o.rimgcss ? =
'style=3D"background:'+(p.rimg ? 'url('+p.rimg+') ' : '')+p.rimgcss+'"' =
: '')+'></td>' : '')=0A=
+'</tr></table>';=0A=
=0A=
}=0A=
=0A=
=0A=
//tab options=0A=
// id  - id of tab. can be used anywhere instead of tab index. if not =
specified, then auto generated as '_tc[TCIDX]tb[INDEX]'=0A=
// headerc - content of header (string or html obj)=0A=
// headerh  - height of header block if it was specified=0A=
// footerc - content of footer (string or html obj)=0A=
// footerh  - height of header block if it was specified=0A=
// hidden - true if tab is initially hidden=0A=
// href - URL if tab action is to open URL=0A=
// target - target for URL=0A=
// close - availability of close button, overrides global option=0A=
// icon - URL of tab icon=0A=
// markload - alternate markload text, overrides global option=0A=
// onload - (tabctrl,idx,tabid,cont,headercont,footercont) after tab =
content is loaded (reloaded)for the first time (called before onshow), =
overrides global option=0A=
// onshow - (tabctrl,idx,tabid,cont,headercont,footercont) after tab =
content is loaded into DOM after every tab switch, overrides global =
option=0A=
// onhide - (tabctrl,idx,tabid) when tab looses active state (if tab was =
closed then this event is called after onbeforeclose if closing was =
allowed), overrides global option=0A=
// onbeforechange - (tabctrl,idx,tabid) before tab is changed to idx. if =
false, than ignore click, overrides global option=0A=
// onchange - (tabctrl,idx,tabid) after tab is changed to idx. if false, =
than do not load tab contents, overrides global option=0A=
// onbeforeclose - (tabctrl,idx,tabid) before tab is closed. if false, =
than ignore close, overrides global option=0A=
// onclose - (idx,tabid) after tab is closed, overrides global option=0A=
=0A=
=0A=
=0A=
function _uTabCtrl (name,ntabs,opts,titles,datas,topts) {=0A=
	this.constructor=3D_uTabCtrl;=0A=
	this.name=3Dname;=0A=
	this.ntabs=3Dntabs;=0A=
=0A=
	this.props=3D$.extend({=0A=
		parentnode: null, //if null, then just append child=0A=
		wnd:null, //use wnd as parent node. window must be already created=0A=
		app:opts && opts.wnd && opts.wnd.app || null, //parent app and 'this' =
for all handlers=0A=
		width: 'auto', //outer width=0A=
		height: 'auto', //outer height=0A=
		min_height: 50, //content height=0A=
		active_tab: -1, //if 'auto' then check current url for active tab=0A=
		close: 0, //default availability of close button=0A=
		design: 'std',=0A=
		noinit: false,=0A=
		markload: '<div align=3D"left"><div class=3D"myWinLoad"></div></div>', =
//default mark load text=0A=
		emptycontent: '', //content when no active tabs=0A=
		=0A=
					=0A=
		onload: null, //(tabctrl,idx,tabid,cont,headercont,footercont) after =
tab content is loaded (reloaded)for the first time (called before onshow)=0A=
		onshow: null, //(tabctrl,idx,tabid,cont,headercont,footercont) after =
tab content is loaded into DOM=0A=
		onhide: null, //(tabctrl,idx,tabid) when tab looses active state (if =
tab was closed then this event is called after onbeforeclose if closing =
was allowed)=0A=
		onbeforechange: null, //(tabctrl,idx,tabid) before tab is changed to =
idx. if false, than ignore click=0A=
		onchange: null, //(tabctrl,idx,tabid) after tab is changed to idx. if =
false, than do not load tab contents=0A=
		onbeforeclose: null, //(tabctrl,idx,tabid) before tab is closed. if =
false, than ignore close=0A=
		onclose: null, //(idx,tabid) after tab is closed. =0A=
		ondestroy: null, //(tabctrl,name)=0A=
		onresize: null, //(cont_width,cont_height,tabctrl,name)=0A=
		rtl:0=0A=
	},opts || {});=0A=
=0A=
	this.app=3Dthis.props.app;=0A=
	this.state=3D{init:false,destroyed:false};=0A=
    this.design=3Dthis.props.design && =
_uTabCtrl.designs[this.props.design] ? =
_uTabCtrl.designs[this.props.design] : _uTabCtrl.designs['std'];=0A=
    this.idx=3D_uTabCtrl.nextidx++;=0A=
    _uTabCtrl.all[this.idx]=3Dthis;=0A=
	this.width=3DparseInt(this.props.width) || 0; //outer width=0A=
	this.height=3DparseInt(this.props.height) || 0;	//outer height=0A=
	this.data=3D[]; =0A=
	this.pend_show=3Dnull;=0A=
	this.decor=3D{cdw:0,cdh:0,pdw:0,pdh:0,ph:0}; //=0A=
	this.maxid=3D0;=0A=
	this.wnd=3Dnull;=0A=
=0A=
	this.active_tab=3Dthis.props.active_tab;=0A=
	this.scrollpos=3D{tabswidth:0,havewidth:0,pos:null};=0A=
=0A=
	for(var i=3D0;i<ntabs;i++) {=0A=
		var opt=3D(topts && topts[i]) || {};=0A=
		var id=3Dopt.id || '';=0A=
		if(!id || id.length=3D=3D0) id=3D'_tc'+this.idx+'tb'+(this.maxid++);=0A=
		this.data[i]=3D{=0A=
			id:id, //id of tab. can be used anywhere instead of tab index. if not =
specified, then auto generated as '_tc[TCIDX]tb[INDEX]'=0A=
			title:(titles && titles[i]) || '.', =0A=
			dat:(datas && datas[i]) || '', //tab content struct=0A=
                        footer: opt.footerc || null, //content of footer =
(string or html obj)=0A=
                        footerh: opt.footerh && opt.footerh>0 ? =
opt.footerh : 0, //height of footer block if it was specified=0A=
                        header: opt.headerc || null, //content of footer =
(string or html obj)=0A=
                        headerh: opt.headerh && opt.headerh>0 ? =
opt.headerh : 0, //height of header block if it was specified=0A=
                        footercont: null, //real footer content=0A=
                        headercont: null, //real footer content=0A=
			cont:null, //real tab content (html elem)=0A=
                        ismarkload:0, //if tab is in markload state=0A=
			markloadcont:null, //markload content obj (html elem)=0A=
			obj:null,=0A=
			ishidden: opt.hidden,=0A=
			clbut:null,=0A=
			link:null,=0A=
			href:opt.href, //is tab action is to open URL=0A=
			target:opt.target, //target for URL=0A=
			label:null,=0A=
			close:opt.close=3D=3Dundefined ? this.props.close : opt.close,=0A=
			icon:opt.icon,=0A=
			markload:opt.markload, //alternate markload text=0A=
			firstload:0,=0A=
			onload:opt.onload=3D=3Dundefined ? this.props.onload : opt.onload,=0A=
			onshow:opt.onshow=3D=3Dundefined ? this.props.onshow : opt.onshow,=0A=
			onhide:opt.onhide=3D=3Dundefined ? this.props.onhide : opt.onhide,=0A=
			onbeforechange:opt.onbeforechange=3D=3Dundefined ? =
this.props.onbeforechange : opt.onbeforechange,=0A=
			onchange:opt.onchange=3D=3Dundefined ? this.props.onchange : =
opt.onchange,=0A=
			onbeforeclose:opt.onbeforeclose=3D=3Dundefined ? =
this.props.onbeforeclose : opt.onbeforeclose,=0A=
			onclose:opt.onclose=3D=3Dundefined ? this.props.onclose : opt.onclose=0A=
			};=0A=
	}=0A=
        this.sesupdate=3D0;=0A=
	if(!_uTabCtrl.globalset) {=0A=
		_uTabCtrl.globalset=3Dtrue;=0A=
//	    $(document).bind("mousedown",_uMENU.hideallmenus);=0A=
//	    $(window).bind("resize",_uMENU.hideallmenus);=0A=
	}=0A=
	this.butdown=3Dnew =
_uDraggable(this,null,null,null,function(but,tab){this.design._onbuttonup=
(this,but,tab);});=0A=
=0A=
	if(!this.props.noinit)this.init();=0A=
}=0A=
=0A=
=0A=
_uTabCtrl.all=3D[];=0A=
_uTabCtrl.nextidx=3D1;=0A=
_uTabCtrl.globalset=3Dfalse;=0A=
=0A=
_uTabCtrl.getbyname=3Dfunction(name) {=0A=
    var a=3Dthis.all;=0A=
    for(var i=3D0;i<a.length;i++) if(a[i] && a[i].name=3D=3Dname) return =
a[i];=0A=
    return null;=0A=
};=0A=
_uTabCtrl.closeTab=3Dfunction(name,idx) {=0A=
    var w=3Dthis.getbyname(name);=0A=
    if(w) w.closeTab(idx);=0A=
}=0A=
_uTabCtrl.content=3Dfunction(name,idx,c) {=0A=
    var w=3Dthis.getbyname(name);=0A=
    if(w)w.content(idx,c);=0A=
}=0A=
_uTabCtrl.headerheight=3Dfunction(name,idx,h) {=0A=
    var w=3Dthis.getbyname(name);=0A=
    if(w)w.headerheight(idx,h);=0A=
}=0A=
_uTabCtrl.footerheight=3Dfunction(name,idx,h) {=0A=
    var w=3Dthis.getbyname(name);=0A=
    if(w)w.footerheight(idx,h);=0A=
}=0A=
_uTabCtrl.setTitle=3Dfunction(name,idx,t) {=0A=
    var w=3Dthis.getbyname(name);=0A=
    if(w)w.setTitle(idx,t);=0A=
}=0A=
=0A=
_uTabCtrl.designs=3D{=0A=
    std: {=0A=
//    tab_height:'25px',=0A=
        content_class: 'u-tabc-content',=0A=
        header_class: 'u-tabc-header',=0A=
        footer_class: 'u-tabc-footer',=0A=
	tabctrl_init: function(o) {=0A=
	    var p=3D{};=0A=
		$(o.top).attr('class',"x-unselectable u-tabc").html(=0A=
 '<div class=3D"u-tabc-p"><div class=3D"u-tabc-listp"><div =
class=3D"u-tabc-list"></div><div class=3D"u-tabc-pbot"></div></div><div =
class=3D"u-tabc-scrbut"><div class=3D"u-tabc-tabl"><div =
class=3D"u-tabc-label"><div class=3D"u-tabc-scrl"></div><div =
class=3D"u-tabc-scrr"></div></div></div></div></div>'=0A=
+'<div class=3D"u-tabc-body"><div class=3D"u-tabc-content" =
style=3D"height:'+o.props.min_height+'px">'+o.props.emptycontent+'</div><=
/div>'=0A=
			);=0A=
	    p.pane=3D$(o.top).find(".u-tabc-p")[0];=0A=
	    p.panebot=3D$(o.top).find(".u-tabc-pbot")[0];=0A=
	    p.listp=3D$(o.top).find(".u-tabc-listp")[0];=0A=
	    p.list=3D$(o.top).find(".u-tabc-list")[0];=0A=
	    p.scrbut=3D$(o.top).find(".u-tabc-scrbut")[0];=0A=
	    p.scrl=3D$(o.top).find(".u-tabc-scrl")[0];=0A=
	    p.scrr=3D$(o.top).find(".u-tabc-scrr")[0];=0A=
	    p.body=3D$(o.top).find(".u-tabc-body")[0];=0A=
	    p.emptycontent=3Dp.content=3D$(o.top).find(".u-tabc-content")[0];=0A=
	    $(o.top).find("div,span").andSelf().attr("unselectable","on");=0A=
	    $(p.scrl).bind("click mousedown mouseover =
mouseout",{obj:o,but:0},_uTabCtrl._onscrbutevent);=0A=
	    $(p.scrr).bind("click mousedown mouseover =
mouseout",{obj:o,but:1},_uTabCtrl._onscrbutevent);=0A=
=0A=
	    return p;=0A=
	},=0A=
	remove_item: function(o,idx) {=0A=
		o.parts.list.removeChild(o.data[idx].obj);=0A=
	},=0A=
	set_title: function(o,idx) {=0A=
		$(o.data[idx].label).html(=0A=
			(o.data[idx].icon ? '<img class=3D"u-tabc-icon" border=3D"0" =
src=3D"'+o.data[idx].icon+'">' : ($.browser.msie && $.browser.version<8 =
? '<img class=3D"u-tabc-spacer" src=3D"/img/1px.gif" width=3D"1" =
height=3D"1" border=3D"0">' : ''))=0A=
			+o.data[idx].title=0A=
		);=0A=
	},=0A=
	insert_item: function(o,idx) {=0A=
		var a=3Ddocument.createElement('div');=0A=
		$(a).attr('class','u-tabc-tab'+(o.data[idx].close ? ' =
u-tabc-wcl':'')).html(=0A=
(o.data[idx].href ?=0A=
'<a '+(o.data[idx].target ? 'target=3D"'+o.data[idx].target+'" =
':'')+'href=3D"'+o.data[idx].href+'" class=3D"u-tabc-tabl" =
style=3D"display:block">' :=0A=
'<div class=3D"u-tabc-tabl">' )=0A=
			+(o.data[idx].close ? '<div class=3D"u-tabc-closebut"></div>' : '')=0A=
			+'<div class=3D"u-tabc-tabr"><div class=3D"u-tabc-label">'=0A=
			+(o.data[idx].icon ? '<img class=3D"u-tabc-icon" border=3D"0" =
src=3D"'+o.data[idx].icon+'">' : ($.browser.msie && $.browser.version<8 =
? '<img class=3D"u-tabc-spacer" src=3D"/img/1px.gif" width=3D"1" =
height=3D"1" border=3D"0">' : ''))=0A=
			+o.data[idx].title=0A=
			+'</div></div>'+(o.data[idx].href ? '</a>' : '</div>')=0A=
		);=0A=
		o.data[idx].obj=3Da;=0A=
		o.data[idx].label=3D$(a).find(".u-tabc-label")[0];=0A=
		o.data[idx].link=3D$(a).find(".u-tabc-tabl")[0];=0A=
	    if(o.data[idx].close) {=0A=
	    	o.data[idx].clbut=3D$(a).find(".u-tabc-closebut")[0];=0A=
			=
$(o.data[idx].clbut).bind("mouseover",this._onclbutmouseover).bind("mouse=
out",this._onclbutmouseout).bind("click",{obj:o,tab:o.data[idx]},_uTabCtr=
l._onclbutclick).bind("mousedown",{obj:o,tab:o.data[idx]},_uTabCtrl._oncl=
butdown);=0A=
	    }=0A=
		=
$(o.data[idx].link).bind("mouseover",this._ontabmouseover).bind("mouseout=
",this._ontabmouseout).bind("mousedown",{obj:o,tab:o.data[idx]},_uTabCtrl=
._ontabclick);=0A=
		$(a).find("div,span,a,img").andSelf().attr("unselectable","on");=0A=
		if(o.data[idx].ishidden) a.style.display=3D'none';=0A=
=0A=
		var nc=3Do.parts.list.childNodes.length;=0A=
//		if(o.props.rtl || window._rtl)=0A=
//			o.parts.list.insertBefore(a,nc-idx>=3Dnc ? null : =
o.parts.list.childNodes[nc-idx]);=0A=
//		else=0A=
			o.parts.list.insertBefore(a,idx>=3Dnc ? null : =
o.parts.list.childNodes[idx]);=0A=
	},=0A=
	_ontabmouseover: function(e) {=0A=
		$(this.parentNode).addClass("u-tabc-tab-over");=0A=
	},=0A=
	_ontabmouseout: function(e) {=0A=
		$(this.parentNode).removeClass("u-tabc-tab-over");=0A=
	},=0A=
	_onclbutmouseover: function(e) {=0A=
		$(this).addClass("u-tabc-closebut-over");=0A=
	},=0A=
	_onclbutmouseout: function(e) {=0A=
		$(this).removeClass("u-tabc-closebut-over");=0A=
	},=0A=
	_onclbutmousedown: function(b,v) {=0A=
		if(v) $(b).addClass("u-tabc-closebut-down");=0A=
			else $(b).removeClass("u-tabc-closebut-down");=0A=
	},=0A=
	_ontabactivate: function(o,idx) {=0A=
		$(o.data[idx].obj).addClass("u-tabc-tab-act");=0A=
	},=0A=
	_ontabdeactivate: function(o,idx) {=0A=
		$(o.data[idx].obj).removeClass("u-tabc-tab-act");=0A=
	},=0A=
	_onscrbutactivate: function(o,but,v) { //0-left else right=0A=
		if(v) $(!but ? o.parts.scrl : =
o.parts.scrr).removeClass("u-tabc-scr-dis");=0A=
			else $(!but ? o.parts.scrl : o.parts.scrr).addClass("u-tabc-scr-dis");=0A=
	},=0A=
	_onscrbutover: function(o,but,v) { //0-left else right=0A=
		var b=3D!but ? o.parts.scrl : o.parts.scrr;=0A=
		if(v) $(b).addClass("u-tabc-scr-over");=0A=
			else $(b).removeClass("u-tabc-scr-over");=0A=
	},=0A=
	_onscrbutdown: function(o,but,v) { //0-left else right=0A=
		var b=3D!but ? o.parts.scrl : o.parts.scrr;=0A=
		if(v) $(b).addClass("u-tabc-scr-down");=0A=
			else $(b).removeClass("u-tabc-scr-down");=0A=
	},=0A=
	_onbuttonup: function(o,but,tab) { //0-left scroll,1-right scroll,2-tab =
close=0A=
		if(but<2) this._onscrbutdown(o,but,0);=0A=
			else this._onclbutmousedown(tab.clbut,0);=0A=
	}=0A=
    }	=0A=
};=0A=
_uTabCtrl._onclbutdown=3Dfunction(e) {=0A=
		if(e.which=3D=3D1) {=0A=
			e.stopPropagation();=0A=
			e.data.obj.design._onclbutmousedown(e.data.tab.clbut,1);=0A=
			e.data.obj.butdown.start(e,2,e.data.tab);=0A=
		}=0A=
		_uWnd.globalmousedown();=0A=
};=0A=
_uTabCtrl._onscrbutevent=3Dfunction(e) {=0A=
		var o=3De.data.obj,but=3De.data.but;=0A=
		if(e.type=3D=3D'click' && e.which=3D=3D1) o.scrollTabPane(but ? 40 : =
-40);=0A=
			else if(e.type=3D=3D'mouseover') o.design._onscrbutover(o,but,1);=0A=
			else if(e.type=3D=3D'mouseout') o.design._onscrbutover(o,but,0);=0A=
			else if(e.type=3D=3D'mousedown' && e.which=3D=3D1) {=0A=
				o.design._onscrbutdown(o,but,1);=0A=
				o.butdown.start(e,but);=0A=
			}=0A=
};=0A=
_uTabCtrl._onclbutclick=3Dfunction(e) {=0A=
		var d=3De.data,o=3Dd.obj;=0A=
		for(var i=3D0;i<o.data.length;i++) =0A=
			if(o.data[i]=3D=3Dd.tab) {=0A=
				if(typeof o.data[i].onbeforeclose =3D=3D 'function') =
if(!o.data[i].onbeforeclose.call(o.app,o,i,o.data[i].id)) break;=0A=
				o.closeTab(i);=0A=
				break;=0A=
			}=0A=
		e.preventDefault();=0A=
		e.stopPropagation();=0A=
};=0A=
_uTabCtrl._ontabclick=3Dfunction(e) {=0A=
		var d=3De.data,o=3Dd.obj;=0A=
		e.preventDefault();=0A=
		for(var i=3D0;i<o.data.length;i++)=0A=
			if(o.data[i]=3D=3De.data.tab) {=0A=
				if(i=3D=3Do.active_tab) return;=0A=
				if(typeof o.data[i].onbeforechange =3D=3D 'function') =
if(!o.data[i].onbeforechange.call(o.app,o,i,o.data[i].id)) break;=0A=
				o.activateTab(i);=0A=
				break;=0A=
			}=0A=
};=0A=
=0A=
_uTabCtrl.prototype=3D{=0A=
        saveSession: function() {=0A=
            this.sesupdate=3D0;=0A=
            return {tab: this.active_tab };=0A=
        },=0A=
	init: function(noinit) {=0A=
		var t=3Ddocument.createElement("div");=0A=
		t.id=3D"_utabctrl"+this.idx;=0A=
		if(this.props.parentnode) this.props.parentnode.appendChild(t);=0A=
			else if(this.props.wnd) {=0A=
				var ww=3Dthis.props.wnd.parts.wndcont;=0A=
				while(ww.firstChild) ww.removeChild(ww.firstChild);=0A=
				ww.appendChild(t);=0A=
				this.wnd=3Dthis.props.wnd;=0A=
				this.wnd.tabctrl=3Dthis;=0A=
				this.wnd.state.loaded=3Dtrue;=0A=
				}=0A=
			else $($("body")[0]).append(t);=0A=
=0A=
		this.top=3Dt;=0A=
	        $(t).css({visibility:'hidden',display:'block'});=0A=
		if(this.width>0) $(t).css('width',this.width+'px');=0A=
//		if(this.height>0) $(t).css('height',this.height+'px');=0A=
=0A=
	    this.parts=3Dthis.design.tabctrl_init(this);=0A=
	    this.parts.markloadcont=3Dnull;=0A=
            this.parts.headercontent=3Dnull;=0A=
            this.parts.footercontent=3Dnull;=0A=
		this.show();=0A=
		if(!noinit)setTimeout("var =
m=3D_uTabCtrl.all["+this.idx+"];if(m)m.init1();",10);=0A=
	},=0A=
	init1: function(noresize) { //noresize used internally by windows=0A=
//calculate decor=0A=
		var p=3Dthis.parts,d=3Dthis.decor;=0A=
		if(!(this.width>0)) this.width=3Dthis.top.offsetWidth;=0A=
		if(!(this.height>0)) this.height=3Dthis.top.offsetHeight;=0A=
		d.cdw=3Dthis.top.offsetWidth-p.content.offsetWidth; //content decor w=0A=
		d.cdh=3Dthis.top.offsetHeight-p.content.offsetHeight; //content decor h=0A=
		d.pdw=3Dthis.top.offsetWidth-p.listp.offsetWidth; //panelist decor w=0A=
                d.hh=3D0; //active tab header height=0A=
                d.fh=3D0; //active tab footer height=0A=
		if(!this.props.wnd && !noresize) {=0A=
			$(this.top).css('height',this.height+'px');=0A=
			=
$(p.content).css({width:(this.top.offsetWidth-d.cdw)+'px',height:(this.to=
p.offsetHeight-d.cdh)+'px'});=0A=
			$(p.listp).css({width:(this.top.offsetWidth-d.pdw)+'px'});=0A=
		}=0A=
=0A=
		$(p.listp).css({overflow:'hidden'});=0A=
		$(p.panebot).css('width','4000px');=0A=
		$(p.list).css('width','4000px');=0A=
		for(var i=3D0;i<this.ntabs;i++)=0A=
			this.design.insert_item(this,i);=0A=
		if(this.props.wnd)=0A=
			=
this.resizeTo(this.props.wnd.width-this.props.wnd.decor.w,this.props.wnd.=
height-this.props.wnd.decor.h);=0A=
		var at=3Dthis.active_tab;=0A=
		this.active_tab=3D-1;=0A=
		if(at=3D=3D'auto')=0A=
			if(this.name && this.name.length>0 && self.location.hash.length>1) {=0A=
				var u=3Dself.location.hash.substr(1).split(';');=0A=
				var s=3D'T_'+this.name+'=3D';=0A=
				for(var ui=3D0;ui<u.length;ui++)=0A=
					if(u[ui].length>s.length && u[ui].substr(0,s.length)=3D=3Ds) {=0A=
						var tb=3Dthis.idxbyid(u[ui].substr(s.length));=0A=
						if(tb>=3D0 && tb<this.data.length) {at=3Dtb;break;}=0A=
					}=0A=
			} else at=3D-1;=0A=
	    $(this.top).css("display",'block').css("visibility",'');=0A=
	    if(at=3D=3D-1 && this.data.length>0) at=3D0;=0A=
	    if(at>=3D0 && at<this.ntabs) {=0A=
			for(var i=3D0;i<this.ntabs;i++) {=0A=
				var j=3D(at+i)%this.ntabs;=0A=
				if(!this.data[j].ishidden && (!this.data[j].onbeforechange || =
!!this.data[j].onbeforechange(this,j,this.data[j].id))) {=0A=
					this.activateTab(j,true);=0A=
					break;=0A=
				}=0A=
			}=0A=
		} else this.activateTab(-1,true);=0A=
=0A=
	    $(this.top).css("display",'none').css("visibility",'');=0A=
		this.state.init=3Dtrue;=0A=
	    if(pend_show) this.show(pend_show[0]);=0A=
	    if(this.props.wnd) this.props.wnd.onexternalload(); //activate =
autosize =0A=
	},=0A=
	scrollTabPane: function(dx) { //>0 - right=0A=
		var pos=3Dthis.scrollpos.pos+=3Ddx;=0A=
		var w=3Dthis.scrollpos.tabswidth,havew=3Dthis.scrollpos.havewidth;=0A=
		if(w<havew) {=0A=
			this.design._onscrbutactivate(this,0,0);=0A=
			this.design._onscrbutactivate(this,1,0);=0A=
			if((this.props.rtl || window._rtl) && this.data.length>0) {=0A=
				pos=3Dthis.data[this.data.length-1].obj.offsetLeft+havew-w;=0A=
			} else pos=3D0;=0A=
			this.scrollpos.pos=3Dpos;=0A=
			this.parts.listp.scrollLeft=3Dpos;=0A=
		} else {=0A=
			if(this.props.rtl || window._rtl) {=0A=
				var ol=3Dthis.data[this.data.length-1].obj.offsetLeft;=0A=
				if(pos<ol) pos=3Dol;=0A=
					else if(pos>ol+w-havew) pos=3Dol+w-havew;=0A=
			} else if(pos<0) pos=3D0;=0A=
					else if(pos>w-havew) pos=3Dw-havew;=0A=
			this.scrollpos.pos=3Dpos;=0A=
			this.parts.listp.scrollLeft=3Dpos;=0A=
			if(pos>0) this.design._onscrbutactivate(this,0,1);=0A=
				else this.design._onscrbutactivate(this,0,0);=0A=
			if(pos<w-havew) this.design._onscrbutactivate(this,1,1);=0A=
				else this.design._onscrbutactivate(this,1,0);=0A=
		}=0A=
	},=0A=
	_setscrolls: function() { //set scroll buttons status accroding to tab =
widths=0A=
		var w=3D0,havew=3Dthis.parts.listp.offsetWidth;=0A=
		if(this.parts.listp.clientWidth>0 && =
this.parts.listp.clientWidth<havew) havew=3Dthis.parts.listp.clientWidth;=0A=
		if(this.data.length>0) {=0A=
			var o=3Dthis.data[this.data.length-1];=0A=
			if(this.props.rtl || window._rtl) {=0A=
				var o2=3Dthis.data[0];=0A=
				w=3Do2.obj.offsetLeft+o2.obj.offsetWidth-o.obj.offsetLeft;=0A=
			} else w=3Do.obj.offsetLeft+o.obj.offsetWidth;=0A=
		}=0A=
		if(havew<w) { //enable scrolls=0A=
			this.parts.scrbut.style.display=3D'block';=0A=
			havew-=3Dthis.parts.scrbut.offsetWidth;=0A=
		} else this.parts.scrbut.style.display=3D'none';=0A=
			=0A=
		if(this.scrollpos.pos=3D=3Dnull) {=0A=
			if((this.props.rtl || window._rtl) && this.data.length>0) =
this.scrollpos.pos=3Dthis.data[this.data.length-1].obj.offsetLeft+w-havew=
;=0A=
				else this.scrollpos.pos=3D0;=0A=
		} else if(this.scrollpos.havewidth!=3Dhavew) =0A=
					if(this.props.rtl || window._rtl) =
this.scrollpos.pos+=3Dthis.scrollpos.havewidth-havew;=0A=
=0A=
		this.scrollpos.havewidth=3Dhavew;=0A=
		this.scrollpos.tabswidth=3Dw;=0A=
		this.scrollTabPane(0);=0A=
//		alert(w+','+havew);=0A=
	},=0A=
	show: function(rel) {=0A=
		if(!this.state.init) {pend_show=3D[rel];return;}=0A=
  		$(this.top).show();=0A=
	    this.state.visible=3Dtrue;=0A=
//	    if(rel) load();=0A=
	},=0A=
	resizeTo: function(w,h) {=0A=
	  var d=3Dthis.decor;=0A=
          with(this) {=0A=
		width=3Dw;=0A=
		height=3Dh;=0A=
//		$(this.top).css({height:h+'px',width:w+'px'});=0A=
		$(top).width(w).height(h);=0A=
		=
$(parts.content).css({width:(w-d.cdw)+'px',height:(h-d.cdh-d.fh-d.hh)+'px=
'});=0A=
		=
if(parts.headercontent)$(parts.headercontent).css({width:(w-d.cdw)+'px',h=
eight:d.hh+'px'});=0A=
		=
if(parts.footercontent)$(parts.footercontent).css({width:(w-d.cdw)+'px',h=
eight:d.fh+'px'});=0A=
		$(parts.listp).css({width:(w-d.pdw)+'px'});=0A=
		if(props.onresize) props.onresize.call(app,w-d.cdw,h-d.cdh,this,name);=0A=
		_setscrolls();=0A=
          }=0A=
	},=0A=
	addTab: function(title,dat,topt,idx) {=0A=
		var i=3D idx!=3Dundefined && idx>=3D0 && idx<this.data.length ? idx : =
this.data.length;=0A=
		var opt=3Dtopt || {};=0A=
		var id=3Dopt.id || '';=0A=
		if(!id || id.length=3D=3D0) id=3D'_tc'+this.idx+'tb'+(this.maxid++);=0A=
		var data=3D{=0A=
			id:id,=0A=
			title:title || '.',=0A=
			dat:dat || '',=0A=
                        footer: opt.footerc || null, //content of header =
(string or html obj)=0A=
                        footerh: opt.footerh && opt.footerh>0 ? =
opt.footerh : 0, //height of footer block if it was specified=0A=
                        header: opt.headerc || null, //content of footer =
(string or html obj)=0A=
                        headerh: opt.headerh && opt.headerh>0 ? =
opt.headerh : 0, //height of header block if it was specified=0A=
                        footercont: null, //real footer content=0A=
                        headercont: null, //real footer content=0A=
			cont:null,=0A=
                        ismarkload:0, //if tab is in markload state=0A=
			markloadcont:null,=0A=
			obj:null,=0A=
			ishidden: opt.hidden,=0A=
			clbut:null,=0A=
			link:null,=0A=
			href:opt.href,=0A=
			target:opt.target,=0A=
			label:null,=0A=
			close:opt.close=3D=3Dundefined ? this.props.close : opt.close,=0A=
			icon:opt.icon,=0A=
			markload:opt.markload,=0A=
			firstload:0,=0A=
			onload:opt.onload=3D=3Dundefined ? this.props.onload: opt.onload,=0A=
			onshow:opt.onshow=3D=3Dundefined ? this.props.onshow : opt.onshow,=0A=
			onhide:opt.onhide=3D=3Dundefined ? this.props.onhide : opt.onhide,=0A=
			onbeforechange:opt.onbeforechange=3D=3Dundefined ? =
this.props.onbeforechange : opt.onbeforechange,=0A=
			onchange:opt.onchange=3D=3Dundefined ? this.props.onchange : =
opt.onchange,=0A=
			onbeforeclose:opt.onbeforeclose=3D=3Dundefined ? =
this.props.onbeforeclose : opt.onbeforeclose,=0A=
			onclose:opt.onclose=3D=3Dundefined ? this.props.onclose : opt.onclose=0A=
			};=0A=
=0A=
		if(i<this.data.length) this.data.splice(i,0,data);=0A=
			else this.data[i]=3Ddata;=0A=
		this.design.insert_item(this,i);=0A=
		this._setscrolls();=0A=
		return i;=0A=
	},=0A=
	tabHidden: function(idx,ishidden) {=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		var a=3Dthis.data[idx];=0A=
		a.obj.style.display=3Dishidden ? 'none' : ''; =0A=
		a.ishidden=3D!!ishidden;=0A=
		this._setscrolls();=0A=
	},=0A=
	activateTab: function(idx,first) {=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length || this.active_tab=3D=3Didx) =
if(first && this.data.length>0) idx=3D0; else return;=0A=
		this.design._ontabactivate(this,idx);=0A=
		if(this.active_tab>=3D0 && this.active_tab<this.data.length) {=0A=
			if(typeof this.data[this.active_tab].onhide =3D=3D 'function') =
this.data[this.active_tab].onhide.call(this.app,this,this.active_tab,this=
.data[this.active_tab].id);=0A=
			this.design._ontabdeactivate(this,this.active_tab);=0A=
		}=0A=
		this.active_tab=3Didx;=0A=
		this._setscrolls();=0A=
                if(!first) this.sesupdate=3D1;=0A=
		if(typeof this.data[idx].onchange =3D=3D 'function') =
if(!this.data[idx].onchange.call(this.app,this,idx,this.data[idx].id)) =
return;=0A=
		this.load(idx);=0A=
	},=0A=
	closeTab: function(idx) {=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		if(idx=3D=3Dthis.active_tab && typeof this.data[idx].onhide =3D=3D =
'function') =
this.data[idx].onhide.call(this.app,this,idx,this.data[idx].id);=0A=
=0A=
		this.design.remove_item(this,idx);=0A=
		var id=3Dthis.data[idx].id;=0A=
		var f=3Dthis.data[idx].onclose;=0A=
		this.data.splice(idx,1);=0A=
		if(idx=3D=3Dthis.active_tab) {=0A=
			this.active_tab=3D-1;=0A=
			if(idx=3D=3Dthis.data.length) =0A=
				if(idx=3D=3D0) this._assign_content(-1);=0A=
					else this.activateTab(idx-1);=0A=
				else this.activateTab(idx);=0A=
		} else if(idx<this.active_tab) this.active_tab--;=0A=
		this._setscrolls();=0A=
		if(f) f(this,idx,id);=0A=
	},=0A=
	setTitle: function(idx,title) {=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		this.data[idx].title=3Dtitle;=0A=
		this.design.set_title(this,idx);=0A=
		this._setscrolls();=0A=
	},=0A=
        headerheight: function(idx,fh) {=0A=
	    idx=3Dthis.idxbyid(idx);=0A=
	    if(idx<0 || idx>=3Dthis.data.length) return;=0A=
            if(typeof(fh)!=3D'number' || isNaN(fh)) return;=0A=
            this.data[idx].headerh=3Dfh;=0A=
        },=0A=
        footerheight: function(idx,fh) {=0A=
	    idx=3Dthis.idxbyid(idx);=0A=
	    if(idx<0 || idx>=3Dthis.data.length) return;=0A=
            if(typeof(fh)!=3D'number' || isNaN(fh)) return;=0A=
            this.data[idx].footerh=3Dfh;=0A=
        },=0A=
	content: function(idx,c,hc,fc,iserror) { //c - content, hc - header =
content, fc - footer content=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		if(!this.data[idx].cont) {=0A=
			this.data[idx].cont=3Ddocument.createElement('DIV');=0A=
			$(this.data[idx].cont).addClass(this.design.content_class);=0A=
		}=0A=
		$(this.data[idx].cont).html(c);=0A=
                if(hc) {=0A=
    		    if(!this.data[idx].headercont) {=0A=
			this.data[idx].headercont=3Ddocument.createElement('DIV');=0A=
			$(this.data[idx].headercont).attr("class",this.design.content_class+' =
'+this.design.header_class).css("overflow","hidden");=0A=
		    }=0A=
		    $(this.data[idx].headercont).html(hc);=0A=
                } else if(this.data[idx].headercont) =
$(this.data[idx].headercont).html('');=0A=
                if(fc) {=0A=
    		    if(!this.data[idx].footercont) {=0A=
			this.data[idx].footercont=3Ddocument.createElement('DIV');=0A=
			$(this.data[idx].footercont).attr("class",this.design.content_class+' =
'+this.design.footer_class).css("overflow","hidden");=0A=
		    }=0A=
		    $(this.data[idx].footercont).html(fc);=0A=
                } else if(this.data[idx].footercont) =
$(this.data[idx].footercont).html('');=0A=
		this.data[idx].firstload=3Diserror ? 0 : 1;=0A=
		this.data[idx].ismarkload=3D0;=0A=
		if(idx=3D=3Dthis.active_tab) this._assign_content(idx);=0A=
	},=0A=
	_assign_content: function(idx) {=0A=
                var fh=3D0,hh=3D0,i; //footer height, header height=0A=
		if(idx<0) =
{this.parts.content=3Dthis.parts.emptycontent;this.parts.headercontent=3D=
this.parts.footercontent=3Dnull;}=0A=
		        else if(this.data[idx].ismarkload) =
{this.parts.content=3Dthis.data[idx].markloadcont;this.parts.headerconten=
t=3Dthis.parts.footercontent=3Dnull;}=0A=
			else {=0A=
                            this.parts.content=3Dthis.data[idx].cont;=0A=
                            =
this.parts.headercontent=3Dthis.data[idx].headercont;=0A=
                            hh=3Dthis.data[idx].headerh;=0A=
                            =
this.parts.footercontent=3Dthis.data[idx].footercont;=0A=
                            fh=3Dthis.data[idx].footerh;=0A=
                        }=0A=
                i=3D0; //current child index=0A=
                //set header s first child=0A=
                if(this.parts.headercontent) {=0A=
		    =
$(this.parts.headercontent).css({width:(this.width-this.decor.cdw)+'px',h=
eight:hh+'px'});=0A=
                    if(this.parts.body.childNodes[i]) =
this.parts.body.replaceChild(this.parts.headercontent,this.parts.body.chi=
ldNodes[i]);=0A=
                        else =
this.parts.body.appendChild(this.parts.headercontent);=0A=
                    this.decor.hh=3Dhh;=0A=
                    i++;=0A=
                } else this.decor.hh=3D0;=0A=
                //set main content=0A=
		=
$(this.parts.content).css({width:(this.width-this.decor.cdw)+'px',height:=
(this.height-this.decor.cdh-fh-hh)+'px'});=0A=
                if(this.parts.body.childNodes[i]) =
this.parts.body.replaceChild(this.parts.content,this.parts.body.childNode=
s[i]);=0A=
                        else =
this.parts.body.appendChild(this.parts.content);=0A=
                i++;=0A=
                //set footer=0A=
                if(this.parts.footercontent) {=0A=
		    =
$(this.parts.footercontent).css({width:(this.width-this.decor.cdw)+'px',h=
eight:fh+'px'});=0A=
                    if(this.parts.body.childNodes[i]) =
this.parts.body.replaceChild(this.parts.footercontent,this.parts.body.chi=
ldNodes[i]);=0A=
                        else =
this.parts.body.appendChild(this.parts.footercontent);=0A=
                    this.decor.fh=3Dfh;=0A=
                    i++;=0A=
                } else this.decor.fh=3D0;=0A=
                //remove excess childs if any=0A=
                while(this.parts.body.childNodes[i]) =
this.parts.body.removeChild(this.parts.body.childNodes[i]);=0A=
=0A=
		if(idx>=3D0 && !this.data[idx].ismarkload) {=0A=
                    if(typeof this.data[idx].onload =3D=3D 'function' && =
this.data[idx].firstload) =
this.data[idx].onload.call(this.app,this,idx,this.data[idx].id,this.parts=
.content,this.parts.headercontent,this.parts.footercontent);=0A=
		    if(typeof this.data[idx].onshow =3D=3D 'function') =
this.data[idx].onshow.call(this.app,this,idx,this.data[idx].id,this.parts=
.content,this.parts.headercontent,this.parts.footercontent);=0A=
                }=0A=
		if(idx>=3D0) this.data[idx].firstload=3D0;=0A=
	},=0A=
	markload: function(idx,txt) {=0A=
		idx=3Dthis.idxbyid(idx);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
		var c;=0A=
		if(this.data[idx].markload) { //this tab has its own markload page=0A=
			if(!this.data[idx].markloadcont) {=0A=
				this.data[idx].markloadcont=3Ddocument.createElement('DIV');=0A=
				=
$(this.data[idx].markloadcont).addClass("u-tabc-content").html(this.data[=
idx].markload);=0A=
			}=0A=
//			c=3Dthis.data[idx].markloadcont;=0A=
		} else {=0A=
			if(!this.parts.markloadcont) {=0A=
				this.parts.markloadcont=3Ddocument.createElement('DIV');=0A=
				=
$(this.parts.markloadcont).addClass("u-tabc-content").html(this.props.mar=
kload);=0A=
			}=0A=
                        =
this.data[idx].markloadcont=3Dthis.parts.markloadcont;=0A=
//			c=3Dthis.parts.markloadcont;=0A=
		}=0A=
                this.data[idx].ismarkload=3D1;=0A=
                this.data[idx].iserrorload=3D0;=0A=
		if(idx=3D=3Dthis.active_tab) this._assign_content(idx);=0A=
	},=0A=
	idxbyid: function(id) {=0A=
		if(typeof id=3D=3D'string') {=0A=
			for(var i=3D0;i<this.data.length;i++) if(this.data[i].id=3D=3Did) =
return i;=0A=
			return -1;=0A=
		} else return id;=0A=
	},=0A=
        findintab: function(idx,sel) { //applies css selector to tab =
content, including footer and header=0A=
	    idx=3Dthis.idxbyid(idx);=0A=
	    if(idx<0 || idx>=3Dthis.data.length) return $([]);=0A=
            var ob=3D$(this.data[idx].cont);=0A=
            if(this.data[idx].headercont) =
ob=3Dob.add(this.data[idx].headercont);=0A=
            if(this.data[idx].footercont) =
ob=3Dob.add(this.data[idx].footercont);=0A=
            return ob.find(sel);=0A=
        },=0A=
	load: function(idx,reload) {=0A=
	    idx=3Dthis.idxbyid(idx);=0A=
	    if(idx<0 || idx>=3Dthis.data.length) return;=0A=
	    if(this.data[idx].cont!=3Dnull && !reload) { //content is already =
loaded=0A=
		this._assign_content(idx);=0A=
		return;=0A=
	    }=0A=
	    var c=3Dthis.data[idx].dat;=0A=
	    if(typeof (c) =3D=3D 'string') =
this.content(idx,c,this.data[idx].header,this.data[idx].footer);=0A=
    	        else if(typeof c =3D=3D 'function') =
this.content(idx,c(),this.data[idx].header,this.data[idx].footer);=0A=
    	        else if(typeof c =3D=3D 'object') {=0A=
	            this.markload(idx);=0A=
                    if(!c.data)c.data=3D{};=0A=
                    if(!('_tci' in c.data)) c.data._tci=3Dthis.idx;=0A=
                    if(!('_ti' in c.data)) c.data._ti=3Didx;=0A=
                    if(this.app && !('_ai' in c.data)) =
c.data._ai=3Dthis.app.pid;=0A=
                    if(this.app && !('app' in c)) c.app=3Dthis.app.pid;=0A=
                    if(this.wnd && !('wnd' in c)) c.wnd=3Dthis.wnd.idx;=0A=
                    if(!('tabctrl' in c)) c.tabctrl=3Dthis.idx;=0A=
                    if(!('tabidx' in c)) c.tabidx=3Didx;=0A=
		    if(!c.success && c.xml=3D=3D=3Dfalse) =
{c.dataType=3D'text';c.success=3Dnew Function("data","st","var =
w=3D_uTabCtrl.all["+this.idx+"];if(w)w.content('"+this.data[idx].id+"',da=
ta);");}=0A=
	   		else if(!c.success && c.xml!=3D=3Dfalse) c.success=3Dnew =
Function("data","st","var =
w=3D_uTabCtrl.all["+this.idx+"];_uParseXML(data,w,'"+this.data[idx].id+"'=
,w.app);");=0A=
		    if(!c.error) c.error=3Dnew Function("xml","st","er","var =
w=3D_uTabCtrl.all["+this.idx+"];if(w)w._onerror('"+this.data[idx].id+"',x=
ml,st,er);");=0A=
		    try {=0A=
			if(c.form && (c.form.length>0 || c.form.nodeType)) //have form=0A=
	   			_uPostForm(c.form,c);=0A=
	   		else if(c.url) _uAjaxRequest(c.url,c);=0A=
		    } catch(e) {this._onerror(this.data[idx].id,null,'',e);}=0A=
    	        }=0A=
    	return true;=0A=
	},=0A=
	_onerror: function(id,xml,st,er) {=0A=
		var idx=3Dthis.idxbyid(id);=0A=
		if(idx<0 || idx>=3Dthis.data.length) return;=0A=
	    var o=3Dthis.props.onerror;=0A=
	    if(o && typeof(o)=3D=3D'function') o.apply(this.app,arguments);=0A=
			else this.content(idx,_txt('ErrorLoadTab',this.idx,idx),null,null,1);=0A=
	},=0A=
	destroy: function() {=0A=
		//remove items=0A=
		this.data.splice(0,this.data.length);=0A=
		this.parts=3Dnull;=0A=
		this.top.parentNode.removeChild(this.top);=0A=
		this.top=3Dnull;=0A=
		if(this.props.ondestroy) this.props.ondestroy(this,this.name);=0A=
	}=0A=
};=0A=
=0A=
function _uWnd (name,title,width,height,opts,content,menuitems,app) {=0A=
    if(name && name.length>0) {=0A=
		var t=3D_uWnd.getbyname(name);=0A=
		if(t) {t.reload(content);return false;}=0A=
    }=0A=
    this.constructor=3D_uWnd;=0A=
    this.desktop=3Dthis.opts && this.opts.desktop || _uWnd.defdesktop;=0A=
    this.props=3D$.extend({=0A=
//behavior=0A=
	parent: null, //parent window, necessary for modal mode if window is =
not system modal=0A=
	popup: 0, //whether window is closed when clicked outside=0A=
	alert: 0, //window has z-index above modal windows=0A=
	closeonesc: opts.popup ? 1 : 0, //close window on escape=0A=
        nohide: 0, //if true then window is hidden with visibility, not =
with display when minimized=0A=
//position and size=0A=
	x: 'auto',=0A=
	y: 'auto',=0A=
        initstate: null, //'max' or 'min for initially maximized or =
minimized window regardless of corresponding buttons (session can =
override this)=0A=
        headerh: 0, //height of content header. it is considered to be a =
part of window's decor=0A=
        headerc: null, //content of header, string with html or =
HTMLElement=0A=
        hideheader: 1, //whether header must become invisible when =
content loading is in progress=0A=
        footerh: 0, //height of content footer. it is considered to be a =
part of window's decor=0A=
        footerc: null, //content of footer, string with html or =
HTMLElement=0A=
        hidefooter: 1, //whether header must become invisible when =
content loading is in progress=0A=
        contentsizeprio: opts.footerh>0 || opts.headerh>0 ? 1 : 0,//if =
true, then preserving content height has priority when changing header =
or footer height (i.e. outer window height will be changed)=0A=
	nomove: 0, //window cannot be moved=0A=
        hideonmove: 1, //whether content is hidden when dragging=0A=
	center: opts.modal ? 1 : 0, //center window even for desktop (not =
cascaded)=0A=
	session: null, //saved session returned from saveSession=0A=
	hidden: 0, //whether initially hidden=0A=
	modal: 0, //system modal window if no parent window specified. just =
disables parent otherwise=0A=
	toolwindow: 0, //if true then this window is tool window (so it must =
have parent) and its activation look depends on parents focus, not own=0A=
	resize: opts.toolwindow ? 0 : 1, //whether window can be resized=0A=
	fixed: _uWnd.defdesktop || opts.desktop ? 0 : 1, //whether window is =
fixed to viewport (not actual for desktop)=0A=
	minh: 50, //min content height not counting footer and header=0A=
	minw: 0, //---same=0A=
	maxh: 0, //---same=0A=
	maxw: 0, //---same=0A=
//autosize=0A=
	autosize: opts.toolwindow ? 0 : 1,=0A=
	autosizewidth: 0, //whether autosize can change width=0A=
	autosizeonimages: 0, //restart auto size on every image load if content =
has images=0A=
	waitimages: 0, //if >0, then do not show content until all images are =
loaded (timeout is specified value), only during autosize=0A=
	hideonresize: 0, //make content invisible during autosize=0A=
//visual elements and effects=0A=
	icon: '', //icon image url=0A=
	header: title ? 1 : 0, //whether window has header=0A=
	min: this.desktop && !(opts.notaskbar || opts.parent || opts.toolwindow =
|| opts.alert || opts.modal) ? 1 : 0, //show minimize button=0A=
	max: this.desktop && !opts.modal ? 1 : 0, //show maximize/restore button=0A=
	close: 1, //show close button=0A=
	customButtons: null, //{ 'name': =
[init_visible,actionfunc(wnd,param),thispar,param || 'name']... }  =
'xt-name' class, 'xt-name-over' will be used when mouseover=0A=
	notaskbar: opts.parent || opts.toolwindow || opts.alert || opts.modal ? =
1 : 0,=0A=
	align: 'center',=0A=
	shadow: opts.toolwindow ? 0 : 1,=0A=
	design: 'std',=0A=
	fadetype: opts.toolwindow ? 0 : 1, //0 - no fade, 1 - animate opacity, =
2 - move down and opacity=0A=
	fadespeed: 800,=0A=
	fadeclosetype: opts.toolwindow ? 0 : 1, //0 - no fade, 1 - animate =
opacity, 2 - move down and opacity=0A=
	fadeclosespeed: 250,=0A=
	havemenu: menuitems ? 1 : 0,=0A=
	menuopts: null, //object with menu options, will be passed to menu =
constructor=0A=
	trayicon: null, //just string with icon image URL or object with all =
optional fields (image must be if window have no icon){title:title, =
img:image, param:param, thisobj:thisobj, =
ondown:handler,onclick:handler,onrdown:handler} if thisobj redefined, no =
standard handlers will be set. param is true for animated show/hide=0A=
	traymenu: null, //tray menu which will be set by standard onrdown =
handler (array with items)=0A=
        actlayer: 0, //cover window content and footers with transparent =
div when window is inactive for ability to activate when content is =
iframe or flash=0A=
//loading=0A=
	markload: '<div align=3D"left"><div class=3D"myWinLoad"></div></div>', =
//default mark load text=0A=
	havegrid: 0, //ability to showgrid and hidegrid for setting waiting =
notification to user.=0A=
	markwaitcont: '<div class=3D"myWinLoad"></div>', //default content of =
waiting notification layer (grided mode)=0A=
	markwaitclass: 'myWinGrid', //default class for waiting notification =
layer=0A=
=0A=
//event handlers=0A=
	oninit: null, //(wnd,wndname) called when window finished its =
initialization and content can be loaded, if returns false, no default =
content is assigned to window (can be used to assign already created tab =
control)=0A=
	oncontent: null, //(wnd,contElem) called after content is loaded into =
window and its object became accessible=0A=
	onposchange: null, //(wnd) called when window position, size or min/max =
state is changed=0A=
	onactivate: null, //(wnd) called when window is activated (got focus)=0A=
	ondeactivate: null, //(wnd) called when window is deactivated (lost =
focus)=0A=
	onerror: null, //(xml,status,error) called when error loading content. =
if not specified, window is just closed=0A=
	onbeforeclose: null, //(wnd) called after user 'close' event appears =
(button or taskbar). if true, then ignore close=0A=
	onclose: null, //(wnd,wndidx) called after window is destroyed=0A=
//	onmousemove: null, //(wnd,x,y,{ctrl:0,alt:0,shift:0,meta:0},event) =
send when mouse is moving over content area, x and y relative to content	=0A=
=0A=
//special=0A=
	desktop: null, //=0A=
	notabdestroy:0=0A=
    }, opts || {});=0A=
	if(this.props.modal || this.props.toolwindow) this.props.min=3D0;=0A=
	if(this.props.toolwindow) this.props.max=3D0;=0A=
	if(this.props.session) {=0A=
		this.props.x=3Dthis.props.session.x;=0A=
		this.props.y=3Dthis.props.session.y;=0A=
	}=0A=
//content is string, function returning string or object:=0A=
//  url - load window content (on show) by using request to this url, if =
xml=3Dtrue, content should be set by _uWnd.content(name,content) or =
wnd.content(content), otherwise result assumed to be plain html=0A=
//  form - send request (for 'url' option) using data from this form ID. =
if no 'url', use 'action'=0A=
//  xml - whether result of remote request is raw html or parsed XML=0A=
//  type - 'get' or 'post' methods when 'form' is specified, otherwise =
use form's 'method' attribute=0A=
//  cache - whether to allow browser to cache result of remote request=0A=
//  async - whether to do async remote request=0A=
//  success - alternative function(data,status) to process successful =
request (default depends on 'xml')=0A=
//  error - handler of error requests. =0A=
//  dataType - data type to return to 'success' function=0A=
    $.extend(this,=0A=
	{=0A=
	name: name,=0A=
	title: title ? title : '',=0A=
	letsize: 1, //average width of letters in title=0A=
	width: width && Math.abs(width)>10 ? width : -300,=0A=
	height: height && Math.abs(height)>10 ? height : -200,=0A=
        headerh: this.props.headerc && this.props.headerh>=3D0 ? =
this.props.headerh : 0,=0A=
        footerh: this.props.footerc && this.props.footerh>=3D0 ? =
this.props.footerh : 0,=0A=
	decor: {w:0, h:0, th:0}, //width of window decoration (it is added to =
content width to get window width)=0A=
	_content: content,=0A=
	state: =
{visible:false,prevvisible:false,minimized:false,maximized:false,loaded:f=
alse,init:false,disabled:false,grided:false,noshadow:false,resizing:false=
,destroyed:false,focused:false},=0A=
	grid: null, //grid object for modal windows=0A=
	frame: null, //background iframe for IE=0A=
	sh: null,//array of shadow objects=0A=
	sh_sz: [4,2], //shadow outdent and indent in pixels=0A=
	xpos: 0,=0A=
	ypos: 0,=0A=
	zpos: this.props.modal || this.props.alert ? _uWnd.getModalTopZ() : =
_uWnd.getTopZ(),=0A=
	_drag: new =
_uDraggable(this,this._ondragmousemove,null,this.onstartdrag,this.onstopd=
rag),=0A=
	_resize: new =
_uDraggable(this,this._onrsmousemove,null,this.onstartrs,this.onstoprs),=0A=
	restRect: null,=0A=
//		rsBut: {},=0A=
	minheight: this.props.minh,=0A=
	minwidth: this.props.minw,=0A=
	maxheight: this.props.maxh,=0A=
	maxwidth: this.props.maxw,=0A=
	pend_show: null,=0A=
	autosz: {active:false},=0A=
	imgloader: {timer:null,active:false},=0A=
	menu: null,=0A=
	app: app || null, //parent application. if assigned then all event =
handlers and content function are called in context of app=0A=
	childs: [],=0A=
	nchilds: 0, //number of all-level children=0A=
	tabctrl: null,=0A=
        sesupdate: 0=0A=
	});=0A=
    this.design=3Dthis.props.design && _uWnd.designs[this.props.design] =
|| _uWnd.designs['std'];=0A=
    this.idx=3D_uWnd.nextidx++;=0A=
    _uWnd.all[this.idx]=3Dthis;=0A=
    this._focus=3Dnew =
_uFocus({type:0,owner:this,thispar:this,parent:this.props.parent && =
this.props.toolwindow ? this.props.parent._focus : (this.app ? =
this.app._focus : null),onkeydown: this._onkeydown,onkeypress: =
this._onkeypress,onactivate: this._onactivate,ondeactivate: =
this._ondeactivate, canactivate: this._canactivate});=0A=
    if(!_uWnd.globalset) {=0A=
		_uWnd.globalset=3Dtrue;=0A=
//		$(document).bind("click",_uMenu.allmenushide);=0A=
//		$(document).bind("mouseup",_uWnd._onmouseup);=0A=
		$(document).bind("mousedown",_uWnd.closepopup);=0A=
//		$(document).bind("mousemove",_uWnd._onmousemove);=0A=
//		if($.browser.msie)$(document).bind("mouseout",function(e) =
{if(!e.relatedTarget && !e.toElement)_uWnd._dragging=3Dnull});=0A=
		$(window).bind("scroll",_uWnd._onscroll);=0A=
		$(window).bind("resize",_uWnd._onresize);=0A=
		_uWnd.sysmenu=3Dnew =
_uMENU('',{align:'D'},{hidden:1,withmarks:1,onitem:_uWnd._onsysmenuitem},=
_uWnd.sysmenuitems);=0A=
=0A=
    }=0A=
    this.init(menuitems);=0A=
}=0A=
=0A=
_uWnd.all=3D{};=0A=
_uWnd.nextidx=3D1;=0A=
_uWnd.zchilds=3D[];=0A=
_uWnd.lastz=3D0;=0A=
_uWnd.zstep=3D2;=0A=
_uWnd.minz=3D10000;=0A=
_uWnd.maxz=3D20000;=0A=
_uWnd.lastmodalz=3D0;=0A=
_uWnd.minmodalz=3D21000;=0A=
_uWnd.maxmodalz=3D25000;=0A=
_uWnd.globalset=3Dfalse;=0A=
_uWnd.defdesktop=3Dnull;=0A=
_uWnd.findactive=3Dfunction() {=0A=
	var t=3D_uFocus.current;=0A=
	while(t) {=0A=
		if(t.owner && t.owner.constructor=3D=3D_uWnd) return t;=0A=
		t=3Dt._parent;=0A=
	}=0A=
	return null;=0A=
};=0A=
_uWnd.globalmousedown=3Dfunction(){=0A=
	_uMENU.hideallmenus();=0A=
	_uSuggestList.hideall();=0A=
	_uComboBox.hideall();=0A=
	_uWnd.closepopup();=0A=
};=0A=
_uWnd.messageBoxclose=3Dfunction(w,wi) {=0A=
	var d=3Dw.props._msgdata;=0A=
	if(!d.retval) d.retval=3Dd.defc;=0A=
	if(d.onsel) d.onsel.call(d.app,d.retval,d.param,w);=0A=
};=0A=
_uWnd.messageBox=3Dfunction(txt,title,b,onselect,opts,param,app) { =
//message text, window title, buttons config=0A=
//b - [but1,but2,...]=0A=
//butX - string with id or object with props:=0A=
//id (mandatory): button id, one of 'ok','yes','not','retry','cancel' or =
any other (but text must be provided=0A=
//t: text label for button (or id will be used)=0A=
//def: +1 is button must be focused by default (or first will be used), =
+2 if button will be returned on ESC or window close (or last will be =
used)=0A=
=0A=
//opts are stabdard window properties plus:=0A=
	var props=3D$.extend({=0A=
		w: 'auto', //width=0A=
		h: 'auto', //height=0A=
		name: '', //window name=0A=
//predefined standard window options=0A=
		modal: 1,=0A=
		closeonesc: 1,=0A=
		align: 'center',=0A=
		min: 0,=0A=
		max: 0,=0A=
		close: 1,=0A=
		fadetype: 0,=0A=
		fadeclosetype: 0,=0A=
		resize:0,=0A=
		autosize:0=0A=
	},opts || {});=0A=
	var d=3D{onsel:onselect,app:app,param:param}; //all messagebox data=0A=
	props._msgdata=3Dd;=0A=
	props.onclose=3D_uWnd.messageBoxclose;=0A=
	props.oncontent=3D_uWnd.messageBoxoncont;=0A=
	var i,std,w;=0A=
	std=3D{'ok':1,'yes':1,'no':1,'retry':1,'cancel':1};=0A=
	d.buts=3D[];=0A=
	d.def=3Dnull;=0A=
	d.defc=3Dnull;=0A=
	if(!b || b.constructor!=3DArray) b=3D['ok'];=0A=
	for(i=3D0;i<b.length;i++) {=0A=
		if(typeof b[i]=3D=3D'string') d.buts.push({id:b[i],t:( std[b[i]] ? =
_txt(b[i]) : b[i] )});=0A=
		else if(typeof b[i]=3D=3D'object' && b[i].id) {=0A=
			d.buts.push({id:b[i].id,t:b[i].t || ( std[b[i].id] ? _txt(b[i].id) : =
b[i].id ),def:b[i].def});=0A=
		} =0A=
	}=0A=
	if(d.buts.length=3D=3D0) return 0;=0A=
	w=3D0;=0A=
	for(i=3D0;i<d.buts.length;i++) { //find default=0A=
		w+=3D60;=0A=
		if(d.buts[i].def) {=0A=
			if(d.buts[i].def & 1) d.def=3Dd.buts[i].id;=0A=
			if(d.buts[i].def & 2) d.defc=3Dd.buts[i].id;=0A=
		}=0A=
	}=0A=
	if(!d.def) d.def=3Dd.buts[0].id;=0A=
	if(!d.defc) d.defc=3Dd.buts[d.buts.length-1].id;=0A=
	d.txt=3Dtxt;=0A=
	//=0A=
	return new _uWnd(props.name || '',title,!props.w || props.w=3D=3D'auto' =
? -(w+50) : props.w,!props.h || props.h=3D=3D'auto' ? -100 : =
props.h,props,_uWnd.messageBoxcont,null,app);=0A=
	=0A=
};=0A=
_uWnd.messageBoxoncont=3Dfunction(w,c) {=0A=
	var d=3Dw.props._msgdata,o;=0A=
	o=3D$(w.parts.content).find('#_uw'+w.idx+"msg"+d.def)[0];=0A=
	if(o) o.focus();=0A=
};=0A=
_uWnd.messageBoxcont=3Dfunction(w) {=0A=
	var cont,d;=0A=
	d=3Dw.props._msgdata;=0A=
	cont=3D'';=0A=
	for(i=3D0;i<d.buts.length;i++) {=0A=
		cont+=3D'<td>'+_uButton('','b',{=0A=
			style:1, //d.def=3D=3Dd.buts[i].id ? 0 : 1, =0A=
			text:d.buts[i].t,=0A=
			content:'onclick=3D"var =
w=3D_uWnd.all['+w.idx+'];if(w){w.props._msgdata.retval=3D\''+encodeHtmlVa=
l(d.buts[i].id)+'\';w.close()}"',=0A=
			id:"_uw"+w.idx+"msg"+d.buts[i].id}=0A=
		)+'</td>';=0A=
	}=0A=
	=0A=
	return '<div style=3D"padding:20px 10px 10px 10px">'+d.txt+'</div><div =
style=3D"padding:0px 10px 10px 10px"><table align=3D"center" =
callpadding=3D"0" cellspacing=3D"10" =
border=3D"0"><tr>'+cont+'</tr></table></div>';=0A=
};=0A=
=0A=
_uWnd.alerts=3Dnull;=0A=
_uWnd.alert=3Dfunction(txt,title,opts,app) {=0A=
    =
opts=3D$.extend({w:150,h:100,tm:5000,close:1,align:'center',icon:'',name:=
'',pad:null},opts || {});=0A=
    if(opts.pad)txt=3D'<div =
style=3D"padding:'+opts.pad+'">'+txt+'</div>';=0A=
    var d,x,y,by,p,maxy;=0A=
    if(!(d=3D_uWnd.defdesktop)) {=0A=
    	d=3D_uWnd.getdims();=0A=
    	x=3Dd.clientW-opts.w-5;=0A=
    	by=3Dd.clientH-opts.h-5;//bottom y=0A=
    	p=3D_uWnd.alerts;=0A=
    	maxy=3D0;=0A=
    	d=3Dnull;=0A=
    } else {=0A=
		x=3Dd.width-d.calcexclude(1)-opts.w-5;=0A=
		by=3Dd.height-d.calcexclude(3)-opts.h-5;=0A=
		p=3Dd.alerts;=0A=
		maxy=3Dd.calcexclude(2);=0A=
    }=0A=
   	y=3Dby;=0A=
    if(p) {=0A=
		if(p.y-(opts.h+5)>=3D0) y=3Dp.y-(opts.h+5);=0A=
		while(p) {if(p.y>maxy) maxy=3Dp.y;p=3Dp.prev;}=0A=
		if(maxy>0 && by-maxy>=3Dopts.h+5)y=3Dby;=0A=
    }=0A=
    var w=3Dnew =
_uWnd(opts.name,title,opts.w,opts.h,{close:opts.close,min:0,max:0,icon:op=
ts.icon,align:opts.align,x:x,y:y,alert:1,autosize:0,fixed:1,shadow:0,resi=
ze:0,nomove:1,hidden:0,notaskbar:1,fadetype:2,fadespeed:500,fadeclosetype=
:2,fadeclosespeed:500,onclose:function(w,idx){_uWnd.rmalert(w,idx);}},txt=
,null,app);=0A=
    if(!d)_uWnd.alerts=3D{prev:_uWnd.alerts,wnd:w,y:y};=0A=
    	else d.alerts=3D{prev:d.alerts,wnd:w,y:y};=0A=
    if(opts.tm>0) setTimeout("var =
w=3D_uWnd.all["+w.idx+"];if(w)w.close();",opts.tm);=0A=
    return w;=0A=
};=0A=
_uWnd.rmalert=3Dfunction(w,idx) {=0A=
    var a=3Dw.desktop ? w.desktop.alerts : _uWnd.alerts,p=3Dnull;=0A=
    while(a && a.wnd!=3D=3Dw) {p=3Da;a=3Da.prev;}=0A=
    if(a && a.wnd=3D=3D=3Dw) if(p) p.prev=3Da.prev; else {=0A=
    	if(w.desktop) w.desktop.alerts=3Da.prev; else _uWnd.alerts=3Da.prev;=0A=
    }=0A=
};=0A=
_uWnd._onscroll=3Dfunction(e) {=0A=
    if(!$.browser.msie) return;=0A=
    var d=3D_uWnd.getdims(),a=3D_uWnd.all;=0A=
    for(var i in a) =0A=
	if(a[i]) if(a[i].props.fixed || a[i].grid) =
a[i].moveTo(a[i].xpos,a[i].ypos);=0A=
};=0A=
_uWnd._onresize=3Dfunction(e,dsk) { //if dsk then select by desktop, =
otherwize without desktop=0A=
    var d=3D_uWnd.getdims(),a=3D_uWnd.all;=0A=
    for(var i in a) if(a[i])  if((!dsk && !a[i].desktop) || =
a[i].desktop=3D=3Ddsk) a[i]._onresize(d);=0A=
};=0A=
_uWnd.closepopup=3Dfunction() {=0A=
    var a=3D_uWnd.all;=0A=
    for(var i in a)	if(a[i] && a[i].props.popup) a[i].closeevent();=0A=
};=0A=
_uWnd.findparent=3Dfunction(elem){ //find parent window for specified =
element=0A=
	var p=3Delem;=0A=
	while(p && p!=3Ddocument.body) {=0A=
		if(p.id && p.id.indexOf && p.id.indexOf('_uwndTop')=3D=3D0 && =
p._uwndobj) return p._uwndobj;=0A=
		p=3Dp.parentNode;=0A=
	}=0A=
	return null;=0A=
};=0A=
_uWnd.getbyname=3Dfunction(name) {=0A=
    var a=3Dthis.all;=0A=
    for(var i in a) if(a[i] && a[i].name=3D=3Dname) return a[i];=0A=
    return null;=0A=
};=0A=
_uWnd.getTopZ=3Dfunction(nc,ignw) { //number of all-level child windows =
for correct account of their influence=0A=
//ignw - window which must be ignored when rebuilding z indexes. if its =
specified then ignw.setZ must follow this function=0A=
  if(!nc)nc=3D0;=0A=
  with(_uWnd) {=0A=
    var z=3Dlastz;=0A=
    if(z<minz) z=3Dminz; else z+=3Dzstep;=0A=
    if(z+(1+nc)*zstep>maxz) {=0A=
		var x=3Dminz;=0A=
		var ar=3D[];//list of all top-level windows=0A=
		for(var i in all) if(all[i] && all[i]!=3Dignw && all[i].props && =
!all[i].props.parent) ar[ar.length]=3Dall[i];=0A=
		for(var i=3D0;i<zchilds.length;i++) if(zchilds[i]) =
ar[ar.length]=3Dzchilds[i];=0A=
		ar.sort(function(a,b){return a.zpos-b.zpos});=0A=
		for(var i=3D0;i<ar.length;i++) {=0A=
		    ar[i].setZ(x);=0A=
		    x+=3Dzstep*(1+(ar[i].nchilds ? ar[i].nchilds : 0));=0A=
		}=0A=
		z=3Dx;=0A=
    }=0A=
    lastz=3Dz+(1+nc)*zstep;=0A=
    return z;=0A=
  }=0A=
};=0A=
_uWnd.getModalTopZ=3Dfunction(nc,ignw) {=0A=
  if(!nc)nc=3D0;=0A=
  with(_uWnd) {=0A=
    var z=3Dlastmodalz;=0A=
    if(z<minmodalz) z=3Dminmodalz; else z+=3Dzstep;=0A=
    if(z+(1+nc)*zstep>maxmodalz) {=0A=
		var x=3Dminmodalz;=0A=
		var ar=3D[];=0A=
		for(var i in all) if(all[i] && all[i]!=3Dignw && all[i].props && =
!all[i].props.parent && (all[i].props.modal || all[i].props.alert)) =
ar[ar.length]=3Dall[i];=0A=
		ar.sort(function(a,b){return a.zpos-b.zpos});=0A=
		for(var i=3D0;i<ar.length;i++) {=0A=
		    ar[i].setZ(x);=0A=
		    x+=3Dzstep*(1+(ar[i].nchilds ? ar[i].nchilds : 0));=0A=
		}=0A=
		z=3Dx;=0A=
    }=0A=
    lastmodalz=3Dz+(1+nc)*zstep;=0A=
    return z;=0A=
  }=0A=
};=0A=
_uWnd.getdims=3Dfunction() {=0A=
    var d=3Ddocument;=0A=
    var s=3D'';=0A=
    return {clientW: Math.min($.browser.opera && window.innerWidth || =
$(window).width(),$.browser.safari && d.body.clientWidth || =
$(window).width(),$(window).width()),=0A=
	    clientH: Math.min($.browser.opera && window.innerHeight || =
$(window).height(),$.browser.safari && d.body.clientHeight || =
$(window).height(),$(window).height()),=0A=
	    clientLeft: $(d).scrollLeft(),=0A=
	    clientTop: $(d).scrollTop(),=0A=
	    docW: $(d).width(),=0A=
	    docH: $(d).height()};=0A=
};=0A=
_uWnd.csize=3Dfunction(elem,name) {=0A=
    if ( name !=3D "width" && name !=3D "height" ) return 0;=0A=
    var val, which =3D name =3D=3D "width" ? [ "Left", "Right" ] : [ =
"Top", "Bottom" ];=0A=
    val =3D name =3D=3D "width" ? elem.offsetWidth : elem.offsetHeight;=0A=
    var padding =3D 0, border =3D 0;=0A=
    jQuery.each( which, function() {=0A=
	padding +=3D parseFloat(jQuery.curCSS( elem, "padding" + this, true)) =
|| 0;=0A=
	border +=3D parseFloat(jQuery.curCSS( elem, "border" + this + "Width", =
true)) || 0;=0A=
    });=0A=
    val -=3D Math.round(padding + border);=0A=
    return Math.max(0, val);=0A=
}=0A=
_uWnd.close=3Dfunction(name) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w) w.close();=0A=
}=0A=
_uWnd.content=3Dfunction(name,c) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.content(c);=0A=
}=0A=
_uWnd.header=3Dfunction(name,c) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.header(c);=0A=
}=0A=
_uWnd.footer=3Dfunction(name,c) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.footer(c);=0A=
}=0A=
_uWnd.headerheight=3Dfunction(name,h) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.headerheight(h);=0A=
}=0A=
_uWnd.footerheight=3Dfunction(name,h) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.footerheight(h);=0A=
}=0A=
_uWnd.reload=3Dfunction(name,c) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.reload(c);=0A=
}=0A=
_uWnd.setTitle=3Dfunction(name,t) {=0A=
    var w=3D_uWnd.getbyname(name);=0A=
    if(w)w.setTitle(t);=0A=
}=0A=
_uWnd.activatetopwnd=3Dfunction(dsk) {=0A=
    var maxz=3D0,maxw=3Dnull,a=3D_uWnd.all;=0A=
    for(var i in a) {=0A=
		if(!a[i] || (dsk && a[i].desktop!=3Ddsk) || !a[i].state.visible || =
a[i].state.minimized || a[i].props.alert) continue;=0A=
		if(a[i].zpos>maxz){maxz=3Da[i].zpos;maxw=3Da[i];}=0A=
	}=0A=
	if(maxw)maxw.activate();=0A=
		else if(dsk) dsk.activate();=0A=
};=0A=
_uWnd.sysmenu=3Dnull;=0A=
_uWnd.sysmenuitems=3D[=0A=
	[_txt('Restore'),null,'rest'],=0A=
	[_txt('Minimize'),null,'min'],=0A=
	[_txt('Maximize'),null,'max'],=0A=
	'sep',=0A=
	[_txt('Close'),null,'close']	=0A=
];=0A=
_uWnd._onsysmenuitem=3Dfunction(idx,m,id) {=0A=
	var wnd=3Dm.forwnd;=0A=
	if(!wnd)return;=0A=
	switch(id) {=0A=
		case 'rest':=0A=
			if(wnd.state.minimized && wnd.ontaskbar)=0A=
				=
wnd.desktop.wndlist.design.animatewndrestore(wnd.desktop.wndlist,wnd);=0A=
				else=0A=
				wnd.restore(1);=0A=
			break;=0A=
		case 'min': =0A=
			wnd.minimize(); =0A=
			break;=0A=
		case 'max': =0A=
			if(wnd.state.minimized && wnd.ontaskbar) =0A=
				=
wnd.desktop.wndlist.design.animatewndmaximize(wnd.desktop.wndlist,wnd); =0A=
				else =0A=
				wnd.maximize(1);=0A=
			break;=0A=
		case 'close': =0A=
			wnd.closeevent(); =0A=
			break;=0A=
	}=0A=
};=0A=
_uWnd.designs=3D{=0A=
    std: {=0A=
	sh_sz: [4,2], //design specific shadow config=0A=
	altcloseclass: 'xt-close2',=0A=
=0A=
	shadow_init: function(top) {=0A=
	    var sh=3D[];=0A=
	    for(var i=3D0;i<3;i++) {=0A=
			sh[i]=3Ddocument.createElement("div");=0A=
			top.appendChild(sh[i]);=0A=
			$(sh[i]).attr("class","x-sh").css({position:"absolute",zIndex:1});=0A=
	    }=0A=
	    =
$(sh[0]).addClass("xsl").css({width:(this.sh_sz[0]+this.sh_sz[1])+"px",le=
ft:(-this.sh_sz[0])+"px",top:"0px"}).html('<div class=3D"xstl"><div =
class=3D"xsml"></div></div>');=0A=
	    =
$(sh[1]).addClass("xsr").css({width:(this.sh_sz[0]+this.sh_sz[1])+"px",to=
p:"0px"}).html('<div class=3D"xstr"><div class=3D"xsmr"></div></div>');=0A=
	    =
$(sh[2]).addClass("xsb").css({height:(this.sh_sz[0]+this.sh_sz[1])+"px",l=
eft:(-this.sh_sz[0])+"px"}).html('<div class=3D"xsbl"><div =
class=3D"xsbr"><div class=3D"xsbc"></div></div></div>');=0A=
	    return sh;=0A=
	},=0A=
	shadow_resize: function(sh,w,h) {=0A=
	    $(sh[0]).css({height:(h-this.sh_sz[1])+"px"});=0A=
	    =
$(sh[1]).css({height:(h-this.sh_sz[1])+"px",left:(w-this.sh_sz[1])+"px"})=
;=0A=
	    =
$(sh[2]).css({width:(w+this.sh_sz[0]*2)+"px",top:(h-this.sh_sz[1])+"px"})=
;=0A=
	},=0A=
	shadow_hide: function(sh) {=0A=
	    $(sh[0]).add(sh[1]).add(sh[2]).hide();=0A=
	},=0A=
	shadow_show: function(sh) {=0A=
	    $(sh[0]).add(sh[1]).add(sh[2]).show();=0A=
	},=0A=
	custButMargin: 5,=0A=
	wnd_init: function(o,wnd,title,align,inith,head,icon,resize,menu) {=0A=
		$(wnd).addClass("xw-plain").addClass("x-unselectable");=0A=
                if(o.props.alert) $(wnd).addClass("xw-active");=0A=
	    if(resize) $(wnd).addClass("xw-resize");=0A=
		var custbuts=3D'';=0A=
		if(o.props.customButtons) for(var i in o.props.customButtons) =0A=
			custbuts+=3D'<div class=3D"xt xt-'+i+'"></div>';=0A=
            $(wnd).html('<div class=3D"xw-disabled" =
style=3D"display:none;overflow:hidden;position:absolute;z-index:30010"></=
div>'+=0A=
            (head ? '<div class=3D"xw-tl"><div class=3D"xw-tr"><div =
class=3D"xw-tc">'=0A=
+ '<div class=3D"xw-sps"></div><div class=3D"xw-hdr">'=0A=
+ '<div class=3D"xt xt-close"></div><div class=3D"xt xt-maxi"></div><div =
class=3D"xt xt-rest"></div><div class=3D"xt xt-mini"></div>'=0A=
+ custbuts=0A=
+ (icon ? '<img unselectable=3D"on" onmousedown=3D"return false;" =
class=3D"xw-icon x-unselectable" src=3D"'+icon+'">' : '')=0A=
+ '<span class=3D"xw-hdr-text">'+title+'</span></div></div></div></div>' =
:=0A=
		'<div class=3D"xw-tl"><div class=3D"xw-tr"><div class=3D"xw-tc =
xw-tsps"></div></div></div>')=0A=
+ '<div class=3D"xw-ml"><div class=3D"xw-mr"><div class=3D"xw-mc">'=0A=
+ (menu ? '<div class=3D"u-wndmenufr"><div class=3D"u-wndmenu" =
style=3D"position:relative"></div></div>' : '' )=0A=
+ '<div class=3D"xw-body">'=0A=
+ (o.props.havegrid ? '<div class=3D"'+o.props.markwaitclass+'" =
style=3D"display:none;overflow:hidden;position:absolute;z-index:30000"></=
div>':'')=0A=
+ (o.props.headerc ? '<div class=3D"myWinCont myWinHeader" =
style=3D"overflow:hidden;height:'+o.headerh+'px"></div>' : '')=0A=
+ (o.props.actlayer ? '<div class=3D"xw-actlayer" =
style=3D"overflow:hidden;position:absolute;z-index:30005"></div>':'')=0A=
+ '<div style=3D"overflow:scroll;height:'+inith+'px">'=0A=
+ '<div class=3D"myWinCont" =
style=3D"display:none;overflow:hidden"'+(align ? ' align=3D"'+align+'"' =
: '')+'></div>'=0A=
+ '<div class=3D"myWinCont" style=3D"overflow:hidden"'+(align ? ' =
align=3D"'+align+'"' : '')+'></div></div>'=0A=
+ (o.props.footerc ? '<div class=3D"myWinCont myWinFooter" =
style=3D"overflow:hidden;height:'+o.footerh+'px"></div>' : '')=0A=
+ '</div></div></div></div>'=0A=
+ '<div class=3D"xw-bl"><div class=3D"xw-br"><div =
class=3D"xw-bc"></div></div></div>'=0A=
+ '<div class=3D"xw-blank" style=3D"display:none"></div>'=0A=
	    );=0A=
	    var p=3D{},contidx=3D0;=0A=
	    p.markdis=3D$(wnd).find(".xw-disabled")[0];=0A=
	    p.actlayer=3D$(wnd).find(".xw-actlayer")[0];=0A=
	    p.wndmove=3D$(wnd).find(".xw-blank")[0];=0A=
	    p.upper=3D$(wnd).find(".xw-tl")[0];=0A=
	    p.center=3D$(wnd).find(".xw-ml")[0];=0A=
	    p.bottom=3D$(wnd).find(".xw-bl")[0];=0A=
	    p.bottomc=3D$(wnd).find(".xw-bc")[0];=0A=
	    =
$(wnd).find(".xw-mc").bind("mousedown",o,_uWnd._activateonmousedown);=0A=
	    if(o.props.headerc) {=0A=
                p.headercont=3D$(wnd).find(".myWinCont")[contidx];=0A=
                $(p.headercont).html(o.props.headerc);=0A=
                contidx++;=0A=
            }=0A=
	    p.markload=3D$(wnd).find(".myWinCont")[contidx];=0A=
	    $(p.markload).html(o.props.markload);=0A=
	    p.wndcont=3D$(wnd).find(".myWinCont")[contidx+1];=0A=
	    if(o.props.footerc) {=0A=
                p.footercont=3D$(wnd).find(".myWinCont")[contidx+2];=0A=
                $(p.footercont).html(o.props.footerc);=0A=
            }=0A=
	    if(o.props.havegrid) {=0A=
	    	p.markwait=3D$(wnd).find("."+o.props.markwaitclass)[0];=0A=
	    	$(p.markwait).html(o.props.markwaitcont);=0A=
	    }=0A=
	    p.hwndcont=3Dp.wndcont.parentNode;=0A=
	    if(head) {=0A=
		p.hdr=3D$(wnd).find(".xw-hdr")[0];=0A=
		p.htitle=3D$(wnd).find(".xw-hdr-text")[0];=0A=
		var =
buts=3D{cbut:"xt-close",mbut:"xt-mini",xbut:"xt-maxi",rbut:"xt-rest",icon=
:"xw-icon"};=0A=
		for(var i in buts) {=0A=
		    p[i]=3D$(p.hdr).find("."+buts[i])[0];=0A=
		}=0A=
		p.custom=3D{};=0A=
		for(var i in o.props.customButtons) {=0A=
			p.custom[i]=3D$(p.hdr).find(".xt-"+i)[0];=0A=
		}=0A=
	    } else {=0A=
		p.hdr=3Dp.htitle=3Dp.cbut=3Dp.mbut=3Dp.xbut=3Dp.rbut=3Dp.icon=3Dnull;=0A=
	    }=0A=
	    if(menu) p.menu=3D$(wnd).find(".u-wndmenu")[0]; else p.menu=3Dnull;=0A=
	    $(wnd).find("div,span").andSelf().attr("unselectable","on");=0A=
	    return p;=0A=
	},=0A=
	onstartautosz: function(o) {=0A=
//		o.parts.hwndcont.style.overflow=3D"hidden";=0A=
		o.parts.wndcont.style.overflow=3D"hidden";=0A=
		o.parts.wndcont.style.height=3D"auto";=0A=
	},=0A=
	onstopautosz: function(o,onlyscroll) { //onlyscroll true to request =
restoration if scrool behavior only=0A=
//		o.parts.hwndcont.style.overflowY=3D"auto";=0A=
		if(!onlyscroll) o.parts.hwndcont.style.visibility=3D"";=0A=
		o.parts.wndcont.style.overflow=3D"auto";=0A=
		o.parts.wndcont.style.height=3D"100%";=0A=
	},=0A=
	get_szbuts: function(wnd) {=0A=
	    var =
rs=3D{nw:"xw-tl",n:"xw-sps",ne:"xw-tr",w:"xw-ml",e:"xw-mr",sw:"xw-bl",s:"=
xw-bc",se:"xw-br"};=0A=
	    for(var i in rs) {=0A=
			rs[i]=3D$(wnd).find("."+rs[i])[0];=0A=
	    }=0A=
	    if(!rs.n) rs.n=3D$(wnd).find(".xw-tsps")[0];=0A=
	    return rs;=0A=
	},=0A=
	onbuttonover: function(e) {=0A=
		var cls=3De.data.cls;=0A=
		if(e.data.state)=0A=
	    	$(this).addClass(cls+'-over');=0A=
	    else=0A=
	    	$(this).removeClass(cls+'-over');=0A=
	},=0A=
	onstartdrag: function(o) {=0A=
    	$(o.wnd).addClass('xw-dragging');=0A=
//	    if($.browser.msie) =
o.parts.upper.style.filter=3D"Alpha(Opacity=3D'70')";=0A=
//		else o.parts.upper.style.opacity=3D0.7;=0A=
	    if(!o.state.minimized && o.props.hideonmove) {=0A=
		o.hideSh();=0A=
		$(o.parts.center).add(o.parts.bottom).hide();=0A=
		=
$(o.parts.wndmove).css('width',o.width+'px').css('height',(o.height-o.dec=
or.th)+'px').show();=0A=
	    }=0A=
	},=0A=
	onstopdrag: function(o) {=0A=
    	$(o.wnd).removeClass('xw-dragging');=0A=
//	    if($.browser.msie) =
o.parts.upper.style.filter=3D'';//"Alpha(Opacity=3D'100')";=0A=
//		else o.parts.upper.style.opacity=3D1;=0A=
	    if(!o.state.minimized && o.props.hideonmove) {=0A=
		o.showSh();=0A=
		$(o.parts.center).add(o.parts.bottom).show();=0A=
		$(o.parts.wndmove).hide();=0A=
	    }=0A=
	},=0A=
	ondisable: function(o,st) { //st=3Dfalse to enable=0A=
		if(!st) { //show enabled=0A=
			$(o.parts.markdis).hide();=0A=
			if(o.state.focused || o.props.alert) {$(o.wnd).addClass("xw-active");}=0A=
		}=0A=
		else { //show disabled=0A=
			=
$(o.parts.markdis).css('width',Math.abs(o.width)+'px').css('height',Math.=
abs(o.height)+'px').show();=0A=
			$(o.wnd).removeClass("xw-active");=0A=
		}=0A=
	},=0A=
	onfocus: function(o,st) {=0A=
		if(st && !o.state.disabled) {$(o.wnd).addClass("xw-active");}=0A=
			else {$(o.wnd).removeClass("xw-active");}=0A=
	},=0A=
	onstartresize: function(o) {=0A=
	},=0A=
	onstopresize: function(o) {=0A=
	},=0A=
	onminimize: function(o) {=0A=
	    $(o.parts.center).css("display","none");=0A=
	    $(o.parts.bottomc).addClass("xw-bcm");=0A=
	    o.hideSh();=0A=
	},=0A=
	onrestore: function(o) {=0A=
	    $(o.parts.bottomc).removeClass("xw-bcm");=0A=
	    $(o.parts.center).css("display","block");=0A=
	    o.showSh();=0A=
	}=0A=
    }	=0A=
};=0A=
=0A=
_uWnd.prototype=3D{=0A=
showsysmenu: function(x,y) {=0A=
	this.activate();=0A=
	var m=3D_uWnd.sysmenu,i;=0A=
	if(!m) return;=0A=
	if((i=3Dm.indexById('rest'))>=3D0) {=0A=
		if((this.state.minimized && (this.props.max || =
this.state.beforemin!=3D'max')) || (this.props.max && =
this.state.maximized)) {=0A=
			$(m.parts.elems[i]).removeClass("u-graymenuitem");=0A=
			m.elems[i][1]=3Dnull;=0A=
		} else {=0A=
			$(m.parts.elems[i]).addClass("u-graymenuitem");=0A=
			m.elems[i][1]=3D1;=0A=
		}=0A=
	}=0A=
	if((i=3Dm.indexById('min'))>=3D0) {=0A=
		if(this.props.min && !this.state.minimized) {=0A=
			$(m.parts.elems[i]).removeClass("u-graymenuitem");=0A=
			m.elems[i][1]=3Dnull;=0A=
		} else {=0A=
			$(m.parts.elems[i]).addClass("u-graymenuitem");=0A=
			m.elems[i][1]=3D1;=0A=
		}=0A=
	}=0A=
	if((i=3Dm.indexById('max'))>=3D0) {=0A=
		if((this.props.max || (this.state.minimized && =
this.state.beforemin=3D=3D'max')) && !this.state.maximized) {=0A=
			$(m.parts.elems[i]).removeClass("u-graymenuitem");=0A=
			m.elems[i][1]=3Dnull;=0A=
		} else {=0A=
			$(m.parts.elems[i]).addClass("u-graymenuitem");=0A=
			m.elems[i][1]=3D1;=0A=
		}=0A=
	}=0A=
	m.forwnd=3Dthis;=0A=
	_uWnd.globalmousedown();=0A=
	m.show({pos:{x:x,y:y},parentfocus:this._focus});=0A=
},=0A=
_foreachchild: function(func,cfirst) { //foreach child executes =
parent.func(child) and makes recursive call (if cfirst is false) or in =
reverse order (if cfirst is true)=0A=
//when cfirst is false, then func() return value shows whether to stop =
recursion for that window=0A=
	var c;=0A=
	for(var i=3D0;i<this.childs.length;i++) {=0A=
		c=3Dthis.childs[i];=0A=
		if(!c || c.state.destroyed) continue;=0A=
		if(cfirst) {=0A=
			c._foreachchild(func,cfirst);=0A=
			func.call(this,c);=0A=
		} else {=0A=
			if(!func.call(this,c))=0A=
				c._foreachchild(func,cfirst);=0A=
		}=0A=
	}=0A=
},=0A=
setZ:function(z) {=0A=
  with(this){=0A=
    zpos=3Dz;=0A=
	var c;=0A=
	for(var i=3D0;i<this.childs.length;i++) {=0A=
		c=3Dthis.childs[i];=0A=
		if(!c || c.state.destroyed) continue;=0A=
		z+=3D_uWnd.zstep;=0A=
		c.setZ(z);=0A=
		z+=3D_uWnd.zstep*c.nchilds;=0A=
	}    =0A=
    $(top).css("z-index",zpos);=0A=
    if(grid)$(grid).css("z-index",zpos-1);=0A=
  }=0A=
},=0A=
saveSession: function() { //return data sutable to restore window state=0A=
    var r;=0A=
    if(this.state.maximized || this.state.minimized) r=3Dthis.restRect;=0A=
        else r=3D[this.xpos,this.ypos,this.width,this.height];=0A=
    return {=0A=
                x:r[0],=0A=
                y:r[1],=0A=
                w:r[2]-this.decor.w,=0A=
                h:r[3]-this.decor.h,=0A=
                bm:this.state.minimized ? this.state.beforemin : '',=0A=
                s:this.state.maximized ? 'max' : (this.state.minimized ? =
'min' : '')=0A=
	};=0A=
    this.sesupdate=3Dfalse;=0A=
},=0A=
moveTo:function(_x,_y,nopos) { //nopos - do not update session (used =
during init, maximize etc)=0A=
    var d=3D_uWnd.getdims();=0A=
  with(this) {=0A=
    if(_x=3D=3D'auto' && _y=3D=3D'auto' && desktop && !props.fixed && =
!props.autosize && !props.center) {=0A=
    	var p=3Ddesktop.getwndcoord(width,height);=0A=
    	_x=3Dp.x;=0A=
    	_y=3Dp.y;=0A=
    } else {=0A=
	    if(_x=3D=3D'auto') {=0A=
			if(props.parent) =
_x=3DMath.floor((props.parent.width-width)/2)+props.parent.xpos;=0A=
				else if(desktop && !props.fixed) =
_x=3DMath.floor((desktop.calcwidth()-width)/2)+desktop.calcexclude(0);=0A=
				else =
_x=3DMath.floor((d.clientW-width)/2)+(props.fixed?0:d.clientLeft);=0A=
	    	if(_x<0) _x=3D0;=0A=
	    }=0A=
	    if(_y=3D=3D'auto') {=0A=
			if(props.parent) =
_y=3DMath.floor((props.parent.height-height)/2)+props.parent.ypos;=0A=
				else if(desktop && !props.fixed) =
_y=3DMath.floor((desktop.calcheight()-height)/2)+desktop.calcexclude(2);=0A=
	    		else =
_y=3DMath.floor((d.clientH-height)/2)+(props.fixed?0:d.clientTop);=0A=
	    	if(_y<0) _y=3D0;=0A=
	    }=0A=
	}=0A=
    if(props.fixed && $.browser.msie && =
parseFloat($.browser.version)<=3D8) =
$(top).css("left",(d.clientLeft+_x)+'px').css("top",(d.clientTop+_y)+'px'=
);=0A=
	else $(top).css("left",_x+'px').css("top",_y+'px');=0A=
    if(grid) =0A=
	if($.browser.msie && parseFloat($.browser.version)<=3D8) =
$(grid).css("left",d.clientLeft+'px').css("top",d.clientTop+'px');=0A=
	    else $(grid).css("left",'0px').css("top",'0px');=0A=
    xpos=3D_x;=0A=
    ypos=3D_y;=0A=
    if(!nopos) sesupdate=3D1;=0A=
    if(this.props.onposchange) =
this.props.onposchange.apply(this.app,[this]);=0A=
  }=0A=
},=0A=
setTitle:function(t) {=0A=
    if(t!=3Dnull)this.title=3Dt;=0A=
    if(!this.title)this.title=3D'';=0A=
  with(this) {=0A=
    if(!props.header) return;=0A=
    var ts=3Dwidth-decor.w,l;=0A=
    ts-=3D_countbuttonwidth();=0A=
    l=3Dtitle.length;=0A=
    if(l*letsize>ts) l=3DMath.floor(ts/letsize)-2;=0A=
    if(l<title.length) =0A=
		$(parts.htitle).attr("title",title).text(title.substr(0,l)+'...');=0A=
		else=0A=
		$(parts.htitle).attr("title",'').text(title);=0A=
	if(ontaskbar) desktop._onsetwindowtitle(this);=0A=
  }=0A=
},=0A=
resizeTo:function(w,h,center,nopos) { //nopos - do not notify of pos =
change (used during init, maximize etc)=0A=
  with(this) {=0A=
  	if(w<0) w=3D(-w)+decor.w;//content size was specified  =0A=
  	if(h<0) h=3D(-h)+decor.h;//content size was specified  =0A=
    if(center) {=0A=
        var d=3D_uWnd.getdims();=0A=
		var _x=3Dxpos,_y=3Dypos;=0A=
	    if(props.x=3D=3D'auto') {=0A=
			if(props.parent) =
_x=3DMath.floor((props.parent.width-w)/2)+props.parent.xpos;=0A=
				else if(desktop && !props.fixed) =
_x=3DMath.floor((desktop.calcwidth()-w)/2)+desktop.calcexclude(0);=0A=
				else _x=3DMath.floor((d.clientW-w)/2)+(props.fixed?0:d.clientLeft);=0A=
	    	if(_x<0) _x=3D0;=0A=
	    }=0A=
	    if(props.y=3D=3D'auto') {=0A=
			if(props.parent) =
_y=3DMath.floor((props.parent.height-h)/2)+props.parent.ypos;=0A=
				else if(desktop && !props.fixed) =
_y=3DMath.floor((desktop.calcheight()-h)/2)+desktop.calcexclude(2);=0A=
	    		else _y=3DMath.floor((d.clientH-h)/2)+(props.fixed?0:d.clientTop);=0A=
	    	if(_y<0) _y=3D0;=0A=
	    }=0A=
		if(_x!=3Dxpos | _y!=3Dypos) moveTo(_x,_y,1);=0A=
    }=0A=
    $(wnd).css("width",w+'px');=0A=
    $(parts.wndcont).css("width",(w-decor.w)+'px');=0A=
    $(parts.hwndcont).css("height",(h-decor.h)+'px');=0A=
    if(parts.markwait) =
$(parts.markwait).css({height:(h-decor.h+footerh+headerh)+'px',width:(w-d=
ecor.w)+'px'});=0A=
    if(parts.actlayer) =
$(parts.actlayer).css({height:(h-decor.h)+'px',width:(w-decor.w)+'px'});=0A=
    if(parts.markdis) =
$(parts.markdis).css("width",w+'px').css("height",h+'px');=0A=
=0A=
    if(menu) $(parts.menu).css("width",(w-decor.w)+'px');=0A=
=0A=
    if(tabctrl) tabctrl.resizeTo(w-decor.w,h-decor.h);=0A=
    if(frame) $(frame).css("width",w+'px').css("height",h+'px');=0A=
    width=3Dw;=0A=
    height=3Dh;=0A=
    if(!nopos && !this.state.maximized && !this.state.minimized) =
sesupdate=3D1;=0A=
    if(this.props.onposchange && !this.state.maximized && =
!this.state.minimized) this.props.onposchange.apply(this.app,[this]);=0A=
    _resizeSh();=0A=
=0A=
    setTitle();=0A=
  }=0A=
},=0A=
_onresize:function(d) {=0A=
    if(this.state.maximized) =0A=
		if(this.desktop && !this.props.fixed) {=0A=
		    =
this.moveTo(this.desktop.calcexclude(0),this.desktop.calcexclude(2),1);=0A=
	    	=
this.resizeTo(this.desktop.calcwidth(),this.desktop.calcheight(),0,1);=0A=
		} else this.resizeTo(d.clientW,d.clientH);=0A=
    if(this.grid) =
$(this.grid).css("width",d.clientW+'px').css("height",d.clientH+'px');=0A=
},=0A=
_resizeSh:function() {=0A=
    =
if(this.sh)this.design.shadow_resize(this.sh,Math.abs(this.width),Math.ab=
s(this.height));=0A=
},=0A=
hideSh:function() {=0A=
    if(this.sh)this.design.shadow_hide(this.sh);=0A=
},=0A=
showSh:function() {=0A=
    if(this.sh && !this.state.noshadow)this.design.shadow_show(this.sh);=0A=
},=0A=
shadow_init:function() {=0A=
    this.sh=3Dthis.design.shadow_init(this.top);=0A=
},=0A=
showcustombutton: function(name,state) {=0A=
	if(!this.props.customButtons[name]) return;=0A=
	this.props.customButtons[name][0]=3Dstate;=0A=
	if(!this.parts.custom[name]) return; //window not initted yet=0A=
	if(!state) $(this.parts.custom[name]).css("display","none");=0A=
		else $(this.parts.custom[name]).css("display","block");=0A=
},=0A=
init: function(menuitems) {=0A=
    var p=3Dthis.props,t=3Ddocument.createElement("div"),w;=0A=
//top parent for window and optional shadow=0A=
	t.id=3D"_uwndTop"+this.idx;=0A=
	t._uwndobj=3Dthis;=0A=
    if(!this.desktop) $($("body")[0]).prepend(t);=0A=
    	else this.desktop.dsk.appendChild(t);=0A=
    this.top=3Dt;=0A=
    if(!p.fixed || ($.browser.msie && =
parseFloat($.browser.version)<=3D8))	$(t).css("position","absolute"); =
else $(t).css("position","fixed");=0A=
    =
$(t).css("visibility",'hidden').css("display",'block').css("z-index",this=
.zpos);=0A=
//grid for system modal windows=0A=
    if (p.modal && !p.parent){=0A=
		var g=3Ddocument.createElement("div"),d=3D_uWnd.getdims();=0A=
		=
$(g).addClass('myWinGrid').css("width",d.clientW+'px').css("height",d.cli=
entH+'px').css("z-index",this.zpos-1).hide().bind('mousedown',function(e)=
{e.stopPropagation();e.preventDefault();_uWnd.globalmousedown();});=0A=
		if($.browser.msie && parseFloat($.browser.version)<=3D8)	=
$(g).css("position","absolute"); else $(g).css("position","fixed");=0A=
	    if(!this.desktop) $($("body")[0]).prepend(g);=0A=
	    	else this.desktop.dsk.appendChild(g);=0A=
		this.grid=3Dg;=0A=
    }=0A=
    if($.browser.msie && parseFloat($.browser.version)<7){=0A=
        this.frame=3Ddocument.createElement("iframe");=0A=
        with(this.frame.style) {=0A=
            filter=3D"Alpha(Opacity=3D'0')";=0A=
            display=3D"block";=0A=
            position=3D"absolute";=0A=
//            zIndex=3D0;=0A=
            borderWidth=3D0;=0A=
            width=3DMath.abs(this.width)+'px';=0A=
            height=3DMath.abs(this.height)+'px';=0A=
        }=0A=
	t.appendChild(this.frame);=0A=
    }=0A=
=0A=
    if(p.shadow && !($.browser.msie && parseFloat($.browser.version)<7)) =
{=0A=
		this.shadow_init();=0A=
		this._resizeSh();=0A=
    }=0A=
=0A=
    this.moveTo(0,0,1);=0A=
//window=0A=
    w=3Ddocument.createElement("div");=0A=
    w.id=3D"_uwndWnd"+this.idx;=0A=
    t.appendChild(w);=0A=
    this.wnd=3Dw;=0A=
    $(w).css({position: "absolute",width: =
Math.abs(this.width)+'px',zIndex:2,left:0});=0A=
=0A=
	if(!_uWnd._activateonmousedown) =
_uWnd._activateonmousedown=3Dfunction(e){e.stopPropagation();e.data.activ=
ate(e);_uWnd.globalmousedown();};=0A=
	if(!_uWnd._activateonmousedownign) =
_uWnd._activateonmousedownign=3Dfunction(e){e.data.activate(e);_uWnd.glob=
almousedown();};=0A=
    =
this.parts=3Dthis.design.wnd_init(this,w,this.title,p.align,60,p.header,p=
.icon,p.resize,p.havemenu);=0A=
    if(p.header) {=0A=
		var =
bb=3D{cbut:"xt-close",mbut:"xt-mini",xbut:"xt-maxi",rbut:"xt-rest"};=0A=
		if(!_uWnd._retfalse) _uWnd._retfalse=3Dfunction(e){return false;};=0A=
		if(!_uWnd._onclickcustom) _uWnd._onclickcustom=3Dfunction(e){var =
d=3De.data;d.wnd.activate(e);d.func.call(d.thispar,d.wnd,d.param);};=0A=
		if(!_uWnd._onbuttonclose) =
_uWnd._onbuttonclose=3Dfunction(e){e.data.activate(e);e.data.closeevent()=
;};=0A=
		if(!_uWnd._onbuttonmin) =
_uWnd._onbuttonmin=3Dfunction(e){e.data.activate(e);e.data.minimize()};=0A=
		if(!_uWnd._onbuttonmax) =
_uWnd._onbuttonmax=3Dfunction(e){e.data.activate(e);e.data.maximize()};=0A=
		if(!_uWnd._onbuttonrest) =
_uWnd._onbuttonrest=3Dfunction(e){e.data.activate(e);e.data.restore()};=0A=
		//set common event handlers for system buttons=0A=
		for(var i in bb)=0A=
		    =
$(this.parts[i]).bind("dblclick",_uWnd._retfalse).bind("mouseover",{cls:b=
b[i],state:1},this.design.onbuttonover).bind("mouseout",{cls:bb[i],state:=
0},this.design.onbuttonover).bind("mousedown",this,_uWnd._activateonmouse=
down);=0A=
		//set event handlers for custom buttons=0A=
		for(var i in p.customButtons) {=0A=
		    =
$(this.parts.custom[i]).bind("dblclick",_uWnd._retfalse).bind("mouseover"=
,{cls:'xt-'+i,state:1},this.design.onbuttonover).bind("mouseout",{cls:'xt=
-'+i,state:0},this.design.onbuttonover).bind("mousedown",this,_uWnd._acti=
vateonmousedown);=0A=
			if(!p.customButtons[i][0]) =
$(this.parts.custom[i]).css("display","none");=0A=
			if(p.customButtons[i][1]) =
$(this.parts.custom[i]).bind("click",{wnd:this,func:p.customButtons[i][1]=
,thispar:p.customButtons[i][2],param:(p.customButtons[i][3] || =
i)},_uWnd._onclickcustom); //e.stopPropagation=0A=
		}=0A=
		//set specific event handlers for system buttons=0A=
		if(!p.close) $(this.parts.cbut).css("display","none");=0A=
		$(this.parts.cbut).bind("click",this,_uWnd._onbuttonclose); =
//e.stopPropagation=0A=
		if(!p.min) $(this.parts.mbut).css("display","none");=0A=
		$(this.parts.mbut).bind("click",this,_uWnd._onbuttonmin); =
//e.stopPropagation=0A=
		if(!p.max) $(this.parts.xbut).css("display","none");=0A=
		$(this.parts.xbut).bind("click",this,_uWnd._onbuttonmax); =
//e.stopPropagation=0A=
		=
$(this.parts.rbut).css("display","none").bind("click",this,_uWnd._onbutto=
nrest); //e.stopPropagation=0A=
		if(p.close && !p.min && !p.max && this.design.altcloseclass) {//use =
alternative class=0A=
			$(this.parts.cbut).addClass(this.design.altcloseclass);=0A=
		}=0A=
=0A=
		if(!_uWnd._onclicktodrag) _uWnd._onclicktodrag=3Dfunction(e){=0A=
			e.stopPropagation();=0A=
			e.data.activate(e);=0A=
			_uWnd.globalmousedown();return e.data._ondragmousedown(e);};=0A=
		if(!_uWnd._ondclicktomax) _uWnd._ondclicktomax=3Dfunction(e){var =
a=3De.data;if((a.state.maximized && a.props.max) || =
a.state.minimized)a.restore();else a.maximize();};=0A=
=0A=
		if(!p.nomove) $(this.parts.hdr).addClass("xw-draggable");=0A=
		=
$(this.parts.hdr).add(this.parts.htitle).bind("mousedown",this,_uWnd._onc=
licktodrag);=0A=
=0A=
		if(p.max || p.min) =
$(this.parts.hdr).bind("dblclick",this,_uWnd._ondclicktomax);=0A=
    }=0A=
	//set event handlers for size box=0A=
    var rs=3Dthis.design.get_szbuts(w);=0A=
    if(!_uWnd._onresizebuttondown) =
_uWnd._onresizebuttondown=3Dfunction(e){e.stopPropagation();e.data.w.acti=
vate(e);_uWnd.globalmousedown();return =
e.data.w._onrsmousedown(e,e.data.tp);};=0A=
    for(var i in rs) {=0A=
		$(rs[i]).bind("mousedown",{w:this,tp:i},_uWnd._onresizebuttondown);=0A=
    }=0A=
//    =
$(this.parts.wndcont).bind("mousedown",this,_uWnd._activateonmousedown); =
????=0A=
//    $(w).bind("mousedown",this,_uWnd._activateonmousedownign); ????=0A=
    $(w).bind("mousedown",this,_uWnd._activateonmousedown);=0A=
	if(p.havemenu) {=0A=
		var mopts=3D$.extend({=0A=
				parentnode:this.parts.menu,=0A=
				wnd:this,=0A=
				noabs:1,=0A=
				horiz:1,=0A=
				statical:1,=0A=
				width:'auto'=0A=
			},p.menuopts || {});=0A=
		this.menu=3Dnew _uMENU('',{},mopts,menuitems,true);=0A=
	}=0A=
    if(typeof this._content =3D=3D 'object' && =
this._content.constructor=3D=3D_uTabCtrl) {=0A=
    	this.tabctrl=3Dthis._content;=0A=
    	this.tabctrl.props.parentnode=3Dthis.parts.wndcont;=0A=
    	this.tabctrl.wnd=3Dthis;=0A=
    	this.tabctrl.init(true); //tab must be created with noinit property=0A=
    } else this.tabctrl=3Dnull;=0A=
	=0A=
	if(p.trayicon && this.desktop) {=0A=
		var to=3D{};=0A=
		if(p.trayicon.contructor=3D=3DString) to.img=3Dp.trayicon;=0A=
			else if(p.trayicon.contructor!=3DObject) if(p.icon)to.img=3Dp.icon;=0A=
		if(to.img) {=0A=
			if(!p.trayicon.thisobj) { //set standard handlers=0A=
				to.thisobj=3Dthis;=0A=
				if(!p.trayicon.ondown) to.ondown=3Dthis.ontrayicondown;=0A=
				if(!p.trayicon.onrdown) to.onrdown=3Dthis.ontrayiconrdown;=0A=
				to.param=3Dp.trayicon.param;=0A=
			} else $.extend(to,p.trayicon);=0A=
			if(!to.title) to.title=3Dthis.title || '';=0A=
			=
this.trayicon=3Dthis.desktop.addTrayIcon(to.img,to.title,to.thisobj,to.on=
down,to.onclick,to.onrdown,to.param);=0A=
			if(p.traymenu) {=0A=
				this.traymenu=3Dnew _uMENU('',{align:'U'},{hidden:1},p.traymenu);=0A=
			}=0A=
		}=0A=
	}=0A=
    if(!p.hidden) this.show(false);=0A=
    if(this.desktop && !p.popup && !p.alert && p.header && !p.notaskbar) =
{=0A=
    	this.ontaskbar=3Dtrue;=0A=
    	this.desktop._addwindow(this);=0A=
    } else this.ontaskbar=3Dfalse;=0A=
    if(p.modal && p.parent) { //disable parent=0A=
    	p.parent.disable(1);=0A=
    }=0A=
    if(this.props.parent) {=0A=
    	this.props.parent._onnewchild(this);=0A=
    }=0A=
    this.activate();=0A=
    if(p.header || this.menu) setTimeout("var =
w=3D_uWnd.all["+this.idx+"];if(w)w.init1();",10);=0A=
	else setTimeout("var w=3D_uWnd.all["+this.idx+"];if(w)w.init2();",10);=0A=
},=0A=
init1: function() {=0A=
	if(this.props.header) {=0A=
  		if(!this.title) this.letsize=3D8;=0A=
    		else=0A=
  			with(this) {=0A=
    			if(title.length=3D=3D0) letsize=3D8;=0A=
				else letsize=3Dparts.htitle.offsetWidth/title.length;=0A=
    			parts.htitle.innerHTML=3D'...';=0A=
  			}=0A=
  	}=0A=
	if(this.menu) this.menu.init1(true);=0A=
    setTimeout("var w=3D_uWnd.all["+this.idx+"];if(w)w.init2();",10);=0A=
},=0A=
init2: function() {=0A=
  with(this) {=0A=
    decor.sbw=3Dparts.hwndcont.offsetWidth-parts.hwndcont.clientWidth; =
//scroll bar width=0A=
    decor.sbh=3Dparts.hwndcont.offsetHeight-parts.hwndcont.clientHeight; =
//scroll bar width=0A=
    =
decor.w=3DMath.abs(width)-_uWnd.csize(parts.wndcont,"width")-decor.sbw;=0A=
    decor.h=3Dwnd.offsetHeight-60;=0A=
    decor.th=3Dparts.upper.offsetHeight;=0A=
    parts.hwndcont.style.overflow=3D'hidden';=0A=
    if(tabctrl)tabctrl.init1(true); =0A=
    else { //as content() won't be called for tabctrl, enable footer and =
header here=0A=
        if(parts.headercont) =
parts.headercont.style.visibility=3D'hidden';=0A=
        if(parts.footercont) =
parts.footercont.style.visibility=3D'hidden';=0A=
    }=0A=
    if(props.session)=0A=
        resizeTo(props.session.w+decor.w,props.session.h+decor.h,0,1);=0A=
    else=0A=
        resizeTo(width,height,0,1);=0A=
    moveTo(props.x,props.y,1);=0A=
    if(menu)menu._setsize();=0A=
=0A=
    state.init=3Dtrue;=0A=
    var rel=3Dpend_show ? pend_show[0] : false;=0A=
    if(props.oninit) if(!props.oninit.call(app,this,name)) rel=3Dfalse;=0A=
    $(top).css("display",'none').css("visibility",'');=0A=
    var s=3Dprops.session;=0A=
    s=3D(s && s.s) || props.initstate; //initial state state=0A=
    if(s=3D=3D'min') {=0A=
            minimize(1);=0A=
            state.beforemin=3D(s && s.bm) || '';=0A=
            if(!props.max && props.initstate=3D=3D'max') =
state.beforemin=3D'max';=0A=
        }=0A=
    	else if(s=3D=3D'max') maximize(0,1);=0A=
    	else=0A=
    	if(pend_show) show(rel,pend_show[1],pend_show[2]);=0A=
    sesupdate=3D0; //just in case=0A=
  }=0A=
},=0A=
disable: function(v,tmp) { //false to enable, true to disable; tmp - =
flag that this state change is temporary and must not modify state flag=0A=
//console.log("in disable for "+descr(this)+'value '+v+', tmp '+tmp);=0A=
	var c;=0A=
	if(!tmp) {=0A=
		if(v) {=0A=
			if(!this.state.disabled) { //disable all direct children=0A=
				for(var i=3D0;i<this.childs.length;i++) {=0A=
					c=3Dthis.childs[i];=0A=
					if(!c || c.state.destroyed || c.props.alert) continue;=0A=
					c.state.prevdisabled=3Dc.state.disabled;=0A=
					c.disable(1);=0A=
				}=0A=
			}=0A=
			this.state.disabled=3Dtrue;=0A=
		}=0A=
		else {=0A=
			if(this.state.disabled) { //restore enabled state of all direct =
children=0A=
				for(var i=3D0;i<this.childs.length;i++) {=0A=
					c=3Dthis.childs[i];=0A=
					if(!c || c.state.destroyed || c.props.alert || typeof =
c.state.prevdisabled=3D=3D'undefined') continue;=0A=
					c.disable(c.state.prevdisabled);=0A=
				}=0A=
			}=0A=
			this.state.disabled=3Dfalse;=0A=
		}=0A=
	}=0A=
	this.design.ondisable(this,v);=0A=
},=0A=
_onkeypress: function(e,un,t) {=0A=
    if(!this.state.disabled && this.state.visible && =
!this.props.toolwindow) { //opera reacts to keypress=0A=
		if(e.keyCode=3D=3D115 && e.ctrlKey && e.shiftKey) { //CTRL-SHIFT-F4=0A=
			e.preventDefault();=0A=
			return;=0A=
		}=0A=
    }=0A=
},=0A=
_onkeydown: function(e,un,t) {=0A=
    if(!this.state.disabled && this.state.visible && =
!this.props.toolwindow) {=0A=
		if((e.keyCode=3D=3D115 && e.ctrlKey && e.shiftKey) || =
(e.keyCode=3D=3D27 && this.props.closeonesc)) { //CTRL-SHIFT-F4 or ESC=0A=
			this.closeevent();=0A=
			return 1;=0A=
		}=0A=
		if(this.menu && (e.keyCode=3D=3D17 || e.keyCode=3D=3D18) && e.ctrlKey =
&& e.altKey && t.owner.constructor!=3D_uMENU) { //ctrl+alt=0A=
			_uWnd.globalmousedown();			=0A=
			this.menu.show(null,0);=0A=
			this.menu._focus.activate();=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
			return 1;=0A=
		}=0A=
	  	if(this.props.header && this.parts.hdr && e.keyCode=3D=3D32 && =
e.ctrlKey && !this.state.resizing) { //ctrl space=0A=
	  		var of=3D$(this.parts.hdr).offset();=0A=
	  		this.showsysmenu(of.left,of.top+this.parts.hdr.offsetHeight);=0A=
			e.preventDefault();=0A=
			e.stopPropagation();=0A=
	  		return 1;=0A=
	  	}=0A=
    }=0A=
},=0A=
_ondeactivate: function(un,t,newf) {=0A=
//console.log("ondeactivate in "+descr(this)+", target "+descr(t)+", =
newfocus "+descr(newf));=0A=
//	if(t!=3Dthis._focus) return; //ifnore deactivation of child focuses=0A=
	if(this.props.toolwindow) { //do nothing if our first non-tool parent =
remains active=0A=
		var p=3Dthis.props.parent;=0A=
		while(p && p.props.toolwindow) {=0A=
			p=3Dp.props.parent;=0A=
		}=0A=
		if(p && p._focus.isparentof(newf)) return;=0A=
	}=0A=
	this.state.focused=3D0;=0A=
	this.design.onfocus(this,0);=0A=
    if(this.props.ondeactivate) =
this.props.ondeactivate.apply(this.app,[this]);=0A=
	if(!this.props.toolwindow) {=0A=
		this._foreachchild( //show all child tool windows as deactivated=0A=
			function(c) {=0A=
				if(!c.props.toolwindow)return 1;=0A=
				c.state.focused=3D0;=0A=
				c.design.onfocus(c,0);=0A=
		},0);=0A=
	}=0A=
=0A=
},=0A=
_canactivate: function(un,old,t) {=0A=
//console.log("canactivate in "+descr(this)+", target "+descr(t)+", =
oldfocus "+descr(old)+',' +this.state.disabled);=0A=
//    if(t=3D=3Dthis._focus && this.state.disabled) {=0A=
//    	console.log('false');=0A=
//    	return 0;=0A=
//    } //forbid to activate any child focus=0A=
	if(this.props.alert || this.state.minimized) return 0;=0A=
=0A=
//    console.log('true');=0A=
    return 1;=0A=
},=0A=
activate: function(e,frommenu) {=0A=
//console.log("activate() in "+descr(this)+", event "+e);=0A=
	if(this.menu && !frommenu && this.menu._focus.isactive()) {=0A=
		this.menu._focus.deactivate(); //deactivate menu if some other focus =
in window is activated=0A=
	}=0A=
	if(this.props.alert) return;=0A=
	if(this.props.modal && this.props.parent)=0A=
		this.props.parent.setforeground();=0A=
	return this._focus.activate();=0A=
},=0A=
_onactivate: function(un,old,t) {=0A=
//console.log("onactivate in "+descr(this)+", target "+descr(t)+", =
oldfocus "+descr(old));=0A=
    if(t!=3Dthis._focus) {=0A=
//console.log('show deactivated');=0A=
//		this.design.onactivate(this,0);=0A=
    	return; //show as noactive if child activates=0A=
    }=0A=
    if(!this.state.disabled) {=0A=
	    this.state.focused=3D1;=0A=
		this.design.onfocus(this,1);=0A=
	    if(this.props.onactivate) =
this.props.onactivate.apply(this.app,[this]);=0A=
		if(!this.props.toolwindow) {=0A=
			this._foreachchild( //show all child tool windows as activated=0A=
				function(c) {=0A=
					if(!c.props.toolwindow)return 1;=0A=
					c.state.focused=3D1;=0A=
					c.design.onfocus(c,1);=0A=
			},0);=0A=
		}=0A=
	} else { //try to find enabled direct child=0A=
		var c;=0A=
		for(var i=3D0;i<this.childs.length;i++) {=0A=
			c=3Dthis.childs[i];=0A=
			if(!c || c.state.destroyed || c.state.disabled || c.props.alert) =
continue;=0A=
			this.setforeground();=0A=
			c.activate();=0A=
			return -1;=0A=
		}=0A=
		return;=0A=
	}=0A=
	this.setforeground();=0A=
},=0A=
setforeground: function() {=0A=
	if((this.props.modal && !this.props.parent) || this.props.alert) {=0A=
	    if(this.zpos+this.nchilds*_uWnd.zstep!=3D_uWnd.lastmodalz)=0A=
    		this.setZ(_uWnd.getModalTopZ(this.nchilds));=0A=
	} else {=0A=
	    if(this.zpos+this.nchilds*_uWnd.zstep!=3D_uWnd.lastz)=0A=
    		this.setZ(_uWnd.getTopZ(this.nchilds));=0A=
	}=0A=
},=0A=
ontrayicondown:function(anim,icon,e) {=0A=
	if(!this.state.visible && !this.state.minimized) if(anim) =
this.show(false); else this.show(false,0,0);=0A=
		else if(this.state.minimized) {=0A=
			if(this.state.beforemin=3D=3D'max')this.maximize(1);=0A=
				else this.restore(1);=0A=
		} else if(this.props.min && !this.props.notaskbar) this.minimize();=0A=
			else if(anim) this.hide(); else this.hide(0,0);=0A=
=0A=
},=0A=
ontrayiconrdown:function(pp,icon,e) {=0A=
	if(!this.traymenu) return;=0A=
	this.traymenu.show({pos:{x:e.pageX,y:e.pageY}});=0A=
	_uMENU.ignoreclick=3Dthis.traymenu;=0A=
},=0A=
show: function(rel,fadetp,fadesp) {=0A=
  if(arguments.length<2 || fadetp=3D=3Dundefined) =
fadetp=3Dthis.props.fadetype;=0A=
  if(arguments.length<3 || fadesp=3D=3Dundefined) =
fadesp=3Dthis.props.fadespeed;=0A=
if(!_uWnd._onshowanimend) _uWnd._onshowanimend=3Dfunction() { //this =
points to top or wnd=0A=
	var w=3D_uWnd.findparent(this);if(!w)return;=0A=
	w.disable(w.state.disabled,1); //restore real disabled state=0A=
	w.showSh();=0A=
};=0A=
  with(this) {=0A=
    if(!state.init) {pend_show=3D[rel,fadetp,fadesp];return;}=0A=
	if(state.visible) return;=0A=
    state.visible=3Dtrue;=0A=
    if(grid) $(grid).show();=0A=
    if(fadetp=3D=3D1) {=0A=
		disable(1,1);=0A=
		if($.browser.safari) hideSh();=0A=
		if($.browser.msie) {=0A=
//		    state.noshadow=3Dtrue;=0A=
		    hideSh();=0A=
	    	$(wnd).hide();=0A=
	    	$(top).show();=0A=
	    	$(wnd).css("opacity","0").show().animate( {opacity: 1} , =
{duration:fadesp,complete:_uWnd._onshowanimend});=0A=
		} else $(top).fadeIn(fadesp,_uWnd._onshowanimend);=0A=
    } else if(fadetp=3D=3D2) {=0A=
		disable(1,1);=0A=
		var endy=3DparseInt($(top).css("top"));=0A=
		$(top).css("top", (endy+(height>100 ? 100 : height))+'px');=0A=
		if($.browser.msie) {=0A=
//		    state.noshadow=3Dtrue;=0A=
		    hideSh();=0A=
		    $(wnd).hide();=0A=
		    $(top).show().animate( {top: endy+"px"} , =
{duration:fadesp,complete:_uWnd._onshowanimend});=0A=
		    $(wnd).css("opacity","0").show().animate( {opacity: 1} , fadesp);=0A=
		} else $(top).css("opacity","0").show().animate( {top: endy+"px", =
opacity: 1} , {duration:fadesp,complete:_uWnd._onshowanimend});=0A=
    } else {=0A=
        if(props.nohide) $(top).css({visibility:''});=0A=
        $(top).show();=0A=
        disable(state.disabled); //restore disabled state as hide() does =
not restore it=0A=
    }=0A=
    if(!state.loaded || rel) load();=0A=
  }=0A=
},=0A=
hide: function(fadetp,fadesp,doclose) {=0A=
    if(arguments.length<1 || fadetp=3D=3Dundefined) =
fadetp=3Dthis.props.fadeclosetype;=0A=
    if(arguments.length<2 || fadesp=3D=3Dundefined) =
fadesp=3Dthis.props.fadeclosespeed;=0A=
if(!_uWnd._onhideanimendcl) _uWnd._onhideanimendcl=3Dfunction() { //this =
points to top or wnd=0A=
	var w=3D_uWnd.findparent(this);if(!w)return;=0A=
	w.close(1);=0A=
};=0A=
  with(this) {=0A=
	if(!state.visible) return 0;=0A=
    state.visible=3Dfalse;=0A=
    if(fadetp=3D=3D1) {=0A=
	    disable(1,doclose ? 0 : 1); //if doclose, then disable permanently=0A=
		if($.browser.msie) {=0A=
//		    state.noshadow=3Dtrue;=0A=
		    hideSh();=0A=
		    $(wnd).animate( {opacity: 0} , {duration:fadesp,complete:doclose ? =
_uWnd._onhideanimendcl : null});=0A=
		} else $(top).fadeOut(fadesp, doclose ? _uWnd._onhideanimendcl : null);=0A=
	}=0A=
    else if(fadetp=3D=3D2) {=0A=
	    disable(1,doclose ? 0 : 1);=0A=
		var endy=3DparseInt($(top).css("top"))+(height>100 ? 100 : height);=0A=
		if($.browser.msie) {=0A=
//		    state.noshadow=3Dtrue;=0A=
		    hideSh();=0A=
		    $(top).animate( {top: endy+"px"} , =
{duration:fadesp,complete:doclose ? _uWnd._onhideanimendcl : null});=0A=
		    $(wnd).animate( {opacity: 0} , fadesp);=0A=
		} else $(top).animate( {top: endy+"px", opacity: 0} , =
{duration:fadesp,complete:doclose ? _uWnd._onhideanimendcl : null});=0A=
    } =0A=
    else {=0A=
        if(props.nohide) $(top).css({visibility:'hidden'});=0A=
            else $(top).hide();=0A=
        doclose=3Dfalse;=0A=
    }=0A=
    if(grid) $(grid).hide();=0A=
	if(_focus.isactive()) {=0A=
		_focus.deactivate();=0A=
		_uWnd.activatetopwnd(this.desktop);=0A=
	}=0A=
  }=0A=
    if(doclose)return 1;=0A=
    return 0;=0A=
},=0A=
markload: function() {=0A=
    with(this) {=0A=
        parts.wndcont.style.display=3D'none';=0A=
        parts.markload.style.display=3D'block';=0A=
        if(parts.headercont && props.hideheader) =
parts.headercont.style.visibility=3D'hidden';=0A=
        if(parts.footercont && props.hidefooter) =
parts.footercont.style.visibility=3D'hidden';=0A=
    }=0A=
},=0A=
showgrid: function() {=0A=
	if(this.parts.markwait) this.parts.markwait.style.display=3D'block';=0A=
},=0A=
hidegrid: function() {=0A=
	if(this.parts.markwait) this.parts.markwait.style.display=3D'none';=0A=
},=0A=
reload: function(c) {=0A=
    this._content=3Dc;=0A=
    if(typeof c =3D=3D 'object' && c.constructor=3D=3D_uTabCtrl)=0A=
    	this.tabctrl=3Dc;=0A=
    	else=0A=
    	this.tabctrl=3Dnull;=0A=
    this.state.loaded=3Dfalse;=0A=
//    this.disable(1); ????=0A=
    this.load();=0A=
    if(!this.props.hidden && !this.state.visible) this.show(false);=0A=
},=0A=
load: function() {=0A=
    if(this.tabctrl) return;=0A=
    var c=3Dthis._content;=0A=
    if(typeof (c) =3D=3D 'string') this.content(c);=0A=
    else if(typeof c =3D=3D 'function') =
this.content(c.apply(this.app,[this]));=0A=
    else if(typeof c =3D=3D 'object') {=0A=
	this.markload();=0A=
        if(!c.data)c.data=3D{};=0A=
        if(!('_wi' in c.data)) c.data._wi=3Dthis.idx;=0A=
        if(this.app && !('_ai' in c.data)) c.data._ai=3Dthis.app.pid;=0A=
        if(this.app && !('app' in c)) c.app=3Dthis.app.pid;=0A=
        if(!('wnd' in c)) c.wnd=3Dthis.idx;=0A=
	if(!c.success && c.xml=3D=3D=3Dfalse) =
{c.dataType=3D'text';c.success=3Dnew Function("data","st","var =
w=3D_uWnd.all["+this.idx+"];if(w)w.content(data);");}=0A=
	    else if(!c.success && c.xml!=3D=3Dfalse) c.success=3Dnew =
Function("data","st","var =
w=3D_uWnd.all["+this.idx+"];_uParseXML(data,w,0,w.app);");=0A=
	if(!c.error) c.error=3Dnew Function("xml","st","er","var =
w=3D_uWnd.all["+this.idx+"];if(w)w._onerror(xml,st,er);");=0A=
	try {=0A=
	if(c.form && c.form.length>0) //have form=0A=
	    _uPostForm(c.form,c);=0A=
	    else if(c.url) _uAjaxRequest(c.url,c);=0A=
	} catch(e) {this._onerror(null,'',e);}=0A=
    }=0A=
},=0A=
_onerror: function(xml,st,er) {=0A=
    var o=3Dthis.props.onerror;=0A=
    if(o && typeof(o)=3D=3D'function') o.apply(this,arguments);=0A=
	else this.close();	=0A=
},=0A=
header: function(fc) {=0A=
    var f=3Dthis.parts.headercont;=0A=
    if(!f) return;=0A=
    if(fc) $(f).html(fc); else $(f).html('');=0A=
},=0A=
footer: function(fc) {=0A=
    var f=3Dthis.parts.footercont;=0A=
    if(!f) return;=0A=
    if(fc) $(f).html(fc); else $(f).html('');=0A=
},=0A=
headerheight: function(fh) {=0A=
    if(!this.parts.headercont || typeof(fh)!=3D'number' || isNaN(fh)) =
return;=0A=
    var prev=3Dthis.headerh;=0A=
    if(prev=3D=3Dfh) return;=0A=
    this.decor.h+=3Dfh-prev;=0A=
    this.headerh=3Dfh;=0A=
    $(this.parts.headercont).css("height",(fh)+'px');=0A=
    this.resizeTo(this.width,this.height+(this.props.contentsizeprio ? =
fh-prev : 0));=0A=
},=0A=
footerheight: function(fh) {=0A=
    if(!this.parts.footercont || typeof(fh)!=3D'number' || isNaN(fh)) =
return;=0A=
    var prev=3Dthis.footerh;=0A=
    if(prev=3D=3Dfh) return;=0A=
    this.decor.h+=3Dfh-prev;=0A=
    this.footerh=3Dfh;=0A=
    $(this.parts.footercont).css("height",(fh)+'px');=0A=
    this.resizeTo(this.width,this.height+(this.props.contentsizeprio ? =
fh-prev : 0));=0A=
},=0A=
_checkimgload: function(load) { //if we wait for all images to be =
loaded, this func is called after each image to check if we're ready=0A=
	var im=3Dthis.imgloader;=0A=
	var i;=0A=
	if(!im.active) return;=0A=
	if(load) im.count++; //load means that this func was called from onload =
or onerror IMG handler=0A=
	if(im.images) for(i=3D0;i<im.images.length;i++)	=
if(!im.images[i].complete) break; //check that we have incomplete images=0A=
	if(i>=3Dim.images.length){this._stopimgload(true);return;} //if none, =
then finish=0A=
=0A=
	if(im.count>=3Dim.images.length) { //after some events complete was not =
updated=0A=
		if(im.timer) clearTimeout(im.timer);=0A=
        	im.timer=3DsetTimeout("var =
w=3D_uWnd.all["+this.idx+"];if(w){w.imgloader.timer=3Dnull;w._checkimgloa=
d();}",100);=0A=
	}=0A=
	if($.browser.opera && im.images2) { //for opera check virtual images=0A=
	    for(i=3D0;i<im.images2.length;i++) if(!im.images2[i].complete) =
return;=0A=
	    $(im.images2).unbind(); //all complete=0A=
	    im.images2=3Dnull;=0A=
            with(this) {=0A=
	        parts.hwndcont.style.visibility=3D'hidden';=0A=
    	        parts.markload.style.display=3D'none';=0A=
    	        $(parts.wndcont).css("display","block"); //show content so =
that normal load handlers get executed=0A=
                if(parts.headercont) =
parts.headercont.style.visibility=3D'';=0A=
                if(parts.footercont) =
parts.footercont.style.visibility=3D'';=0A=
            }=0A=
	}=0A=
},=0A=
_stopimgload: function(start) { //start - whether to start autosize, =
otherwise just reset image waiting=0A=
	var im=3Dthis.imgloader;=0A=
	if(im.active) {=0A=
		im.active=3Dfalse;=0A=
		if(im.stoptimer) {clearTimeout(im.stoptimer);im.stoptimer=3Dnull;}=0A=
		if(im.timer) {clearTimeout(im.timer);im.timer=3Dnull;}=0A=
		if(im.images) {im.images.unbind();im.images=3Dnull;}=0A=
		if(im.images2) {$(im.images2).unbind();im.images2=3Dnull;}=0A=
=0A=
		if(start) {=0A=
                  with(this) {=0A=
		    if(props.hideonresize) parts.hwndcont.style.visibility=3D'hidden'; =
//hide content on autosize=0A=
    		    parts.markload.style.display=3D'none';=0A=
    		    $(parts.wndcont).css("display","block");=0A=
                    if(parts.headercont) =
parts.headercont.style.visibility=3D'';=0A=
                    if(parts.footercont) =
parts.footercont.style.visibility=3D'';=0A=
	    	    autosz.load=3Dtrue;=0A=
	    	    delaychecksize();=0A=
                  }=0A=
	        }=0A=
	}=0A=
},=0A=
content: function(c) {=0A=
    this._stopimgload();=0A=
    this.stopautosize();=0A=
    var =
a=3Dthis.autosz,w=3Dthis.parts.wndcont,p=3Dthis.props,im=3Dthis.imgloader=
,f=3Dthis.parts.footercont,h=3Dthis.parts.headercont;=0A=
=0A=
    this.state.loaded=3Dtrue;=0A=
    if(p.autosize && p.waitimages>0) { //hide content until all images =
are loaded=0A=
        this.markload();=0A=
        $(w).html(c);=0A=
	if(this.props.oncontent) this.props.oncontent.apply(this.app,[this,w]);=0A=
=0A=
    	im.active=3Dtrue;=0A=
	im.stoptimer=3DsetTimeout("var =
w=3D_uWnd.all["+this.idx+"];if(w)w._stopimgload(true);",p.waitimages);=0A=
	if(!_uWnd.waitimagesfunc) _uWnd.waitimagesfunc=3Dfunction(e) {=0A=
		var im=3De.data.imgloader;=0A=
		if(im.timer) clearTimeout(im.timer);=0A=
		im.timer=3DsetTimeout("var =
w=3D_uWnd.all["+e.data.idx+"];if(w){w.imgloader.timer=3Dnull;w._checkimgl=
oad(1);}",10);=0A=
		};=0A=
	im.count=3D0;=0A=
    	=
im.images=3D$(w).find("img").bind('error',this,_uWnd.waitimagesfunc).bind=
('load',this,_uWnd.waitimagesfunc);=0A=
	if($.browser.opera && im.images.length>0) { //opera does not preload =
hidden images=0A=
		im.images2=3D[];=0A=
		for(var i=3D0;i<im.images.length;i++) =
im.images2[i]=3D$("<img>").attr("src",im.images[i].src).bind('load',this,=
_uWnd.waitimagesfunc)[0];=0A=
	}=0A=
    	this._checkimgload();=0A=
    } else {=0A=
        if(p.autosize && =
p.hideonresize)this.parts.hwndcont.style.visibility=3D'hidden';=0A=
        this.parts.markload.style.display=3D'none';=0A=
        $(w).css("display","block").html(c);=0A=
        if(h) h.style.visibility=3D'';=0A=
        if(f) f.style.visibility=3D'';=0A=
        a.load=3Dtrue;=0A=
	if(p.autosize) {=0A=
	    if(this.props.oncontent) =
this.props.oncontent.apply(this.app,[this,w]);=0A=
	    this.delaychecksize();=0A=
	} else {=0A=
	    this.design.onstopautosz(this);=0A=
	    if(this.props.oncontent) =
this.props.oncontent.apply(this.app,[this,w]);=0A=
	}=0A=
    }=0A=
=0A=
},=0A=
onexternalload: function() {=0A=
  with(this) {=0A=
    _stopimgload();=0A=
    stopautosize();=0A=
=0A=
    state.loaded=3Dtrue;=0A=
    autosz.load=3Dtrue;=0A=
    if(parts.headercont) parts.headercont.style.visibility=3D'';=0A=
    if(parts.footercont) parts.footercont.style.visibility=3D'';=0A=
    if(props.autosize) delaychecksize();=0A=
  }=0A=
},=0A=
stopautosize: function() {=0A=
	var a=3Dthis.autosz;=0A=
	if(a.inittimer) {clearTimeout(a.inittimer);a.inittimer=3Dnull;}=0A=
	if(a.timer){clearTimeout(a.timer);a.timer=3Dnull;}=0A=
	if(a.images) {$(a.images).unbind();a.images=3Dnull;}=0A=
	if(a.active)this.design.onstopautosz(this);=0A=
	a.active=3Dfalse;=0A=
},=0A=
delaychecksize: function(d) { //true if called due to autosizeonimages, =
delay=0A=
	d=3Dd || 10;=0A=
	var a=3Dthis.autosz;=0A=
	if(a.inittimer) clearTimeout(a.inittimer);=0A=
    a.inittimer=3DsetTimeout("var =
w=3D_uWnd.all["+this.idx+"];if(w);w.checksize();",d);=0A=
 =0A=
},=0A=
_countbuttonwidth: function() {=0A=
	var w=3D0;=0A=
	var buts=3D{cbut:1,mbut:1,xbut:1,rbut:1,icon:1};=0A=
	for(var i in buts) if(this.parts[i])w+=3Dthis.parts[i].offsetWidth;=0A=
	for(var i in this.props.customButtons) =
w+=3Dthis.parts.custom[i].offsetWidth+this.design.custButMargin;=0A=
	return w;=0A=
},=0A=
checksize: function(autoload) { //true if called due to autosizeonimages=0A=
    var a=3Dthis.autosz,w=3Dthis.parts.wndcont;=0A=
	a.inittimer=3Dnull;=0A=
    if(this.state.maximized || this.state.minimized) return;=0A=
    this.stopdrag();=0A=
    this.stopresize();=0A=
    if(a.load) {=0A=
		a.load=3Dfalse;=0A=
		if(a.images) {$(a.images).unbind();a.images=3Dnull;}=0A=
		if(this.props.autosizeonimages) {=0A=
			if(!_uWnd.autosizeonimagesfunc) =
_uWnd.autosizeonimagesfunc=3Dfunction(e) {e.data.delaychecksize();};=0A=
			=
a.images=3D$(w).find("img").bind('load',this,_uWnd.autosizeonimagesfunc);=0A=
		}=0A=
    }=0A=
    a.active=3Dtrue;=0A=
	this.design.onstartautosz(this);=0A=
	if(a.timer){clearTimeout(a.timer);a.timer=3Dnull;}=0A=
=0A=
    var d=3D_uWnd.getdims(),minw=3D10,minh=3D10,maxw,maxh;=0A=
    if(this.props.header) {=0A=
        minw+=3Dthis._countbuttonwidth(); //minimal content width must =
include all header buttons=0A=
    }=0A=
    minw=3DMath.max(minw,this.minwidth);=0A=
    minh=3DMath.max(minh,this.minheight); =0A=
    maxw=3Dthis.maxwidth;=0A=
    if(maxw=3D=3D0) maxw=3Dd.clientW-this.decor.w;=0A=
    maxh=3Dthis.maxheight;=0A=
    if(maxh=3D=3D0) maxh=3Dd.clientH-this.decor.h; //decor.h includes =
footer and header!!!=0A=
=0A=
    var contW,contH; //scrollwidth and height=0A=
	if(this.props.autosizewidth) {=0A=
		$(this.parts.wndcont).css("width",'10px');=0A=
		contW=3Dw.scrollWidth;=0A=
		$(this.parts.wndcont).css({width:(this.width-this.decor.w)+'px'});=0A=
	} else contW=3Dw.scrollWidth;=0A=
    contH=3Dw.scrollHeight+1;=0A=
//    =
a.tw=3DMath.min(Math.max(w.scrollWidth+scrW,w.offsetWidth,minw),maxw);=0A=
//    a.th=3DMath.min(Math.max(w.scrollHeight+scrH,w.clientHeight ? =
w.clientHeight : w.offsetHeight,minh),maxh);=0A=
	a.tw=3DMath.max(contW,minw);=0A=
	a.th=3DMath.max(contH,minh);=0A=
	var havescroll=3Dfalse;=0A=
	if(a.tw>maxw) {a.tw=3Dmaxw;a.th+=3Dthis.decor.sbh;havescroll=3Dtrue;}=0A=
	if(a.th>maxh) {=0A=
		a.th=3Dmaxh;=0A=
		if(a.tw+this.decor.sbw<=3Dmaxw) =
{a.tw+=3Dthis.decor.sbw;havescroll=3Dtrue;}=0A=
			else a.tw=3Dmaxw;=0A=
		}=0A=
	if(havescroll) this.design.onstopautosz(this,true); //to enable scrolls =
during resize=0A=
=0A=
    =
a.timer=3DsetTimeout("try{_uWnd.all["+this.idx+"]._checksize();}catch(e){=
}",10);=0A=
},=0A=
_checksize: function() {=0A=
    this.stopdrag();=0A=
    this.stopresize();=0A=
    var a=3Dthis.autosz, dw=3Da.tw-(this.width-this.decor.w), =
dh=3Da.th-(this.height-this.decor.h),ws=3D10,hs=3D10;=0A=
    if(dw!=3D0) {=0A=
		if(dw>0) ws=3DMath.min(ws,dw);=0A=
	    	else if(dw<0) ws=3DMath.max(-ws,dw);=0A=
		this.resizeTo(this.width+ws,this.height,true,1);=0A=
    } else if(dh!=3D0) {=0A=
		if(dh>0) hs=3DMath.min(hs,dh);=0A=
	    	else if(dh<0) hs=3DMath.max(-hs,dh);=0A=
		this.resizeTo(this.width,this.height+hs,true,1);=0A=
    } else {=0A=
    	a.timer=3Dnull;=0A=
    	a.active=3Dfalse;=0A=
//		if(this.props.hideonresize)=0A=
		this.design.onstopautosz(this);=0A=
    	return;=0A=
    }=0A=
    =
a.timer=3DsetTimeout("try{_uWnd.all["+this.idx+"]._checksize();}catch(e){=
}",10);=0A=
},=0A=
closeevent: function() { //close event from user. insertion point for =
overrides=0A=
	if(this.props.onbeforeclose) =
if(this.props.onbeforeclose.apply(this.app,[this])) return;=0A=
	this.close(); //default action=0A=
},=0A=
close: function(nohide) {=0A=
	if(this.state.destroyed) return;=0A=
	if(this.state.pendingdestroy) nohide=3D1;=0A=
	var have=3D0; //if we have live childs=0A=
	for(var i=3D0;i<this.childs.length;i++) {=0A=
		var c=3Dthis.childs[i];=0A=
		if(!c) continue;=0A=
		if(c.state.destroyed) {delete this.childs[i];continue;}=0A=
		if(this.state.pendingdestroy) {have=3D1;break;} //second call to =
close() from hide()=0A=
		c.close();=0A=
		if(this.childs[i]) have=3D1;=0A=
	}=0A=
	this.state.pendingdestroy=3Dtrue;=0A=
    if(this.props.modal && this.props.parent) { //disable parent=0A=
    	this.props.parent.disable(0);=0A=
    }=0A=
    if(!nohide && this.state.visible) {=0A=
    	var =
a=3Dthis.hide(this.props.fadeclosetype,this.props.fadeclosespeed,true);=0A=
    	if(a=3D=3D1) return;=0A=
    }=0A=
	if(!have) this._destroy();=0A=
},=0A=
_destroy: function() {=0A=
	if(this.state.destroyed) return;=0A=
	this._focus.destroy();=0A=
	if(this.desktop) this.desktop._removewindow(this);=0A=
	if(this.menu) this.menu.destroy();=0A=
	if(this.traymenu) this.traymenu.destroy();=0A=
	if(this.trayicon) this.trayicon.remove();=0A=
=0A=
    this.top.parentNode.removeChild(this.top);=0A=
    if(this.grid) this.grid.parentNode.removeChild(this.grid);=0A=
	if(this.tabctrl && !this.props.notabdestroy) this.tabctrl.destroy();=0A=
    _uWnd.all[this.idx]=3Dnull;=0A=
    this.state.destroyed=3Dtrue;=0A=
    this.state.visible=3Dfalse;=0A=
    if(this.props.onclose) =
this.props.onclose.apply(this.app,[this,this.idx]);=0A=
    if(this.props.parent) this.props.parent._ondelchild(this);=0A=
	if(this.app) this.app._ondestroywnd(this);=0A=
//	delete this;=0A=
},=0A=
_onnewchild:function(w) {=0A=
	if(w) this.childs.push(w);=0A=
	//recount children=0A=
	var n=3D0;=0A=
	this._foreachchild(function(c){n++;});=0A=
	this.nchilds=3Dn;=0A=
	if(this.props.parent) this.props.parent._onnewchild(null); //recount =
childs of parent=0A=
},=0A=
_ondelchild:function(w) {=0A=
	var n=3D0; //count direct childs left=0A=
	for(var i=3D0;i<this.childs.length;i++) {=0A=
		if(this.childs[i])=0A=
			if(this.childs[i]=3D=3Dw) {=0A=
				delete this.childs[i];=0A=
				w.props.parent=3Dnull;=0A=
				if(!this.state.pendingdestroy) break;=0A=
			} else n++;=0A=
	}=0A=
	if(this.state.pendingdestroy && n=3D=3D0) this._destroy();=0A=
		else this._onnewchild(null); //to recount childs=0A=
=0A=
},=0A=
minimize: function(frominit) {=0A=
  with(this) {=0A=
    if(autosz.active || (!props.min && !(frominit && =
props.initstate=3D=3D'min')) || !props.header || props.modal || =
props.alert || props.popup) return;=0A=
    state.beforemin=3Dstate.maximized ? 'max' : '';=0A=
    stopdrag();=0A=
    stopresize();=0A=
    if(!state.maximized && !state.minimized) =
restRect=3D[xpos,ypos,width,height,props.fixed];=0A=
    if(!frominit) sesupdate=3D1;=0A=
    if(props.onposchange && !state.minimized) =
props.onposchange.apply(app,[this]);=0A=
    state.maximized=3Dfalse;=0A=
    state.minimized=3Dtrue;=0A=
=0A=
	//hide all child windows=0A=
	this._foreachchild(=0A=
		function(w) {=0A=
			if(w.props.min)return 1; //do not hide windows which can be minimized =
manually=0A=
			w.state.prevvisible=3Dw.state.visible;=0A=
			w.hide(0);=0A=
		}=0A=
	,0);=0A=
=0A=
    if(!ontaskbar) {=0A=
        if(props.min) { //can be false if initstate=3D=3Dmin=0A=
            $(parts.mbut).css("display","none");=0A=
            $(parts.rbut).css("display","block");=0A=
        }=0A=
   	if(props.max)$(parts.xbut).css("display","block");=0A=
   	$(wnd).removeClass("xw-resize");=0A=
=0A=
    	if(!props.fixed && !$.browser.msie) $(top).css("position","fixed");=0A=
	    design.onminimize(this);=0A=
	    props.fixed=3Dtrue;=0A=
		if(desktop) {=0A=
		    moveTo(desktop.calcexclude(0),desktop.calcexclude(2),1);=0A=
		} else {=0A=
	    	moveTo(0,0,1);=0A=
	    }=0A=
	    resizeTo(200,30,0,1);=0A=
	    if(_focus.isactive()) {=0A=
	    	_focus.deactivate();=0A=
			if(!frominit) _uWnd.activatetopwnd(desktop);=0A=
	    }=0A=
	} else {=0A=
		if(!frominit) {=0A=
			hide(0);=0A=
			=
if(!props.notaskbar)desktop._onwndminimize(this,xpos,ypos,width,height);=0A=
		}=0A=
	}=0A=
  }=0A=
},=0A=
maximize: function(act,frominit) {=0A=
  with(this) {=0A=
    if(autosz.active || (!props.max && !(frominit && =
props.initstate=3D=3D'max') && !(state.minimized && =
state.beforemin=3D=3D'max')) || !props.header) return;=0A=
    stopdrag();=0A=
    stopresize();=0A=
    if(!state.maximized && !state.minimized) =
restRect=3D[xpos,ypos,width,height,props.fixed];=0A=
    if(!frominit) sesupdate=3D1;=0A=
    if(props.onposchange && !state.maximized) =
props.onposchange.apply(app,[this]);=0A=
=0A=
    $(parts.hdr).removeClass("xw-draggable");=0A=
    $(wnd).removeClass("xw-resize");=0A=
    if(props.max) { //can be false if initstate was specified=0A=
        $(parts.xbut).css("display","none");=0A=
        $(parts.rbut).css("display","block");=0A=
    }=0A=
    if(props.min)$(parts.mbut).css("display","block");=0A=
    if(!desktop && !props.fixed && !$.browser.msie) =
$(top).css("position","fixed");=0A=
=0A=
    hideSh();=0A=
	if(desktop && !props.fixed) {=0A=
	    moveTo(desktop.calcexclude(0),desktop.calcexclude(2),1);=0A=
	    resizeTo(desktop.calcwidth(),desktop.calcheight(),0,1);=0A=
	} else  {=0A=
	    var d=3D_uWnd.getdims();=0A=
	    props.fixed=3Dtrue;=0A=
	    moveTo(0,0,1);=0A=
	    resizeTo(d.clientW,d.clientH,0,1);=0A=
	}=0A=
    if(state.minimized) {=0A=
    	if(!ontaskbar) =0A=
    		this.design.onrestore(this);=0A=
    		else =0A=
    		show(false,0);=0A=
    } else if(frominit) {show(false,0);}=0A=
=0A=
    state.maximized=3Dtrue;=0A=
    state.minimized=3Dfalse;=0A=
	//restore all child windows=0A=
	_foreachchild(=0A=
		function(w) {=0A=
			if(w.props.min)return 1; //do not restore windows which can be =
minimized manually=0A=
			if(w.state.prevvisible)w.show(0,0);=0A=
		},=0A=
	0);=0A=
	if(act)activate();=0A=
  }=0A=
},=0A=
restore: function(act) {=0A=
  with(this) {=0A=
    if(!props.header) return;=0A=
    stopdrag();=0A=
    stopresize();=0A=
    if(this.props.onposchange && (state.minimized || state.maximized)) =
props.onposchange.apply(app,[this]);=0A=
=0A=
    $(parts.rbut).css("display","none");=0A=
    if(props.max) $(parts.xbut).css("display","block");=0A=
    if(state.minimized && props.min) =
$(parts.mbut).css("display","block");=0A=
    if(!props.nomove)$(parts.hdr).addClass("xw-draggable");=0A=
    if(props.resize)$(wnd).addClass("xw-resize");=0A=
=0A=
=0A=
    if(state.minimized) {=0A=
    	if(!ontaskbar) {=0A=
    		this.design.onrestore(this);=0A=
    	}=0A=
    	else {=0A=
    		show(false,0);=0A=
//			desktop.onwndrestore(this);=0A=
		}=0A=
	}=0A=
    showSh();=0A=
    state.maximized=3Dstate.minimized=3Dfalse;=0A=
    var r=3DrestRect;=0A=
    if(r) {=0A=
		props.fixed=3Dr[4];=0A=
		if(!props.fixed && !$.browser.msie) $(top).css("position","absolute");=0A=
		moveTo(r[0],r[1],1);=0A=
		resizeTo(r[2],r[3],0,1);=0A=
    }=0A=
	//restore all child windows=0A=
	_foreachchild(=0A=
		function(w) {=0A=
			if(w.props.min)return 1; //do not restore windows which can be =
minimized manually=0A=
			if(w.state.prevvisible)w.show(0,0);=0A=
		},=0A=
	0);=0A=
	if(act)activate();=0A=
  }=0A=
},=0A=
_ondragmousemove: function(dx,dy,x,y) {=0A=
    var d=3D_uWnd.getdims();=0A=
	x+=3Ddx;=0A=
	y+=3Ddy;=0A=
    if(x+this.width<30) x=3D30-this.width;=0A=
    if(y<-5) y=3D-5;=0A=
	if(this.desktop && !this.props.fixed) {=0A=
	if(x>this.desktop.width-20) x=3Dthis.desktop.width-20;=0A=
	if(y>this.desktop.height-20) y=3Dthis.desktop.height-20;=0A=
	} else if(this.props.fixed) {=0A=
	if(x>d.clientW-20) x=3Dd.clientW-20;=0A=
	if(y>d.clientH-20) y=3Dd.clientH-20;=0A=
    } else {=0A=
	if(x>d.docW-20) x=3Dd.docW-20;=0A=
	if(y>d.docH-20) y=3Dd.docH-20;=0A=
    }=0A=
    this.moveTo(x,y);=0A=
},=0A=
onstartdrag: function() {=0A=
	this.design.onstartdrag(this);=0A=
},=0A=
onstopdrag: function() {=0A=
	this.design.onstopdrag(this);=0A=
},=0A=
_ondragmousedown: function(e) {=0A=
  with(this){=0A=
	if(e.which=3D=3D3 && typeof _uDesk=3D=3D'undefined') return; //no right =
button without desktop=0A=
  	if(e.which=3D=3D1 && e.ctrlKey) e.which=3D3;=0A=
  	if(e.which=3D=3D3 && !state.resizing && !state.disabled && =
!props.toolwindow) {=0A=
  		this.showsysmenu(e.pageX,e.pageY);=0A=
  		return;=0A=
  	}=0A=
    if(props.nomove || state.resizing || state.maximized || =
state.disabled || e.which!=3D1) return;=0A=
	_drag.start(e,xpos,ypos);=0A=
    props.x=3Dxpos;=0A=
    props.y=3Dypos;=0A=
  }=0A=
},=0A=
stopdrag: function() {=0A=
	this._drag.stop();=0A=
},=0A=
_onrsmousemove: function(dx,dy,tx,ty,tw,th,m) {=0A=
    var x,y,w,h,d=3D_uWnd.getdims(),minw=3D10,minh=3D10,maxw,maxh;=0A=
    x=3Dtx;=0A=
    y=3Dty;=0A=
    w=3Dtw;=0A=
    h=3Dth;=0A=
    if(this.props.header) {=0A=
		minw+=3Dthis._countbuttonwidth();=0A=
    }=0A=
    minw=3DMath.max(minw,this.minwidth)+this.decor.w;=0A=
    minh=3DMath.max(minh,this.minheight)+this.decor.h;=0A=
    maxw=3Dthis.maxwidth;=0A=
    if(maxw=3D=3D0) maxw=3Dd.clientW; else maxw+=3Dthis.decor.w;=0A=
    maxh=3Dthis.maxheight;=0A=
    if(maxh=3D=3D0) maxh=3Dd.clientH; else maxh+=3Dthis.decor.h;=0A=
//	self.status=3Dminw;=0A=
    if(m.indexOf('n')>=3D0){=0A=
	y=3Dty+dy;=0A=
	if(y<0) y=3D0;=0A=
	h=3Dty+th-y;=0A=
	if(h<minh) {h=3Dminh;y=3Dty+th-h;}=0A=
	    else if(h>maxh) {h=3Dmaxh;y=3Dty+th-h;}=0A=
    }=0A=
    if(m.indexOf('s')>=3D0){=0A=
	h=3Dth+dy;=0A=
	if(h<minh) h=3Dminh;=0A=
	    else if(h>maxh) h=3Dmaxh;=0A=
    }=0A=
    if(m.indexOf('w')>=3D0){=0A=
	x=3Dtx+dx;=0A=
	if(x<0) x=3D0;=0A=
	w=3Dtx+tw-x;=0A=
	if(w<minw) {w=3Dminw;x=3Dtx+tw-w;}=0A=
	    else if(w>maxw) {w=3Dmaxw;x=3Dtx+tw-w;}=0A=
    }=0A=
    if(m.indexOf('e')>=3D0){=0A=
	w=3Dtw+dx;=0A=
	if(w<minw) w=3Dminw;=0A=
	    else if(w>maxw) w=3Dmaxw;=0A=
    }=0A=
    this.moveTo(x,y);=0A=
    this.resizeTo(w,h);=0A=
},=0A=
_onrsmousedown: function(e,b) {=0A=
  with(this) {=0A=
    if(_drag.active || state.disabled || state.maximized || =
state.minimized || =0A=
	autosz.active || !props.resize || e.which!=3D1) return;=0A=
    props.x=3Dxpos;=0A=
    props.y=3Dypos;=0A=
	this.stopautosize();=0A=
	_resize.start(e,xpos,ypos,width,height,b);=0A=
  }=0A=
},=0A=
onstartrs: function() {=0A=
	this.design.onstartresize(this);=0A=
},=0A=
onstoprs: function() {=0A=
	this.design.onstopresize(this);=0A=
},=0A=
stopresize: function() {=0A=
	this._resize.stop();=0A=
}=0A=
=0A=
};=0A=
=0A=
function _txt(sign) { =0A=
		var lng=3Dwindow._uDeflang,a,p=3Darguments;=0A=
		if(!lng) a=3Dsign;=0A=
			else {=0A=
				var db=3Dwindow._uSigns;=0A=
				if(!db || !db[lng])a=3Dsign;=0A=
					else {=0A=
						if(sign in db[lng]) a=3Ddb[lng][sign];=0A=
							else a=3Dsign;=0A=
					}=0A=
			}=0A=
		function _txtproc(str,param) {=0A=
			return p[param];=0A=
		}=0A=
=0A=
		if(p.length>1) {=0A=
			a=3Da.replace(/%([1-9])/g,_txtproc);=0A=
		}=0A=
		return a;=0A=
}=0A=
=0A=
function _uColorBox(did,fid){=0A=
	var hex_Red=3Dnew Array("00","33","66","99","CC","FF");=0A=
	var hex_Green=3Dnew Array("00","33","66","99","CC","FF");=0A=
	var hex_Blue=3Dnew Array("00","33","66","99","CC","FF");=0A=
	var hex_Gray=3Dnew =
Array("909090","939393","969696","999999","9C9C9C","9F9F9F","C0C0C0","C3C=
3C3","C6C6C6","C9C9C9","CCCCCC","CFCFF","F0F0F0","F3F3F3","F6F6F6","F9F9F=
9","FCFCFC","FFFFFF");=0A=
	var hexred=3D"00", hexgreen=3D"00", hexblue=3D"00", hexgray=3D"00";=0A=
	var red=3D0, green=3D0, blue=3D0;=0A=
	var x=3D0, y=3D0, z=3D0;=0A=
	var xyz=3D0;=0A=
	var ctable=3D'<table border=3D"0" cellpadding=3D"0" cellspacing=3D"1" =
bgcolor=3D"#000000">';=0A=
	while (y<6){=0A=
		ctable+=3D'<tr>';=0A=
		var x=3D0;=0A=
		var hexblue=3Dhex_Blue[blue];=0A=
		while (x<6){=0A=
			var z=3D0;=0A=
			var hexgreen=3Dhex_Green[green];=0A=
			while (z<6){=0A=
				var hexred=3Dhex_Red[red];=0A=
				var hexadecimal=3D""+hexred+hexgreen+hexblue;=0A=
				ctable+=3D'<td style=3D"width:8px;height:8px;cursor:pointer;" =
onclick=3D"$(\'#'+did+'\').hide(); =
getElementById(\''+fid+'\').value=3D\''+hexadecimal+'\'" =
bgcolor=3D"'+hexadecimal+'"></td>';=0A=
				z++;red++;=0A=
				if (red=3D=3D6){red=3D0;}=0A=
			}=0A=
			x++;green++;=0A=
			if (green=3D=3D6)green=3D0;=0A=
			xyz++;=0A=
			if (xyz=3D=3D3){ctable+=3D'</tr>'; xyz=3D0;}=0A=
		}=0A=
		y++; blue++=0A=
		if (blue=3D=3D6)blue=3D0;=0A=
	}=0A=
	for (var i=3D0;i<hex_Gray.length;i++){=0A=
		ctable+=3D'<td style=3D"width:8px;height:8px;cursor:pointer;" =
onclick=3D"$(\'#'+did+'\').hide(); =
getElementById(\''+fid+'\').value=3D\''+hex_Gray[i]+'\'" =
bgcolor=3D"'+hex_Gray[i]+'"></td>';=0A=
	}=0A=
	ctable+=3D'</table>';=0A=
	$('#'+did).html(ctable);=0A=
}=0A=
=0A=
//ucoz specific=0A=
//wnd can be _uWnd or _uTabCtrl=0A=
function _uParseXML(xml,wnd,tabid,papp) {xml =3D xml.documentElement;=0A=
var tabctrl=3Dnull,app=3Dnull,footers=3D{}; //footer used to associate =
footer and header with content of tabctrl, footer and header must come =
first=0A=
=0A=
if(wnd && wnd.constructor=3D=3D_uTabCtrl) =
{tabctrl=3Dwnd;wnd=3Dnull;app=3Dpapp || tabctrl.app;}=0A=
    else if(wnd && wnd.constructor=3D=3D_uWnd) {app=3Dpapp || wnd.app;}=0A=
    else {app=3Dpapp || null;wnd=3Dnull;} //unknown type in wnd=0A=
=0A=
if (xml =3D=3D null) { alert("Server connection Error. Sorry."); }=0A=
for (var i =3D 0; i < xml.childNodes.length; i++) {=0A=
if (xml.childNodes[i].nodeName =3D=3D "cmd"){ var =
cmd=3D'',target=3D'',data,height=3Dnull;=0A=
for (var j=3D0; j<xml.childNodes[i].attributes.length; j++) {=0A=
if (xml.childNodes[i].attributes[j].name =3D=3D "h")height =3D =
parseInt(xml.childNodes[i].attributes[j].value);=0A=
if (xml.childNodes[i].attributes[j].name =3D=3D "p")cmd =3D =
xml.childNodes[i].attributes[j].value;=0A=
if (xml.childNodes[i].attributes[j].name =3D=3D "t")target =3D =
xml.childNodes[i].attributes[j].value;}=0A=
if (xml.childNodes[i].firstChild && xml.childNodes[i].firstChild.data ) =
data =3D xml.childNodes[i].firstChild.data; else data =3D '';=0A=
if (cmd=3D=3D'innerHTML' && target.match(/^layerContent(.+)/)) =
_uWnd.content(RegExp.$1,data);=0A=
if (cmd=3D=3D'innerHTML' && target.match(/^layerTitle(.+)/)) =
_uWnd.setTitle(RegExp.$1,data);=0A=
if (cmd=3D=3D'innerHTML') $('#'+target).html(data);=0A=
else if (cmd=3D=3D'+innerHTML') $('#'+target).prepend(data);=0A=
else if (cmd=3D=3D'innerHTML+') $('#'+target).append(data);=0A=
else if (cmd=3D=3D'innerHTMLspanAll') $("span."+target).html(data);=0A=
else if (cmd=3D=3D'innerHTMLdivAll') $("div."+target).html(data);=0A=
else if (cmd=3D=3D'value') $('#'+target).val(data);=0A=
else if (cmd=3D=3D'jsa') includeJSfile(data,target);=0A=
else if (cmd=3D=3D'js') eval(data);=0A=
else if (cmd=3D=3D'content' && target.length>0) {=0A=
	var r=3Dtarget.match(/^([^:]+):(.+)/);=0A=
	if(r) {=0A=
            if(typeof footers['_uhh'+r]=3D=3D'number' && =
footers['_uhh'+r]!=3DNaN) =
_uTabCtrl.headerheight(r[1],r[2],footers['_uhh'+r]);=0A=
            if(typeof footers['_ufh'+r]=3D=3D'number' && =
footers['_ufh'+r]!=3DNaN) =
_uTabCtrl.footerheight(r[1],r[2],footers['_ufh'+r]);=0A=
            =
_uTabCtrl.content(r[1],r[2],data,footers['_uhc'+r],footers['_ufc'+r]);=0A=
        }=0A=
	else _uWnd.content(target,data);=0A=
}=0A=
else if (cmd=3D=3D'header' && target.length>0) {=0A=
	var r=3Dtarget.match(/^([^:]+):(.+)/);=0A=
        if(r) {=0A=
            footers['_uhc'+r]=3Ddata;=0A=
            footers['_uhh'+r]=3Dheight;=0A=
        } else {=0A=
            if(height!=3DNaN) _uWnd.headerheight(target,height);=0A=
            _uWnd.header(target,data);=0A=
        }=0A=
}=0A=
else if (cmd=3D=3D'footer' && target.length>0) {=0A=
	var r=3Dtarget.match(/^([^:]+):(.+)/);=0A=
        if(r) {=0A=
            footers['_ufc'+r]=3Ddata;=0A=
            footers['_ufh'+r]=3Dheight;=0A=
        } else {=0A=
            if(height!=3DNaN) _uWnd.footerheight(target,height);=0A=
            _uWnd.footer(target,data);=0A=
        }=0A=
}=0A=
else if (cmd=3D=3D'title' && target.length>0) {=0A=
	var r=3Dtarget.match(/^([^:]+):(.+)/);=0A=
	if(r) _uTabCtrl.setTitle(r[1],r[2],data);=0A=
	else _uWnd.setTitle(target,data);=0A=
}=0A=
else if (cmd=3D=3D'close' && target.length>0) {=0A=
	var r=3Dtarget.match(/^([^:]+):(.+)/);=0A=
	if(r) =0A=
		if(!data || isNaN(parseInt(data)))_uTabCtrl.closeTab(r[1],r[2]);else =
setTimeout("_uTabCtrl.closeTab('"+r[1]+"','"+r[2]+"');",parseInt(data));=0A=
	else=0A=
		if(!data || isNaN(parseInt(data)))_uWnd.close(target);else =
setTimeout("_uWnd.close('"+target+"');",parseInt(data));=0A=
}=0A=
else if(wnd) {=0A=
    if(cmd=3D=3D'content') wnd.content(data);=0A=
    else if(cmd=3D=3D'header') {if(height!=3DNaN) =
wnd.headerheight(height);wnd.header(data);}=0A=
    else if(cmd=3D=3D'footer') {if(height!=3DNaN) =
wnd.footerheight(height);wnd.footer(data);}=0A=
    else if(cmd=3D=3D'title') wnd.setTitle(data);=0A=
    else if(cmd=3D=3D'close') if(!data || =
isNaN(parseInt(data)))wnd.close();else setTimeout("var =
w=3D_uWnd.all["+wnd.idx+"];if(w)w.close();",parseInt(data));=0A=
    }=0A=
else if(tabctrl && tabid) {=0A=
    if(cmd=3D=3D'content') {=0A=
        if(typeof footers['_uhh']=3D=3D'number' && =
footers['_uhh']!=3DNaN) tabctrl.headerheight(tabid,footers['_uhh']);=0A=
        if(typeof footers['_ufh']=3D=3D'number' && =
footers['_ufh']!=3DNaN) tabctrl.footerheight(tabid,footers['_ufh']);=0A=
        tabctrl.content(tabid,data,footers['_uhc'],footers['_ufc']);=0A=
    }=0A=
    else if(cmd=3D=3D'header') =
{footers['_uhc']=3Ddata;footers['_uhh']=3Dheight;}=0A=
    else if(cmd=3D=3D'footer') =
{footers['_ufc']=3Ddata;footers['_ufh']=3Dheight;}=0A=
    else if(cmd=3D=3D'title') {tabctrl.setTitle(tabid,data);}=0A=
    else if(cmd=3D=3D'close') if(!data || =
isNaN(parseInt(data)))tabctrl.closeTab(tabid);else setTimeout("var =
w=3D_uTabCtrl.all["+tabctrl.idx+"];if(w)w.closeTab('"+tabid+"');",parseIn=
t(data));=0A=
    }=0A=
}}=0A=
}=0A=
=0A=
var _defAjaxError=3Dfunction(xmlreq, status, err) {=0A=
//this - options for request=0A=
//typically only one of status or err (exception) will have info=0A=
	try {=0A=
		_show_log_form();return;=0A=
	} catch(e){}=0A=
	window.location.reload();=0A=
}=0A=
var _hookAjaxError=3Dnull; //function(xmlreq, status, err)=0A=
//this - options for request=0A=
=0A=
function _uAjaxRequest(url,options) {=0A=
    if(!url) return null;=0A=
    var o =3D $.extend({=0A=
//noerrorhook:1   - can be used to prevent error hook from being used    =
	=0A=
		app: 0, //application PID=0A=
		wnd: 0, //window index=0A=
		async: 1,=0A=
		cache: true,=0A=
		dataType: 'xml',=0A=
		error: _defAjaxError,=0A=
	        type: 'GET',=0A=
		success: _defAjaxSuccess,=0A=
		timeout: 25000=0A=
// 		data: {f1: val1, f2: val2, f3: [val4,val5]}=0A=
    }, options || {});=0A=
    if(o.app && o.app.appname && o.app.pid>0) o.app=3Do.app.pid; //fix =
if app object was passed instead of PID=0A=
    if(o.wnd && o.wnd.constructor=3D=3D_uWnd) o.wnd=3Do.wnd.idx; //fix =
if window object was passed instead of IDX=0A=
    if(!o.data)o.data=3D{};=0A=
    if(o.app>0 && !('_ai' in o.data)) o.data._ai=3Do.app;=0A=
    if(o.app>0 && _uApp.all[o.app] && _uApp.all[o.app]._admpasscook) =
o.data._apc=3D_uApp.all[o.app]._admpasscook;=0A=
    if(o.wnd>0 && !('_wi' in o.data)) o.data._wi=3Do.wnd;=0A=
=0A=
    if(_hookAjaxError && !o.noerrorhook) =
{o.prev_error=3Do.error;o.error=3D_hookAjaxError;}=0A=
    o.url=3Durl;=0A=
//    if(o.app>0 && !o.nosuccesshook) =
{o.prev_success=3Do.success;o.success=3D_hookAjaxSuccess;}=0A=
    return jQuery.ajax(o);=0A=
}=0A=
//by default use app in options to call success-handler relative to =
application if it were specified=0A=
var _hookAjaxSuccess=3Dfunction(data, status) {=0A=
	if(!this.prev_success) return;=0A=
	if(this.app>0 && typeof _uApp!=3D'undefined' && _uApp.all[this.app] && =
!_uApp.all[this.app].exited && this.prev_success!=3D_defAjaxSuccess) =
this.prev_success.call(_uApp.all[this.app],data,status);=0A=
		else this.prev_success.call(this,data,status);=0A=
};=0A=
=0A=
//default success action for forms and simple _uAjaxRequest=0A=
//by default call _uParseXML for xml reply=0A=
var _defAjaxSuccess=3Dfunction(data, status) {=0A=
//this - options for request=0A=
        var wnd=3Dnull,app=3Dnull;=0A=
	if(this.dataType=3D=3D'xml') {=0A=
		if(this.wnd>0 && _uWnd.all[this.wnd] && =
!_uWnd.all[this.wnd].state.destroyed) wnd=3D_uWnd.all[this.wnd];=0A=
		if(this.app>0 && typeof _uApp!=3D'undefined' && _uApp.all[this.app] && =
!_uApp.all[this.app].exited) app=3D_uApp.all[this.app];=0A=
		_uParseXML(data,wnd,0,app);=0A=
	}=0A=
}=0A=
=0A=
//default error action for _uPostForm=0A=
//by default try to find onerror attribute in form and execute it=0A=
var _defAjaxFormError=3Dfunction(xmlreq, status, err) {=0A=
//this - options for request=0A=
//typically only one of status or err (exception) will have info=0A=
	if(!this._formobj) return;=0A=
	var a=3Dthis._formobj.onerror || this._formobj.getAttribute('onerror');=0A=
	if(!a) return;=0A=
	if(typeof a =3D=3D 'string') {=0A=
		try {a=3Dnew Function(a);} catch(e){return;}=0A=
	}=0A=
	if(typeof a =3D=3D 'function' || typeof a=3D=3D'object') {=0A=
		try {a.call(this._formobj,xmlreq, status, err);} catch(e){return;}=0A=
	}=0A=
}=0A=
=0A=
//by default try to find oncomplete attribute in form and execute it=0A=
var _defAjaxFormComplete=3Dfunction(xmlreq, status) {=0A=
//this - options for request=0A=
	if(!this._formobj) return;=0A=
	var a=3Dthis._formobj.oncomplete || =
this._formobj.getAttribute('oncomplete');=0A=
	if(!a) return;=0A=
	if(typeof a =3D=3D 'string') {=0A=
		try {a=3Dnew Function(a);} catch(e){return;}=0A=
	}=0A=
	if(typeof a =3D=3D 'function' || typeof a=3D=3D'object') {=0A=
		try {a.call(this._formobj,xmlreq, status);} catch(e){return;}=0A=
	}=0A=
}=0A=
=0A=
=0A=
function _uPostForm(formid,options) {=0A=
    if(!formid && options && options.url) { =
_uAjaxRequest(options.url,options);return;}=0A=
    var f;=0A=
    if(typeof(formid)!=3D'object') f=3D$('#'+formid); else f=3D$(formid);=0A=
    if(!f.length) return;=0A=
    var o =3D $.extend({=0A=
//noerrorhook:1   - can be used to prevent error hook from being used    =
	=0A=
		app: 0, //pid of application=0A=
                wnd: 0, //window index=0A=
		url: f.attr('action') || window.location.toString(),=0A=
		type: f.attr('method') || 'GET',=0A=
		error: _defAjaxFormError,=0A=
		success: _defAjaxSuccess,=0A=
		complete: _defAjaxFormComplete,=0A=
		dataType: 'xml',=0A=
		semantic: false //true if form contains type=3Dimage=0A=
    }, options || {});=0A=
    if(o.app && o.app.appname && o.app.pid>0) o.app=3Do.app.pid; //fix =
if app object was passed instead of PID=0A=
    if(o.wnd && o.wnd.constructor=3D=3D_uWnd) o.wnd=3Do.wnd.idx; //fix =
if window object was passed instead of IDX=0A=
    if(!o.data)o.data=3D{};=0A=
    if(o.app>0 && !('_ai' in o.data)) o.data._ai=3Do.app;=0A=
    if(o.app>0 && _uApp.all[o.app] && _uApp.all[o.app]._admpasscook) =
o.data._apc=3D_uApp.all[o.app]._admpasscook;=0A=
    if(o.wnd>0 && !('_wi' in o.data)) o.data._wi=3Do.wnd;=0A=
=0A=
    if(_hookAjaxError && !o.noerrorhook) =
{o.prev_error=3Do.error;o.error=3D_hookAjaxError;}=0A=
    o._formobj=3Df[0];=0A=
    if(o.app>0 && !o.nosuccesshook) =
{o.prev_success=3Do.success;o.success=3D_hookAjaxSuccess;}=0A=
    f.ajaxSubmit(o);=0A=
}=0A=
=0A=
=0A=
function includeJSfile(src,id){=0A=
if (id && document.getElementById(id)){return;}=0A=
var js =3D document.createElement('script');=0A=
js.setAttribute('type','text/javascript');=0A=
if(id) js.setAttribute('id',id);=0A=
js.setAttribute('src',src);=0A=
document.getElementsByTagName('head').item(0).appendChild(js);=0A=
}=0A=
=0A=
=0A=
var _entrRm=3D{};=0A=
function _entrRem(bID,u,imgurl,text){=0A=
    if (!text){text=3D'Are you sure?';}=0A=
    if (!_entrRm[bID] && confirm(text)){_entrRm[bID]=3D1;=0A=
	document.getElementById(bID).src=3Dimgurl+'/img/fr/EmnAjax.gif';=0A=
	_uPostForm('',{url:u});=0A=
    }	=0A=
}=0A=
=0A=
=0A=
function _coloredTDs(r,c){=0A=
    var cl=3D'';=0A=
    if (typeof(r)!=3D'object'){r=3Ddocument.getElementById(r);}=0A=
    if =
(typeof(document.getElementsByTagName)!=3D'undefined'){cl=3Dr.getElements=
ByTagName('td');}=0A=
    else if (typeof(r.cells)!=3D'undefined') {cl=3Dr.cells;}=0A=
    else {return false;}=0A=
    for (var i=3D0;i<cl.length;i++) {=0A=
	cl[i].className=3Dc;=0A=
    }=0A=
}=0A=
=0A=
function openLayerB(n,f,url,t,w,h,resize,anyVar2,grid,multypart,align){=0A=
    new _uWnd(n,t,w,h,{autosize: resize ? 1 : 0,modal: grid ? 1 : =
0,align:align ? align : 'center'},{url:url,form:f,cache:1});=0A=
}=0A=
=0A=
function _showOnTop(n,f){=0A=
	var z=3D_uWnd.getTopZ();=0A=
        if (f){=0A=
                document.getElementById(n).style.zIndex=3Dz+1;=0A=
        }=0A=
        else {=0A=
                document.getElementById('outLayer'+n).style.zIndex=3Dz+1;=0A=
        }=0A=
}=0A=
=0A=
function encodeHtmlVal(s,quot) { //quot true to encode ' and " only!!! =
no & will be encoded (if input text is from innerHTML and must be =
inserted into html attribute)=0A=
        if(quot) return =
String(s).replace(/'/g,'&'+'#39;').replace(/"/g,'&'+'quot;'); //'=0A=
	return =
String(s).replace(/&/g,'&'+'amp;').replace(/'/g,'&'+'#39;').replace(/"/g,=
'&'+'quot;').replace(/</g,'&'+'lt;').replace(/>/g,'&'+'gt;'); //'=0A=
}=0A=
=0A=
//recursively dump SIMPLE objects  (numbers, strings, bool, simple =
arrays, simple objects)=0A=
function dumpObject(o,depth,ex) {=0A=
	var tp=3Dtypeof o,s;=0A=
	if(arguments.length<2) depth=3D10;=0A=
	function hexencode(n,s) {=0A=
		var j,d=3D[0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f'],v=3D'';=0A=
		for(j=3D0;j<s;j++) {v=3D''+d[n%16]+v;n>>>=3D4;}=0A=
		return v;=0A=
	}=0A=
	if(tp=3D=3D'object')=0A=
		if(!o) tp=3D'null';=0A=
		else if (o.constructor=3D=3DString) tp=3D'string';=0A=
		else if (o.constructor=3D=3DNumber) tp=3D'number';=0A=
		else if (o.constructor=3D=3DBoolean) tp=3D'boolean';=0A=
		else if (o.constructor=3D=3DArray) tp=3D'array';=0A=
	switch(tp) {=0A=
		case 'number': case 'boolean': case 'null': case 'undefined': return =
String(o);=0A=
		case 'string': =0A=
			return '"'+o.replace(/([\\"])/g,"\\$1").=0A=
				replace(/\n/g,"\\n").=0A=
				replace(/([\x00-\x1f])/g,function(s,c){return =
'\\x'+hexencode(c.charCodeAt(0),2);}).=0A=
				replace(/([\u2028\u2029])/g,function(s,c){return =
'\\u'+hexencode(c.charCodeAt(0),4);})+'"';=0A=
		case 'array':=0A=
			if(depth<=3D0) return '[?]';=0A=
			s=3D'';=0A=
			for(var i=3D0;i<o.length;i++) {=0A=
				if(i>0) s+=3D',';=0A=
				s+=3DdumpObject(o[i]);=0A=
			}=0A=
			return '['+s+']';=0A=
		case 'object':=0A=
			if(depth<=3D0) return '{?}';=0A=
			s=3D'';=0A=
			for(var i in o) {=0A=
				if(ex && ex[i]) continue;=0A=
				if(s) s+=3D',';=0A=
				try {=0A=
				s+=3DdumpObject(i)+':'+dumpObject(o[i],depth-1);=0A=
				} catch(e) {s+=3DdumpObject(i)+':?';}=0A=
			}=0A=
			return '{'+s+'}';=0A=
	}=0A=
}=0A=
=0A=
function _uHighlightA(parent,url,hlclass) {=0A=
	var ls=3D$(parent).find("a").get(),o=3Dnull,l=3D0;=0A=
	for(var j in ls) {=0A=
		if (ls[j].href && url.indexOf(ls[j].href)>=3D0) {=0A=
			if (!o || l<ls[j].href.length){=0A=
				o=3Dls[j]; =0A=
				l=3Dls[j].href.length; =0A=
			} =0A=
		} =0A=
	}=0A=
	if(o) $(o).addClass(hlclass);=0A=
}=0A=
function _uBuildMenu(id,ishoriz,hlurl,hlclass,alignclass,hidetm){=0A=
		var p,i,subs,m,al,t,it,f;=0A=
		p=3D$(id)[0];=0A=
		if(!p) return;=0A=
		hidetm=3Dhidetm || 2000;=0A=
		f=3Dfunction(e){_uMENU.hideallmenus();this.__umenu.show();};=0A=
		if($.browser.msie) p.style.zoom=3D'1';=0A=
		subs=3D$(id + ">ul").children("li").children("ul");=0A=
		for(i=3D0;i<subs.length;i++) {=0A=
			m=3D_ubuild_submenus(subs[i]);=0A=
			al=3Dit=3Dsubs[i].parentNode;=0A=
			if(!ishoriz && alignclass && (t=3D$(al).children("."+alignclass)[0]) =
)al=3Dt;=0A=
			it.__umenu=3Dnew _uMENU('',{alignObj:al,align:ishoriz ? 'D' : =
(window._rtl ? 'L' : 'R')},{parentnode:p,hidetimer:hidetm},m);=0A=
			$(it).bind("mouseover",f);=0A=
			it.removeChild(subs[i]);=0A=
		}=0A=
		if(!hlurl || !hlclass) return;=0A=
		=
setTimeout("_uHighlightA($('"+id+"')[0],'"+hlurl+"','"+hlclass+"');",100)=
;=0A=
	}=0A=
=0A=
function _uReplaceMenu(id,ishoriz,hlurl,hlclass,removeclass){=0A=
		var p,m,mm;=0A=
		p=3D$(id)[0];=0A=
		if(!p) return;=0A=
		if($.browser.msie) p.style.zoom=3D'1';=0A=
		mm=3D$(id).children("ul")[0];=0A=
		if(!mm) return;=0A=
		if(removeclass)$(mm).find("."+removeclass).remove();=0A=
		m=3D_ubuild_submenus(mm);=0A=
		mm.parentNode.__umenu=3Dnew _uMENU('',{},{width:'auto',horiz: ishoriz, =
statical:1,parentnode:p,noabs:1},m);=0A=
		mm.parentNode.removeChild(mm);=0A=
		if(!hlurl || !hlclass) return;=0A=
		=
setTimeout("_uHighlightA($('"+id+"')[0],'"+hlurl+"','"+hlclass+"');",100)=
;=0A=
	}=0A=
=0A=
		=0A=
function _ubuild_submenus(ul) {=0A=
		var ch=3D$(ul).children("li"),i,res=3D[],subul,m,ls;=0A=
		for(i=3D0;i<ch.length;i++) {=0A=
			subul=3D$(ch[i]).children("ul")[0];=0A=
			if(subul) {=0A=
				m=3D_ubuild_submenus(subul);=0A=
				subul.parentNode.removeChild(subul);=0A=
				ls=3D$(ch[i]).find("a").get();=0A=
				res[res.length]=3D[$(ch[i]).html(),m,ls.length>0 ? {action:'a'} : =
null];=0A=
			} else {=0A=
				ls=3D$(ch[i]).find("a").get();=0A=
				res[res.length]=3D[$(ch[i]).html(),ls.length>0 ? 'a' : ''];=0A=
			}=0A=
		}=0A=
		return res;=0A=
}=0A=
=0A=
function _uColorBox(did,fid){=0A=
var hex_Red=3Dnew Array("00","33","66","99","CC","FF");=0A=
var hex_Green=3Dnew Array("00","33","66","99","CC","FF");=0A=
var hex_Blue=3Dnew Array("00","33","66","99","CC","FF");=0A=
var hex_Gray=3Dnew =
Array("909090","939393","969696","999999","9C9C9C","9F9F9F","C0C0C0","C3C=
3C3","C6C6C6","C9C9C9","CCCCCC","CFCFCF","F0F0F0","F3F3F3","F6F6F6","F9F9=
F9","FCFCFC","FFFFFF");=0A=
var hexred=3D"00";var hexgreen=3D"00";var hexblue=3D"00";var =
hexgray=3D"00";=0A=
var red=3D0;var green=3D0;var blue=3D0;=0A=
var x=3D0;var y=3D0;var z=3D0;=0A=
var xyz=3D0;=0A=
var ctable=3D'<table border=3D"0" cellpadding=3D"0" cellspacing=3D"1" =
bgcolor=3D"#000000">';=0A=
while (y<6){=0A=
ctable+=3D'<tr>';=0A=
var x=3D0;=0A=
var hexblue=3Dhex_Blue[blue];=0A=
while (x<6){=0A=
var z=3D0;=0A=
var hexgreen=3Dhex_Green[green];=0A=
while (z<6){=0A=
var hexred=3Dhex_Red[red];=0A=
var hexadecimal=3D""+hexred+hexgreen+hexblue;=0A=
ctable+=3D'<td style=3D"width:8px;height:8px;cursor:pointer;" =
onclick=3D"$(\'#'+did+'\').hide(); =
getElementById(\''+fid+'\').value=3D\''+hexadecimal+'\'" =
bgcolor=3D"'+hexadecimal+'"></td>';=0A=
z++;red++;=0A=
if (red=3D=3D6){red=3D0;}=0A=
}=0A=
x++;green++;=0A=
if (green=3D=3D6){green=3D0;}=0A=
xyz++;=0A=
if (xyz=3D=3D3){ctable+=3D'</tr>'; xyz=3D0;}=0A=
}=0A=
y++; blue++=0A=
if (blue=3D=3D6){blue=3D0;}=0A=
}=0A=
for (var i=3D0;i<hex_Gray.length;i++){=0A=
ctable+=3D'<td style=3D"width:8px;height:8px;cursor:pointer;" =
onclick=3D"$(\'#'+did+'\').hide(); =
getElementById(\''+fid+'\').value=3D\''+hex_Gray[i]+'\'" =
bgcolor=3D"'+hex_Gray[i]+'"></td>';=0A=
};=0A=
ctable+=3D'</table>';=0A=
$('#'+did).html(ctable);=0A=
}=0A=
=0A=
=0A=
function _uButtonExt(frm){ // formID,  generate hidden input-image field =
for submit buttons=0A=
    return '<span style=3D"visibility:hidden"><input type=3D"image" =
src=3D"/.s/img/1px.gif" style=3D"width:1px" id=3D"subm'+frm+'" =
/></span>';=0A=
}=0A=
=0A=
function _uButton(frm,type,opts){ // formID, type['s','b','r'], options=0A=
	var props =3D $.extend({=0A=
        ext: 0, //if true for type=3Ds then input=3Dimage is not =
created, it must be created somewhere inside the form by=0A=
	text:'Ok',=0A=
	content:'',=0A=
	style:0,		//0,1=0A=
	id: null //ID for internal A-tag=0A=
	},opts || {});=0A=
=0A=
	var tp =3D {=0A=
		's':'onclick=3D"if (this.dis)return; $(this).addClass(\'myBtnDis\'); =
this.dis=3Dtrue; $(\'#subm'+frm+'\').click();"',=0A=
		'r':'onclick=3D"document.getElementById(\''+frm+'\').reset();"'=0A=
	};=0A=
    var t =3D (tp[type]!=3D'undefined') ? tp[type] : '';=0A=
	var s =3D (props.style=3D=3D1) ? =
['myBtnLeft','myBtnCenter','myBtnRight'] : =
['myBtnLeftA','myBtnCenterA','myBtnRightA'];=0A=
=0A=
	var hid =3D (type=3D=3D's' && !props.ext) ? '<input type=3D"image" =
src=3D"/.s/img/1px.gif" style=3D"width:1px" id=3D"subm'+frm+'" />' : '';=0A=
	var dis =3D (props.style=3D=3D2) ? 'myBtnCont x-unselectable myBtnDis' =
: 'myBtnCont x-unselectable';=0A=
=0A=
	var bt =3D '<table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" =
onmousedown=3D"this.className=3D\'downBtn\'" =
onmouseover=3D"this.className=3D\'overBtn\'" =
onmouseout=3D"this.className=3D\'outBtn\'">'=0A=
+'<tr><td class=3D"'+s[0]+'"><img border=3D"0" =
src=3D"/.s/img/1px.gif"></td>'=0A=
+'<td class=3D"'+s[1]+'"><div class=3D"'+dis+'" unselectable=3D"on" =
'+t+' '+props.content+'><a '+(props.id ? 'id=3D"'+props.id+'" ': =
'')+'href=3D"javascript://" onclick=3D"return =
false;">'+props.text+'</a></div></td>'=0A=
+'<td class=3D"'+s[2]+'"><img border=3D"0" src=3D"/.s/img/1px.gif"></td>'=0A=
+'<td style=3D"visibility:hidden;">'+hid+'</td></tr></table>'=0A=
	return bt;	=0A=
}=0A=
=0A=
function _uButtonEn(id,enable) { //button id or object, enable  - =
whether to enable or disable=0A=
        var o=3Dtypeof(id)=3D=3D'string' ? $("#"+id)[0] : id;=0A=
        if(!o)return;=0A=
        if(enable) {=0A=
            o.dis=3Dfalse;=0A=
            $(o).removeClass('myBtnDis');=0A=
        } else {=0A=
            o.dis=3Dtrue;=0A=
            $(o).addClass('myBtnDis');=0A=
        }=0A=
}=0A=

------=_NextPart_000_01C3_01CA1848.10042720--
