summaryrefslogtreecommitdiffstats
path: root/funcweb
diff options
context:
space:
mode:
authormakkalot <makkalot@gmail.com>2008-08-17 23:10:35 +0300
committermakkalot <makkalot@gmail.com>2008-08-17 23:10:35 +0300
commitf41fa09968ef36d9682094a6988734de0d682388 (patch)
treec4edb4e390f773a2717b73b3fbcb016d7b2f726c /funcweb
parent67492110e858d8fb730c77d9d73cfbcc7621ec80 (diff)
downloadfunc-f41fa09968ef36d9682094a6988734de0d682388.tar.gz
func-f41fa09968ef36d9682094a6988734de0d682388.tar.xz
func-f41fa09968ef36d9682094a6988734de0d682388.zip
add the client side json --> tree parser dhtmltree framework
Diffstat (limited to 'funcweb')
-rw-r--r--funcweb/funcweb/static/css/dhtmlxtree.css61
-rw-r--r--funcweb/funcweb/static/images/imgs/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/but_cut.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/book.gifbin0 -> 260 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/book_titel.gifbin0 -> 210 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/but_cut.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/close2.gifbin0 -> 1042 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/folderClosed.gifbin0 -> 250 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/folderOpen.gifbin0 -> 257 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconChecked.gifbin0 -> 257 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconSafe.gifbin0 -> 261 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconText.gifbin0 -> 208 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/leaf.gifbin0 -> 260 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line.gifbin0 -> 169 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line1.gifbin0 -> 169 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line1_rtl.gifbin0 -> 169 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line2.gifbin0 -> 165 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line2_rtl.gifbin0 -> 167 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line3.gifbin0 -> 171 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line3_rtl.gifbin0 -> 173 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line4.gifbin0 -> 159 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/line4_rtl.gifbin0 -> 159 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus.gifbin0 -> 211 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2.gifbin0 -> 223 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2_rtl.gifbin0 -> 222 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3.gifbin0 -> 225 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3_rtl.gifbin0 -> 226 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4.gifbin0 -> 222 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4_rtl.gifbin0 -> 220 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5.gifbin0 -> 216 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5_rtl.gifbin0 -> 214 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus.gifbin0 -> 212 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2.gifbin0 -> 220 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2_rtl.gifbin0 -> 221 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3.gifbin0 -> 222 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3_rtl.gifbin0 -> 225 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4.gifbin0 -> 219 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4_rtl.gifbin0 -> 219 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5.gifbin0 -> 213 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5_rtl.gifbin0 -> 213 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluebooks/tombs.gifbin0 -> 231 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/folderClosed.gifbin0 -> 261 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/folderOpen.gifbin0 -> 266 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll_2.gifbin0 -> 273 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconChecked.gifbin0 -> 257 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconFlag.gifbin0 -> 247 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconGraph.gifbin0 -> 250 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconSound.gifbin0 -> 244 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconText.gifbin0 -> 248 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconTexts.gifbin0 -> 256 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite1.gifbin0 -> 278 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite2.gifbin0 -> 272 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/leaf.gifbin0 -> 237 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/minus.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/plus.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/folderClosed.gifbin0 -> 189 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/folderOpen.gifbin0 -> 187 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/leaf.gifbin0 -> 184 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/minus.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/plus.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/tombs.gifbin0 -> 169 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_books/tombs_open.gifbin0 -> 169 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/folderClosed.gifbin0 -> 99 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/folderOpen.gifbin0 -> 98 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconChecked.gifbin0 -> 257 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconFlag.gifbin0 -> 248 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconGraph.gifbin0 -> 250 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconSound.gifbin0 -> 242 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconText.gifbin0 -> 132 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconTexts.gifbin0 -> 139 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite1.gifbin0 -> 276 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite2.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/leaf.gifbin0 -> 237 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/minus.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/plus.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_close.gifbin0 -> 259 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_open.gifbin0 -> 261 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/folderClosed.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/folderOpen.gifbin0 -> 277 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconCheckAll.gifbin0 -> 237 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconCheckDis.gifbin0 -> 237 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconCheckGray.gifbin0 -> 239 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconChecked.gifbin0 -> 281 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconFlag.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconGraph.gifbin0 -> 274 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconSound.gifbin0 -> 305 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconText.gifbin0 -> 235 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconTexts.gifbin0 -> 246 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckAll.gifbin0 -> 233 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckDis.gifbin0 -> 232 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconWrite1.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/iconWrite2.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/leaf.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/minus.gifbin0 -> 131 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/plus.gifbin0 -> 130 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_vista/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/folderClosed.gifbin0 -> 245 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/folderOpen.gifbin0 -> 252 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconChecked.gifbin0 -> 257 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconFlag.gifbin0 -> 269 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconGraph.gifbin0 -> 263 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconSound.gifbin0 -> 283 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconText.gifbin0 -> 228 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconTexts.gifbin0 -> 237 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite1.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite2.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/leaf.gifbin0 -> 219 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/leaves.gifbin0 -> 227 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/line2.gifbin0 -> 68 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/line4.gifbin0 -> 63 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/minus.gifbin0 -> 78 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/minus2.gifbin0 -> 86 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/minus3.gifbin0 -> 88 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/minus4.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/minus5.gifbin0 -> 81 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/plus.gifbin0 -> 82 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/plus2.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/plus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/plus4.gifbin0 -> 88 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/plus5.gifbin0 -> 83 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_winstyle/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/blank.gifbin0 -> 56 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_close.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_open.gifbin0 -> 236 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderClosed.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderOpen.gifbin0 -> 273 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckAll.gifbin0 -> 275 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckDis.gifbin0 -> 270 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckGray.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconText.gifbin0 -> 129 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckAll.gifbin0 -> 279 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckDis.gifbin0 -> 268 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf2.gifbin0 -> 236 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf3.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf_2.gifbin0 -> 284 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_off.gifbin0 -> 249 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_on.gifbin0 -> 251 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs.gifbin0 -> 259 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs_open.gifbin0 -> 261 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/folderClosed.gifbin0 -> 135 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/folderOpen.gifbin0 -> 139 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/iconCheckAll.gifbin0 -> 123 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/iconCheckDis.gifbin0 -> 126 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/iconCheckGray.gifbin0 -> 126 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/iconUncheckAll.gifbin0 -> 111 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/iconUncheckDis.gifbin0 -> 117 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/leaf.gifbin0 -> 123 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line1.gifbin0 -> 71 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line1_rtl.gifbin0 -> 64 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line2.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line2_rtl.gifbin0 -> 64 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line3.gifbin0 -> 73 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line3_rtl.gifbin0 -> 67 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line4.gifbin0 -> 69 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/line4_rtl.gifbin0 -> 64 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/lock.gifbin0 -> 116 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus2.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus2_rtl.gifbin0 -> 84 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus3.gifbin0 -> 93 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus3_rtl.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus4.gifbin0 -> 90 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus4_rtl.gifbin0 -> 85 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus5.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus5_rtl.gifbin0 -> 82 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/minus_ar.gifbin0 -> 68 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus2.gifbin0 -> 95 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus2_rtl.gifbin0 -> 88 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus3.gifbin0 -> 96 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus3_rtl.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus4.gifbin0 -> 94 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus4_rtl.gifbin0 -> 89 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus5.gifbin0 -> 92 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus5_rtl.gifbin0 -> 87 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/plus_ar.gifbin0 -> 70 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/radio_off.gifbin0 -> 241 bytes
-rw-r--r--funcweb/funcweb/static/images/imgs/radio_on.gifbin0 -> 361 bytes
-rw-r--r--funcweb/funcweb/static/javascript/dhtmlxcommon.js643
-rw-r--r--funcweb/funcweb/static/javascript/dhtmlxtree.js3742
-rw-r--r--funcweb/funcweb/static/javascript/ext/dhtmlxtree_dragin.js75
-rw-r--r--funcweb/funcweb/static/javascript/ext/dhtmlxtree_ed.js189
-rw-r--r--funcweb/funcweb/static/javascript/ext/dhtmlxtree_er.js80
-rw-r--r--funcweb/funcweb/static/javascript/ext/dhtmlxtree_json.js216
-rw-r--r--funcweb/funcweb/static/javascript/ext/dhtmlxtree_start.js101
-rw-r--r--funcweb/funcweb/templates/master.html14
306 files changed, 5120 insertions, 1 deletions
diff --git a/funcweb/funcweb/static/css/dhtmlxtree.css b/funcweb/funcweb/static/css/dhtmlxtree.css
new file mode 100644
index 0000000..b18efc5
--- /dev/null
+++ b/funcweb/funcweb/static/css/dhtmlxtree.css
@@ -0,0 +1,61 @@
+.defaultTreeTable{
+ margin : 0px;
+ padding : 0px;
+ border : 0px;
+}
+.containerTableStyle { overflow : auto; position:relative; top:0; font-size : 12px;}
+.containerTableStyleRTL span { direction: rtl; unicode-bidi: bidi-override; }
+.containerTableStyleRTL { direction: rtl; overflow : auto; position:relative; top:0; font-size : 12px;}
+.standartTreeRow{ font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; }
+.selectedTreeRow{ background-color : navy; color:white; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; }
+.dragAndDropRow{ background-color : navy; color:white; }
+.standartTreeRow_lor{ text-decoration:underline; background-color : #FFFFF0; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; }
+.selectedTreeRow_lor{ text-decoration:underline; background-color : navy; color:white; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; }
+
+.standartTreeImage{ width:18px; height:18px; overflow:hidden; border:0; padding:0; margin:0;
+font-size:1px; }
+.hiddenRow { width:1px; overflow:hidden; }
+.dragSpanDiv,.dragSpanDiv td{ font-size : 12px; background-color:white; }
+
+
+.selectionBox{
+background-color: #FFFFCC;
+}
+.selectionBar {
+ top:0;
+ background-color: Black;
+ position:absolute;
+ overflow:hidden;
+ height: 2px;
+ z-index : 11;
+}
+
+.intreeeditRow{
+ width:100%; font-size:8pt; height:16px; border:1px solid silver; padding:0; margin:0;
+ -moz-user-select: text;
+}
+.dhx_tree_textSign{
+ font-size:8pt;
+ font-family:monospace;
+ width:21px;
+ color:black;
+ padding:0px;
+ margin:0px;
+ cursor:pointer;
+ text-align: center;
+}
+.dhx_tree_opacity{
+ opacity:0;
+ -moz-opacity:0;
+ filter:alpha(opacity=0);
+}
+.dhx_bg_img_fix{
+width:18px;
+height:18px;
+background-repeat: no-repeat;
+background-position: center;
+background-position-x: center;
+background-position-y: center;
+}
+
+
diff --git a/funcweb/funcweb/static/images/imgs/blank.gif b/funcweb/funcweb/static/images/imgs/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/but_cut.gif b/funcweb/funcweb/static/images/imgs/but_cut.gif
new file mode 100644
index 0000000..942bd18
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/but_cut.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/blank.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/book.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/book.gif
new file mode 100644
index 0000000..0634564
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/book.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/book_titel.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/book_titel.gif
new file mode 100644
index 0000000..d2b49e9
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/book_titel.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/but_cut.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/but_cut.gif
new file mode 100644
index 0000000..942bd18
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/but_cut.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/close2.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/close2.gif
new file mode 100644
index 0000000..94c267d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/close2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderClosed.gif
new file mode 100644
index 0000000..c9649b9
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderOpen.gif
new file mode 100644
index 0000000..15e298b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconChecked.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconChecked.gif
new file mode 100644
index 0000000..7688b11
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconChecked.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconSafe.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconSafe.gif
new file mode 100644
index 0000000..5bd6fc0
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconSafe.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconText.gif
new file mode 100644
index 0000000..a130c6e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/leaf.gif
new file mode 100644
index 0000000..0634564
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line.gif
new file mode 100644
index 0000000..931d591
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1.gif
new file mode 100644
index 0000000..931d591
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1_rtl.gif
new file mode 100644
index 0000000..b2466f6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line1_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2.gif
new file mode 100644
index 0000000..6b38bd5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2_rtl.gif
new file mode 100644
index 0000000..2ac45c5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3.gif
new file mode 100644
index 0000000..8ed13c6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3_rtl.gif
new file mode 100644
index 0000000..7e259a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4.gif
new file mode 100644
index 0000000..7d59525
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4_rtl.gif
new file mode 100644
index 0000000..61536a8
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/line4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/lock.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus.gif
new file mode 100644
index 0000000..8742cbc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2.gif
new file mode 100644
index 0000000..eb2ebae
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2_rtl.gif
new file mode 100644
index 0000000..7dbdc0f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3.gif
new file mode 100644
index 0000000..6d2f0f3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3_rtl.gif
new file mode 100644
index 0000000..61e00f2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4.gif
new file mode 100644
index 0000000..0acf2ce
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4_rtl.gif
new file mode 100644
index 0000000..2e1e281
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5.gif
new file mode 100644
index 0000000..b00c9d6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5_rtl.gif
new file mode 100644
index 0000000..05f7791
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/minus5_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus.gif
new file mode 100644
index 0000000..d84193e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2.gif
new file mode 100644
index 0000000..aa2fdd0
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2_rtl.gif
new file mode 100644
index 0000000..4a37768
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3.gif
new file mode 100644
index 0000000..afecbf7
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3_rtl.gif
new file mode 100644
index 0000000..0462010
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4.gif
new file mode 100644
index 0000000..3467f99
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4_rtl.gif
new file mode 100644
index 0000000..bdbf2d8
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5.gif
new file mode 100644
index 0000000..7f50af7
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5_rtl.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5_rtl.gif
new file mode 100644
index 0000000..a336987
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/plus5_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluebooks/tombs.gif b/funcweb/funcweb/static/images/imgs/csh_bluebooks/tombs.gif
new file mode 100644
index 0000000..312ac91
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluebooks/tombs.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/blank.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderClosed.gif
new file mode 100644
index 0000000..fde725c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderOpen.gif
new file mode 100644
index 0000000..7375283
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll_2.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll_2.gif
new file mode 100644
index 0000000..aed4629
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckAll_2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconChecked.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconChecked.gif
new file mode 100644
index 0000000..7688b11
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconChecked.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconFlag.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconFlag.gif
new file mode 100644
index 0000000..db85ef8
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconFlag.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconGraph.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconGraph.gif
new file mode 100644
index 0000000..96fd208
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconGraph.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconSound.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconSound.gif
new file mode 100644
index 0000000..a10dcdb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconSound.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconText.gif
new file mode 100644
index 0000000..1c0d179
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconTexts.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconTexts.gif
new file mode 100644
index 0000000..1feed5c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconTexts.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite1.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite1.gif
new file mode 100644
index 0000000..0e27343
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite2.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite2.gif
new file mode 100644
index 0000000..2dafad1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/iconWrite2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/leaf.gif
new file mode 100644
index 0000000..8c50c6c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/line.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/line1.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/line2.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/line3.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/line4.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/lock.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus.gif
new file mode 100644
index 0000000..ef04a54
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus.gif
new file mode 100644
index 0000000..abb84bd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_bluefolders/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/blank.gif b/funcweb/funcweb/static/images/imgs/csh_books/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_books/folderClosed.gif
new file mode 100644
index 0000000..e4bd9d6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_books/folderOpen.gif
new file mode 100644
index 0000000..020ce72
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_books/leaf.gif
new file mode 100644
index 0000000..b0ce63a
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/line.gif b/funcweb/funcweb/static/images/imgs/csh_books/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/line1.gif b/funcweb/funcweb/static/images/imgs/csh_books/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/line2.gif b/funcweb/funcweb/static/images/imgs/csh_books/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/line3.gif b/funcweb/funcweb/static/images/imgs/csh_books/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/line4.gif b/funcweb/funcweb/static/images/imgs/csh_books/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/lock.gif b/funcweb/funcweb/static/images/imgs/csh_books/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/minus.gif b/funcweb/funcweb/static/images/imgs/csh_books/minus.gif
new file mode 100644
index 0000000..ef04a54
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_books/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_books/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_books/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_books/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/plus.gif b/funcweb/funcweb/static/images/imgs/csh_books/plus.gif
new file mode 100644
index 0000000..abb84bd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_books/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_books/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_books/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_books/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_books/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_books/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/tombs.gif b/funcweb/funcweb/static/images/imgs/csh_books/tombs.gif
new file mode 100644
index 0000000..25131ee
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/tombs.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_books/tombs_open.gif b/funcweb/funcweb/static/images/imgs/csh_books/tombs_open.gif
new file mode 100644
index 0000000..25131ee
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_books/tombs_open.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/blank.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderClosed.gif
new file mode 100644
index 0000000..b365ebd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderOpen.gif
new file mode 100644
index 0000000..01f21be
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconChecked.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconChecked.gif
new file mode 100644
index 0000000..7688b11
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconChecked.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconFlag.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconFlag.gif
new file mode 100644
index 0000000..96abe56
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconFlag.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconGraph.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconGraph.gif
new file mode 100644
index 0000000..928c2ea
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconGraph.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconSound.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconSound.gif
new file mode 100644
index 0000000..5328b86
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconSound.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconText.gif
new file mode 100644
index 0000000..f377914
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconTexts.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconTexts.gif
new file mode 100644
index 0000000..aa4d0d5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconTexts.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite1.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite1.gif
new file mode 100644
index 0000000..63be321
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite2.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite2.gif
new file mode 100644
index 0000000..c761c8b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/iconWrite2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/leaf.gif
new file mode 100644
index 0000000..abb8500
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/line.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/line1.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/line2.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/line3.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/line4.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/lock.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus.gif
new file mode 100644
index 0000000..ef04a54
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus.gif
new file mode 100644
index 0000000..abb84bd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_close.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_close.gif
new file mode 100644
index 0000000..bcaa457
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_close.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_open.gif b/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_open.gif
new file mode 100644
index 0000000..a351540
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_scbrblue/safe_open.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/blank.gif b/funcweb/funcweb/static/images/imgs/csh_vista/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_vista/folderClosed.gif
new file mode 100644
index 0000000..6cba317
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_vista/folderOpen.gif
new file mode 100644
index 0000000..a23e98e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckAll.gif
new file mode 100644
index 0000000..e076d0e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckDis.gif
new file mode 100644
index 0000000..5ce835c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckGray.gif
new file mode 100644
index 0000000..e4df898
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconChecked.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconChecked.gif
new file mode 100644
index 0000000..24b6835
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconChecked.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconFlag.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconFlag.gif
new file mode 100644
index 0000000..2784d0f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconFlag.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconGraph.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconGraph.gif
new file mode 100644
index 0000000..1b03efb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconGraph.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconSound.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconSound.gif
new file mode 100644
index 0000000..11fe41c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconSound.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconText.gif
new file mode 100644
index 0000000..d0cf49a
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconTexts.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconTexts.gif
new file mode 100644
index 0000000..5b94f47
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconTexts.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckAll.gif
new file mode 100644
index 0000000..5e64821
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckDis.gif
new file mode 100644
index 0000000..71e8644
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite1.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite1.gif
new file mode 100644
index 0000000..24687cb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite2.gif b/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite2.gif
new file mode 100644
index 0000000..c69d6de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/iconWrite2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_vista/leaf.gif
new file mode 100644
index 0000000..f101ba8
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/line.gif b/funcweb/funcweb/static/images/imgs/csh_vista/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/line1.gif b/funcweb/funcweb/static/images/imgs/csh_vista/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/line2.gif b/funcweb/funcweb/static/images/imgs/csh_vista/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/line3.gif b/funcweb/funcweb/static/images/imgs/csh_vista/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/line4.gif b/funcweb/funcweb/static/images/imgs/csh_vista/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/lock.gif b/funcweb/funcweb/static/images/imgs/csh_vista/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/minus.gif b/funcweb/funcweb/static/images/imgs/csh_vista/minus.gif
new file mode 100644
index 0000000..2bf2b39
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_vista/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_vista/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_vista/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_vista/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/plus.gif b/funcweb/funcweb/static/images/imgs/csh_vista/plus.gif
new file mode 100644
index 0000000..8f74758
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_vista/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_vista/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_vista/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_vista/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_vista/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_vista/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_vista/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_vista/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/blank.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/folderClosed.gif
new file mode 100644
index 0000000..5f07acb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/folderOpen.gif
new file mode 100644
index 0000000..9c6df7e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconChecked.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconChecked.gif
new file mode 100644
index 0000000..7688b11
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconChecked.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconFlag.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconFlag.gif
new file mode 100644
index 0000000..d40141b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconFlag.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconGraph.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconGraph.gif
new file mode 100644
index 0000000..0dee8e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconGraph.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconSound.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconSound.gif
new file mode 100644
index 0000000..ed1d0c2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconSound.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconText.gif
new file mode 100644
index 0000000..f80329c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconTexts.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconTexts.gif
new file mode 100644
index 0000000..f8fad8f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconTexts.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite1.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite1.gif
new file mode 100644
index 0000000..99a2d76
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite2.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite2.gif
new file mode 100644
index 0000000..d33c330
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/iconWrite2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/leaf.gif
new file mode 100644
index 0000000..7aa24a6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/leaves.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/leaves.gif
new file mode 100644
index 0000000..1e5140f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/leaves.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/line.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/line.gif
new file mode 100644
index 0000000..f9db803
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/line1.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/line1.gif
new file mode 100644
index 0000000..f9db803
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/line2.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/line2.gif
new file mode 100644
index 0000000..8019049
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/line3.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/line3.gif
new file mode 100644
index 0000000..9ff1084
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/line4.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/line4.gif
new file mode 100644
index 0000000..15fa54e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/lock.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/minus.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus.gif
new file mode 100644
index 0000000..398000f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus2.gif
new file mode 100644
index 0000000..fb482e4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus3.gif
new file mode 100644
index 0000000..3d99428
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus4.gif
new file mode 100644
index 0000000..e90389c
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus5.gif
new file mode 100644
index 0000000..ae8ef74
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/plus.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus.gif
new file mode 100644
index 0000000..2a89621
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus2.gif
new file mode 100644
index 0000000..000ad64
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus3.gif
new file mode 100644
index 0000000..92cd8df
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus4.gif
new file mode 100644
index 0000000..40fe33f
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus5.gif
new file mode 100644
index 0000000..9e5bf61
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_winstyle/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/blank.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/blank.gif
new file mode 100644
index 0000000..d7ae406
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/blank.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_close.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_close.gif
new file mode 100644
index 0000000..e530246
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_close.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_open.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_open.gif
new file mode 100644
index 0000000..d798506
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/books_open.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderClosed.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderClosed.gif
new file mode 100644
index 0000000..097838d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderOpen.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderOpen.gif
new file mode 100644
index 0000000..96be7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckAll.gif
new file mode 100644
index 0000000..2671733
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckDis.gif
new file mode 100644
index 0000000..53349a1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckGray.gif
new file mode 100644
index 0000000..88137a3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconText.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconText.gif
new file mode 100644
index 0000000..c5deed2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconText.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckAll.gif
new file mode 100644
index 0000000..c4388e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckDis.gif
new file mode 100644
index 0000000..174eff4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf.gif
new file mode 100644
index 0000000..e530246
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf2.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf2.gif
new file mode 100644
index 0000000..d798506
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf3.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf3.gif
new file mode 100644
index 0000000..4fca896
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf_2.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf_2.gif
new file mode 100644
index 0000000..4fca896
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/leaf_2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line1.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line2.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line3.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line4.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/lock.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus.gif
new file mode 100644
index 0000000..ef04a54
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus2.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus3.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus4.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus5.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus.gif
new file mode 100644
index 0000000..abb84bd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus2.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus3.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus4.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus5.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_off.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_off.gif
new file mode 100644
index 0000000..b3baf66
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_on.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_on.gif
new file mode 100644
index 0000000..476fbb3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs.gif
new file mode 100644
index 0000000..791daee
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs_open.gif b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs_open.gif
new file mode 100644
index 0000000..a3ff503
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/csh_yellowbooks/tombs_open.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/folderClosed.gif b/funcweb/funcweb/static/images/imgs/folderClosed.gif
new file mode 100644
index 0000000..1ebe3c9
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/folderClosed.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/folderOpen.gif b/funcweb/funcweb/static/images/imgs/folderOpen.gif
new file mode 100644
index 0000000..c193e86
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/folderOpen.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/iconCheckAll.gif b/funcweb/funcweb/static/images/imgs/iconCheckAll.gif
new file mode 100644
index 0000000..d908992
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/iconCheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/iconCheckDis.gif b/funcweb/funcweb/static/images/imgs/iconCheckDis.gif
new file mode 100644
index 0000000..6f0b1c7
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/iconCheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/iconCheckGray.gif b/funcweb/funcweb/static/images/imgs/iconCheckGray.gif
new file mode 100644
index 0000000..cb54c0a
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/iconCheckGray.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/iconUncheckAll.gif b/funcweb/funcweb/static/images/imgs/iconUncheckAll.gif
new file mode 100644
index 0000000..5e54ec5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/iconUncheckAll.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/iconUncheckDis.gif b/funcweb/funcweb/static/images/imgs/iconUncheckDis.gif
new file mode 100644
index 0000000..eec88a7
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/iconUncheckDis.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/leaf.gif b/funcweb/funcweb/static/images/imgs/leaf.gif
new file mode 100644
index 0000000..1cf40f1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/leaf.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line.gif b/funcweb/funcweb/static/images/imgs/line.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line1.gif b/funcweb/funcweb/static/images/imgs/line1.gif
new file mode 100644
index 0000000..60f2ccb
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line1.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line1_rtl.gif b/funcweb/funcweb/static/images/imgs/line1_rtl.gif
new file mode 100644
index 0000000..96db473
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line1_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line2.gif b/funcweb/funcweb/static/images/imgs/line2.gif
new file mode 100644
index 0000000..f2d7bdd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line2_rtl.gif b/funcweb/funcweb/static/images/imgs/line2_rtl.gif
new file mode 100644
index 0000000..5e6c6fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line3.gif b/funcweb/funcweb/static/images/imgs/line3.gif
new file mode 100644
index 0000000..d718be2
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line3_rtl.gif b/funcweb/funcweb/static/images/imgs/line3_rtl.gif
new file mode 100644
index 0000000..df7f5d8
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line4.gif b/funcweb/funcweb/static/images/imgs/line4.gif
new file mode 100644
index 0000000..29285e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/line4_rtl.gif b/funcweb/funcweb/static/images/imgs/line4_rtl.gif
new file mode 100644
index 0000000..6c97452
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/line4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/lock.gif b/funcweb/funcweb/static/images/imgs/lock.gif
new file mode 100644
index 0000000..1d06b0d
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/lock.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus.gif b/funcweb/funcweb/static/images/imgs/minus.gif
new file mode 100644
index 0000000..ef04a54
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus2.gif b/funcweb/funcweb/static/images/imgs/minus2.gif
new file mode 100644
index 0000000..0372294
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus2_rtl.gif b/funcweb/funcweb/static/images/imgs/minus2_rtl.gif
new file mode 100644
index 0000000..521c2bf
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus3.gif b/funcweb/funcweb/static/images/imgs/minus3.gif
new file mode 100644
index 0000000..d928af6
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus3_rtl.gif b/funcweb/funcweb/static/images/imgs/minus3_rtl.gif
new file mode 100644
index 0000000..837f7c3
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus4.gif b/funcweb/funcweb/static/images/imgs/minus4.gif
new file mode 100644
index 0000000..30bc7de
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus4_rtl.gif b/funcweb/funcweb/static/images/imgs/minus4_rtl.gif
new file mode 100644
index 0000000..6dd9fbe
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus5.gif b/funcweb/funcweb/static/images/imgs/minus5.gif
new file mode 100644
index 0000000..e2e30fc
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus5_rtl.gif b/funcweb/funcweb/static/images/imgs/minus5_rtl.gif
new file mode 100644
index 0000000..ae0885b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus5_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/minus_ar.gif b/funcweb/funcweb/static/images/imgs/minus_ar.gif
new file mode 100644
index 0000000..4428ba1
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/minus_ar.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus.gif b/funcweb/funcweb/static/images/imgs/plus.gif
new file mode 100644
index 0000000..abb84bd
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus2.gif b/funcweb/funcweb/static/images/imgs/plus2.gif
new file mode 100644
index 0000000..ea2816e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus2.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus2_rtl.gif b/funcweb/funcweb/static/images/imgs/plus2_rtl.gif
new file mode 100644
index 0000000..f1ba582
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus2_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus3.gif b/funcweb/funcweb/static/images/imgs/plus3.gif
new file mode 100644
index 0000000..cd6967e
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus3.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus3_rtl.gif b/funcweb/funcweb/static/images/imgs/plus3_rtl.gif
new file mode 100644
index 0000000..b8cad18
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus3_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus4.gif b/funcweb/funcweb/static/images/imgs/plus4.gif
new file mode 100644
index 0000000..185bd9b
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus4.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus4_rtl.gif b/funcweb/funcweb/static/images/imgs/plus4_rtl.gif
new file mode 100644
index 0000000..ce882e4
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus4_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus5.gif b/funcweb/funcweb/static/images/imgs/plus5.gif
new file mode 100644
index 0000000..72fe4e5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus5.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus5_rtl.gif b/funcweb/funcweb/static/images/imgs/plus5_rtl.gif
new file mode 100644
index 0000000..15455b5
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus5_rtl.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/plus_ar.gif b/funcweb/funcweb/static/images/imgs/plus_ar.gif
new file mode 100644
index 0000000..d2fcaf0
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/plus_ar.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/radio_off.gif b/funcweb/funcweb/static/images/imgs/radio_off.gif
new file mode 100644
index 0000000..27dc5f9
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/radio_off.gif
Binary files differ
diff --git a/funcweb/funcweb/static/images/imgs/radio_on.gif b/funcweb/funcweb/static/images/imgs/radio_on.gif
new file mode 100644
index 0000000..efd74ee
--- /dev/null
+++ b/funcweb/funcweb/static/images/imgs/radio_on.gif
Binary files differ
diff --git a/funcweb/funcweb/static/javascript/dhtmlxcommon.js b/funcweb/funcweb/static/javascript/dhtmlxcommon.js
new file mode 100644
index 0000000..34def09
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/dhtmlxcommon.js
@@ -0,0 +1,643 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+ /**
+ * @desc: xmlLoader object
+ * @type: private
+ * @param: funcObject - xml parser function
+ * @param: object - jsControl object
+ * @param: async - sync/async mode (async by default)
+ * @param: rSeed - enable/disable random seed ( prevent IE caching)
+ * @topic: 0
+ */
+function dtmlXMLLoaderObject(funcObject, dhtmlObject,async,rSeed){
+ this.xmlDoc="";
+
+ if (typeof(async) != "undefined")
+ this.async = async;
+ else this.async = true;
+
+ this.onloadAction=funcObject||null;
+ this.mainObject=dhtmlObject||null;
+ this.waitCall=null;
+ this.rSeed=rSeed||false;
+ return this;
+};
+ /**
+ * @desc: xml loading handler
+ * @type: private
+ * @param: dtmlObject - xmlLoader object
+ * @topic: 0
+ */
+ dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){
+ var once=true;
+ this.check=function (){
+ if ((dhtmlObject)&&(dhtmlObject.onloadAction!=null)){
+ if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){
+ if (!once) return; once=false; //IE 5 fix
+ dhtmlObject.onloadAction(dhtmlObject.mainObject,null,null,null,dhtmlObject);
+ if (dhtmlObject.waitCall) { dhtmlObject.waitCall(); dhtmlObject.waitCall=null; }
+ }
+ }
+ };
+ return this.check;
+ };
+
+ /**
+ * @desc: return XML top node
+ * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla)
+ * @type: private
+ * @returns: top XML node
+ * @topic: 0
+ */
+ dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName,oldObj){
+ if (this.xmlDoc.responseXML) {
+ var temp=this.xmlDoc.responseXML.getElementsByTagName(tagName);
+ var z=temp[0];
+ }else
+ var z=this.xmlDoc.documentElement;
+ if (z){
+ this._retry=false;
+ return z;
+ }
+
+ if ((_isIE)&&(!this._retry)){
+ //fall back to MS.XMLDOM
+ var xmlString=this.xmlDoc.responseText;
+ var oldObj=this.xmlDoc;
+ this._retry=true;
+ this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+ this.xmlDoc.async=false;
+ this.xmlDoc["loadXM"+"L"](xmlString);
+
+ return this.getXMLTopNode(tagName,oldObj);
+ }
+ dhtmlxError.throwError("LoadXML","Incorrect XML",[(oldObj||this.xmlDoc),this.mainObject]);
+ return document.createElement("DIV");
+ };
+
+ /**
+ * @desc: load XML from string
+ * @type: private
+ * @param: xmlString - xml string
+ * @topic: 0
+ */
+ dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){
+ {
+ try
+ {
+ var parser = new DOMParser();
+ this.xmlDoc = parser.parseFromString(xmlString,"text/xml");
+ }
+ catch(e){
+ this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+ this.xmlDoc.async=this.async;
+ this.xmlDoc["loadXM"+"L"](xmlString);
+ }
+ }
+
+ this.onloadAction(this.mainObject,null,null,null,this);
+ if (this.waitCall) { this.waitCall(); this.waitCall=null; }
+ }
+ /**
+ * @desc: load XML
+ * @type: private
+ * @param: filePath - xml file path
+ * @param: postMode - send POST request
+ * @param: postVars - list of vars for post request
+ * @topic: 0
+ */
+ dtmlXMLLoaderObject.prototype.loadXML=function(filePath,postMode,postVars,rpc){
+ if (this.rSeed) filePath+=((filePath.indexOf("?")!=-1)?"&":"?")+"a_dhx_rSeed="+(new Date()).valueOf();
+ this.filePath=filePath;
+
+ if ((!_isIE)&&(window.XMLHttpRequest))
+ this.xmlDoc = new XMLHttpRequest();
+ else{
+
+ if (document.implementation && document.implementation.createDocument)
+ {
+ this.xmlDoc = document.implementation.createDocument("", "", null);
+ this.xmlDoc.onload = new this.waitLoadFunction(this);
+ this.xmlDoc.load(filePath);
+ return;
+ }
+ else
+ this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+
+
+ if (this.async)
+ this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);
+ this.xmlDoc.open(postMode?"POST":"GET",filePath,this.async);
+ if (rpc){
+ this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 (" + navigator.userAgent + ")");
+ this.xmlDoc.setRequestHeader("Content-type", "text/xml");
+ } else
+ if (postMode) this.xmlDoc.setRequestHeader('Content-type','application/x-www-form-urlencoded');
+ this.xmlDoc.send(null||postVars);
+
+ if (!this.async) (new this.waitLoadFunction(this))();
+
+
+ };
+ /**
+ * @desc: destructor, cleans used memory
+ * @type: private
+ * @topic: 0
+ */
+ dtmlXMLLoaderObject.prototype.destructor=function(){
+ this.onloadAction=null;
+ this.mainObject=null;
+ this.xmlDoc=null;
+ return null;
+ }
+
+ /**
+ * @desc: Call wrapper
+ * @type: private
+ * @param: funcObject - action handler
+ * @param: dhtmlObject - user data
+ * @returns: function handler
+ * @topic: 0
+ */
+function callerFunction(funcObject,dhtmlObject){
+ this.handler=function(e){
+ if (!e) e=window.event;
+ funcObject(e,dhtmlObject);
+ return true;
+ };
+ return this.handler;
+};
+
+ /**
+ * @desc: Calculate absolute position of html object
+ * @type: private
+ * @param: htmlObject - html object
+ * @topic: 0
+ */
+function getAbsoluteLeft(htmlObject){
+ var xPos = htmlObject.offsetLeft;
+ var temp = htmlObject.offsetParent;
+ while (temp != null) {
+ xPos += temp.offsetLeft;
+ temp = temp.offsetParent;
+ }
+ return xPos;
+ }
+ /**
+ * @desc: Calculate absolute position of html object
+ * @type: private
+ * @param: htmlObject - html object
+ * @topic: 0
+ */
+function getAbsoluteTop(htmlObject) {
+ var yPos = htmlObject.offsetTop;
+ var temp = htmlObject.offsetParent;
+ while (temp != null) {
+ yPos += temp.offsetTop;
+ temp = temp.offsetParent;
+ }
+ return yPos;
+ }
+
+
+/**
+* @desc: Convert string to it boolean representation
+* @type: private
+* @param: inputString - string for covertion
+* @topic: 0
+*/
+function convertStringToBoolean(inputString){ if (typeof(inputString)=="string") inputString=inputString.toLowerCase();
+ switch(inputString){
+ case "1":
+ case "true":
+ case "yes":
+ case "y":
+ case 1:
+ case true:
+ return true;
+ break;
+ default: return false;
+ }
+}
+
+/**
+* @desc: find out what symbol to use as url param delimiters in further params
+* @type: private
+* @param: str - current url string
+* @topic: 0
+*/
+function getUrlSymbol(str){
+ if(str.indexOf("?")!=-1)
+ return "&"
+ else
+ return "?"
+ }
+
+
+function dhtmlDragAndDropObject(){
+ if (window.dhtmlDragAndDrop) return window.dhtmlDragAndDrop;
+ this.lastLanding=0;
+ this.dragNode=0;
+ this.dragStartNode=0;
+ this.dragStartObject=0;
+ this.tempDOMU=null;
+ this.tempDOMM=null;
+ this.waitDrag=0;
+ window.dhtmlDragAndDrop=this;
+
+ return this;
+ };
+
+ dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){
+ htmlNode.onmousedown=null;
+ htmlNode.dragStarter=null;
+ htmlNode.dragLanding=null;
+ }
+ dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode,dhtmlObject){
+ htmlNode.onmousedown=this.preCreateDragCopy;
+ htmlNode.dragStarter=dhtmlObject;
+ this.addDragLanding(htmlNode,dhtmlObject);
+ }
+ dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode,dhtmlObject){
+ htmlNode.dragLanding=dhtmlObject;
+ }
+ dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e)
+ {
+ if (e && (e||event).button==2) return;
+ if (window.dhtmlDragAndDrop.waitDrag) {
+ window.dhtmlDragAndDrop.waitDrag=0;
+ document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;
+ document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;
+ return false;
+ }
+
+ window.dhtmlDragAndDrop.waitDrag=1;
+ window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;
+ window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;
+ window.dhtmlDragAndDrop.dragStartNode=this;
+ window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;
+ document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;
+ document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;
+
+ if ((e)&&(e.preventDefault)) { e.preventDefault(); return false; }
+ return false;
+ };
+ dhtmlDragAndDropObject.prototype.callDrag=function(e){
+ if (!e) e=window.event;
+ dragger=window.dhtmlDragAndDrop;
+
+ if ((e.button==0)&&(_isIE)) return dragger.stopDrag();
+ if (!dragger.dragNode && dragger.waitDrag) {
+ dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode,e);
+ if (!dragger.dragNode) return dragger.stopDrag();
+ dragger.gldragNode=dragger.dragNode;
+ document.body.appendChild(dragger.dragNode);
+ document.body.onmouseup=dragger.stopDrag;
+ dragger.waitDrag=0;
+ dragger.dragNode.pWindow=window;
+ dragger.initFrameRoute();
+ }
+
+
+ if (dragger.dragNode.parentNode!=window.document.body){
+ var grd=dragger.gldragNode;
+ if (dragger.gldragNode.old) grd=dragger.gldragNode.old;
+
+ //if (!document.all) dragger.calculateFramePosition();
+ grd.parentNode.removeChild(grd);
+ var oldBody=dragger.dragNode.pWindow;
+ // var oldp=dragger.dragNode.parentObject;
+ if (_isIE){
+ var div=document.createElement("Div");
+ div.innerHTML=dragger.dragNode.outerHTML;
+ dragger.dragNode=div.childNodes[0]; }
+ else dragger.dragNode=dragger.dragNode.cloneNode(true);
+
+ dragger.dragNode.pWindow=window;
+ // dragger.dragNode.parentObject=oldp;
+
+ dragger.gldragNode.old=dragger.dragNode;
+ document.body.appendChild(dragger.dragNode);
+ oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode;
+ }
+
+ dragger.dragNode.style.left=e.clientX+15+(dragger.fx?dragger.fx*(-1):0)+(document.body.scrollLeft||document.documentElement.scrollLeft)+"px";
+ dragger.dragNode.style.top=e.clientY+3+(dragger.fy?dragger.fy*(-1):0)+(document.body.scrollTop||document.documentElement.scrollTop)+"px";
+ if (!e.srcElement) var z=e.target; else z=e.srcElement;
+ dragger.checkLanding(z,e);
+ }
+
+ dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){
+ //this.fx = 0, this.fy = 0;
+ if (window.name) {
+ var el =parent.frames[window.name].frameElement.offsetParent;
+ var fx=0;
+ var fy=0;
+ while (el) { fx += el.offsetLeft; fy += el.offsetTop; el = el.offsetParent; }
+ if ((parent.dhtmlDragAndDrop)) { var ls=parent.dhtmlDragAndDrop.calculateFramePosition(1); fx+=ls.split('_')[0]*1; fy+=ls.split('_')[1]*1; }
+ if (n) return fx+"_"+fy;
+ else this.fx=fx; this.fy=fy;
+ }
+ return "0_0";
+ }
+ dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject,e){
+
+ if ((htmlObject)&&(htmlObject.dragLanding)) {
+ if (this.lastLanding)
+ this.lastLanding.dragLanding._dragOut(this.lastLanding);
+ this.lastLanding=htmlObject;
+ this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,e.clientX, e.clientY,e);
+ this.lastLanding_scr=(_isIE?e.srcElement:e.target);
+ }
+ else {
+ if ((htmlObject)&&(htmlObject.tagName!="BODY")) this.checkLanding(htmlObject.parentNode,e);
+ else {
+ if (this.lastLanding) this.lastLanding.dragLanding._dragOut(this.lastLanding,e.clientX, e.clientY,e); this.lastLanding=0;
+ if (this._onNotFound) this._onNotFound();
+ }
+ }
+ }
+ dhtmlDragAndDropObject.prototype.stopDrag=function(e,mode){
+ dragger=window.dhtmlDragAndDrop;
+ if (!mode)
+ {
+ dragger.stopFrameRoute();
+ var temp=dragger.lastLanding;
+ dragger.lastLanding=null;
+ if (temp) temp.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,temp,(_isIE?event.srcElement:e.target));
+ }
+ dragger.lastLanding=null;
+ if ((dragger.dragNode)&&(dragger.dragNode.parentNode==document.body)) dragger.dragNode.parentNode.removeChild(dragger.dragNode);
+ dragger.dragNode=0;
+ dragger.gldragNode=0;
+ dragger.fx=0;
+ dragger.fy=0;
+ dragger.dragStartNode=0;
+ dragger.dragStartObject=0;
+ document.body.onmouseup=dragger.tempDOMU;
+ document.body.onmousemove=dragger.tempDOMM;
+ dragger.tempDOMU=null;
+ dragger.tempDOMM=null;
+ dragger.waitDrag=0;
+ }
+
+ dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){
+ if (win)
+ window.dhtmlDragAndDrop.stopDrag(1,1);
+
+ for (var i=0; i<window.frames.length; i++)
+ if ((window.frames[i]!=win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window);
+ if ((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=win))
+ parent.dhtmlDragAndDrop.stopFrameRoute(window);
+ }
+ dhtmlDragAndDropObject.prototype.initFrameRoute=function(win,mode){
+ if (win) {
+
+
+ window.dhtmlDragAndDrop.preCreateDragCopy();
+ window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode;
+ window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject;
+ window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode;
+ window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode;
+ window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;
+ window.waitDrag=0;
+ if (((!_isIE)&&(mode))&&((!_isFF)||(_FFrv<1.8)))
+ window.dhtmlDragAndDrop.calculateFramePosition();
+ }
+ if ((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=win))
+ parent.dhtmlDragAndDrop.initFrameRoute(window);
+ for (var i=0; i<window.frames.length; i++)
+ if ((window.frames[i]!=win)&&(window.frames[i].dhtmlDragAndDrop))
+ window.frames[i].dhtmlDragAndDrop.initFrameRoute(window,((!win||mode)?1:0));
+
+ }
+
+var _isFF=false; var _isIE=false; var _isOpera=false; var _isKHTML=false; var _isMacOS=false;
+
+if (navigator.userAgent.indexOf('Macintosh') != -1) _isMacOS=true;
+if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror')!= -1)){
+ var _KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7,5));
+ if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+
+
+ _isFF=true;
+ var _FFrv=1.9;
+ } else
+ _isKHTML=true;
+}
+else if (navigator.userAgent.indexOf('Opera') != -1){
+ _isOpera=true;
+ _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6,3));
+ }
+else if(navigator.appName.indexOf("Microsoft")!=-1)
+ _isIE=true;
+else {
+ _isFF=true;
+ var _FFrv=parseFloat(navigator.userAgent.split("rv:")[1])
+ }
+
+//deprecated, use global constant instead
+//determines if current browser is IE
+function isIE(){
+ if(navigator.appName.indexOf("Microsoft")!=-1)
+ if (navigator.userAgent.indexOf('Opera') == -1)
+ return true;
+ return false;
+}
+
+//multibrowser Xpath processor
+dtmlXMLLoaderObject.prototype.doXPath = function(xpathExp,docObj,namespace,result_type){
+ if ((_isKHTML)) return this.doXPathOpera(xpathExp,docObj);
+ if(_isIE){//IE
+ if(!docObj)
+ if(!this.xmlDoc.nodeName)
+ docObj = this.xmlDoc.responseXML
+ else
+ docObj = this.xmlDoc;
+ if (!docObj) dhtmlxError.throwError("LoadXML","Incorrect XML",[(docObj||this.xmlDoc),this.mainObject]);
+
+ if(namespace!=null)
+ docObj.setProperty("SelectionNamespaces","xmlns:xsl='"+namespace+"'");//
+ if(result_type=='single'){
+ return docObj.selectSingleNode(xpathExp);
+ }else{
+ return docObj.selectNodes(xpathExp)||new Array(0);
+ }
+ }else{//Mozilla
+ var nodeObj = docObj;
+ if(!docObj){
+ if(!this.xmlDoc.nodeName){
+ docObj = this.xmlDoc.responseXML
+ }else{
+ docObj = this.xmlDoc;
+ }
+ }
+
+ if (!docObj) dhtmlxError.throwError("LoadXML","Incorrect XML",[(docObj||this.xmlDoc),this.mainObject]);
+ if(docObj.nodeName.indexOf("document")!=-1){
+ nodeObj = docObj;
+ }else{
+ nodeObj = docObj;
+ docObj = docObj.ownerDocument;
+
+ }
+ var retType = XPathResult.ANY_TYPE;
+ if(result_type=='single')
+ retType = XPathResult.FIRST_ORDERED_NODE_TYPE
+ var rowsCol = new Array();
+ var col = docObj.evaluate(xpathExp, nodeObj, function(pref){return namespace}, retType,null);
+ if(retType == XPathResult.FIRST_ORDERED_NODE_TYPE){
+ return col.singleNodeValue ;
+ }
+ var thisColMemb = col.iterateNext();
+ while (thisColMemb) {
+ rowsCol[rowsCol.length] = thisColMemb;
+ thisColMemb = col.iterateNext();
+ }
+ return rowsCol;
+ }
+}
+
+
+function _dhtmlxError(type,name,params){
+ if (!this.catches)
+ this.catches=new Array();
+
+ return this;
+}
+
+_dhtmlxError.prototype.catchError=function(type,func_name){
+ this.catches[type]=func_name;
+}
+_dhtmlxError.prototype.throwError=function(type,name,params){
+ if (this.catches[type]) return this.catches[type](type,name,params);
+ if (this.catches["ALL"]) return this.catches["ALL"](type,name,params);
+ alert("Error type: " + arguments[0]+"\nDescription: " + arguments[1] );
+ return null;
+}
+
+window.dhtmlxError=new _dhtmlxError();
+
+
+//opera fake, while 9.0 not released
+//multibrowser Xpath processor
+dtmlXMLLoaderObject.prototype.doXPathOpera = function(xpathExp,docObj){
+ //this is fake for Opera
+ var z=xpathExp.replace(/[\/]+/gi,"/").split('/');
+ var obj=null;
+ var i=1;
+
+ if (!z.length) return [];
+ if (z[0]==".")
+ obj=[docObj];
+ else if (z[0]=="")
+ {
+ obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g,""));
+ i++;
+ }
+ else return [];
+
+ for (i; i<z.length; i++)
+ obj=this._getAllNamedChilds(obj,z[i]);
+
+ if (z[i-1].indexOf("[")!=-1)
+ obj=this._filterXPath(obj,z[i-1]);
+ return obj;
+}
+
+dtmlXMLLoaderObject.prototype._filterXPath = function(a,b){
+ var c=new Array();
+ var b=b.replace(/[^\[]*\[\@/g,"").replace(/[\[\]\@]*/g,"");
+ for (var i=0; i<a.length; i++)
+ if (a[i].getAttribute(b))
+ c[c.length]=a[i];
+
+ return c;
+}
+dtmlXMLLoaderObject.prototype._getAllNamedChilds = function(a,b){
+ var c=new Array();
+ if (_isKHTML) b=b.toUpperCase();
+ for (var i=0; i<a.length; i++)
+ for (var j=0; j<a[i].childNodes.length; j++){
+ if (_isKHTML) {
+ if (a[i].childNodes[j].tagName && a[i].childNodes[j].tagName.toUpperCase()==b)
+ c[c.length]=a[i].childNodes[j];
+ }
+ else
+ if (a[i].childNodes[j].tagName==b) c[c.length]=a[i].childNodes[j];
+ }
+
+ return c;
+}
+
+function dhtmlXHeir(a,b){
+ for (var c in b)
+ if (typeof(b[c])=="function") a[c]=b[c];
+ return a;
+}
+function dhtmlxEvent(el,event,handler){
+ if (el.addEventListener)
+ el.addEventListener(event,handler,false);
+ else if (el.attachEvent)
+ el.attachEvent("on"+event,handler);
+}
+
+//============= XSL Extension ===================================
+
+dtmlXMLLoaderObject.prototype.xslDoc = null;
+dtmlXMLLoaderObject.prototype.setXSLParamValue = function(paramName,paramValue,xslDoc){
+ if(!xslDoc)
+ xslDoc = this.xslDoc
+ if(xslDoc.responseXML)
+ xslDoc = xslDoc.responseXML;
+ var item = this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']",xslDoc,"http:/\/www.w3.org/1999/XSL/Transform","single");
+ if(item!=null)
+ item.firstChild.nodeValue=paramValue
+
+}
+dtmlXMLLoaderObject.prototype.doXSLTransToObject = function(xslDoc,xmlDoc)
+{
+ if(!xslDoc)
+ xslDoc = this.xslDoc;
+ if(xslDoc.responseXML)
+ xslDoc = xslDoc.responseXML
+
+ if(!xmlDoc)
+ xmlDoc = this.xmlDoc;
+ if(xmlDoc.responseXML)
+ xmlDoc = xmlDoc.responseXML
+
+ //MOzilla
+ if(!isIE()){
+ if(!this.XSLProcessor){
+ this.XSLProcessor = new XSLTProcessor();
+ this.XSLProcessor.importStylesheet(xslDoc);
+ }
+ var result = this.XSLProcessor.transformToDocument(xmlDoc);
+ }else{
+ var result = new ActiveXObject("Msxml2.DOMDocument.3.0");
+ xmlDoc.transformNodeToObject(xslDoc,result);
+ }
+ return result;
+}
+
+dtmlXMLLoaderObject.prototype.doXSLTransToString = function(xslDoc,xmlDoc)
+{
+ return this.doSerialization(this.doXSLTransToObject(xslDoc,xmlDoc));
+}
+
+dtmlXMLLoaderObject.prototype.doSerialization = function(xmlDoc){
+ if(!isIE()){
+ var xmlSerializer = new XMLSerializer();
+ return xmlSerializer.serializeToString(xmlDoc);
+ }else
+ return xmlDoc.xml;
+}
+
+//(c)dhtmlx ltd. www.dhtmlx.com \ No newline at end of file
diff --git a/funcweb/funcweb/static/javascript/dhtmlxtree.js b/funcweb/funcweb/static/javascript/dhtmlxtree.js
new file mode 100644
index 0000000..9b0310e
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/dhtmlxtree.js
@@ -0,0 +1,3742 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+/*_TOPICS_
+@0:Initialization
+@1:Selection control
+@2:Add/delete
+@3:Private
+@4:Node/level control
+@5:Checkboxes/user data manipulation
+@6:Appearence control
+@7: Handlers
+*/
+
+function xmlPointer(data){
+ this.d=data;
+}
+xmlPointer.prototype={
+ text:function(){ if (!_isFF) return this.d.xml; var x = new XMLSerializer(); return x.serializeToString(this.d); },
+ get:function(name){return this.d.getAttribute(name); },
+ exists:function(){return !!this.d },
+ content:function(){return this.d.firstChild?this.d.firstChild.data:""; }, // <4k in FF
+ each:function(name,f,t,i){ var a=this.d.childNodes; var c=new xmlPointer(); if (a.length) for (i=i||0; i<a.length; i++) if (a[i].tagName==name) { c.d=a[i]; if(f.apply(t,[c,i])==-1) return; } },
+ get_all:function(){ var a={}; var b=this.d.attributes; for (var i=0; i<b.length; i++) a[b[i].name]=b[i].value; return a; },
+ sub:function(name){ var a=this.d.childNodes; var c=new xmlPointer(); if (a.length) for (var i=0; i<a.length; i++) if (a[i].tagName==name) { c.d=a[i]; return c; } },
+ up:function(name){ return new xmlPointer(this.d.parentNode); },
+ set:function(name,val){ this.d.setAttribute(name,val); },
+ clone:function(name){ return new xmlPointer(this.d); },
+ sub_exists:function(name){ var a=this.d.childNodes; if (a.length) for (var i=0; i<a.length; i++) if (a[i].tagName==name) return true; return false; },
+ through:function(name,rule,v,f,t){ var a=this.d.childNodes; if (a.length) for (var i=0; i<a.length; i++) { if (a[i].tagName==name && a[i].getAttribute(rule)!=null && a[i].getAttribute(rule)!="" && (!v || a[i].getAttribute(rule)==v )) { var c=new xmlPointer(a[i]); f.apply(t,[c,i]); } var w=this.d; this.d=a[i]; this.through(name,rule,v,f,t); this.d=w; } }
+}
+
+
+
+/**
+* @desc: tree constructor
+* @param: htmlObject - parent html object or id of parent html object
+* @param: width - tree width
+* @param: height - tree height
+* @param: rootId - id of virtual root node (same as tree node id attribute in xml)
+* @type: public
+* @topic: 0
+*/
+function dhtmlXTreeObject(htmlObject, width, height, rootId){
+ if (_isIE) try { document.execCommand("BackgroundImageCache", false, true); } catch (e){}
+ if (typeof(htmlObject)!="object")
+ this.parentObject=document.getElementById(htmlObject);
+ else
+ this.parentObject=htmlObject;
+
+ this._itim_dg=true;
+ this.dlmtr=",";
+ this.dropLower=false;
+ this.enableIEImageFix();
+
+ this.xmlstate=0;
+ this.mytype="tree";
+ this.smcheck=true; //smart checkboxes
+ this.width=width;
+ this.height=height;
+ this.rootId=rootId;
+ this.childCalc=null;
+ this.def_img_x="18px";
+ this.def_img_y="18px";
+ this.def_line_img_x="18px";
+ this.def_line_img_y="18px";
+
+ this._dragged=new Array();
+ this._selected=new Array();
+
+ this.style_pointer="pointer";
+ if (_isIE) this.style_pointer="hand";
+
+ this._aimgs=true;
+ this.htmlcA=" [";
+ this.htmlcB="]";
+ this.lWin=window;
+ this.cMenu=0;
+ this.mlitems=0;
+ this.dadmode=0;
+ this.slowParse=false;
+ this.autoScroll=true;
+ this.hfMode=0;
+ this.nodeCut=new Array();
+ this.XMLsource=0;
+ this.XMLloadingWarning=0;
+ this._idpull={};
+ this._pullSize=0;
+ this.treeLinesOn=true;
+ this.tscheck=false;
+ this.timgen=true;
+ this.dpcpy=false;
+ this._ld_id=null;
+ this._oie_onXLE=[];
+ this.imPath="treeGfx/";
+ this.checkArray=new Array("iconUncheckAll.gif","iconCheckAll.gif","iconCheckGray.gif","iconUncheckDis.gif","iconCheckDis.gif","iconCheckDis.gif");
+ this.radioArray=new Array("radio_off.gif","radio_on.gif","radio_on.gif","radio_off.gif","radio_on.gif","radio_on.gif");
+
+ this.lineArray=new Array("line2.gif","line3.gif","line4.gif","blank.gif","blank.gif","line1.gif");
+ this.minusArray=new Array("minus2.gif","minus3.gif","minus4.gif","minus.gif","minus5.gif");
+ this.plusArray=new Array("plus2.gif","plus3.gif","plus4.gif","plus.gif","plus5.gif");
+ this.imageArray=new Array("leaf.gif","folderOpen.gif","folderClosed.gif");
+ this.cutImg= new Array(0,0,0);
+ this.cutImage="but_cut.gif";
+
+ this.dragger= new dhtmlDragAndDropObject();
+//create root
+ this.htmlNode=new dhtmlXTreeItemObject(this.rootId,"",0,this);
+ this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display="none";
+ this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className="hiddenRow";
+//init tree structures
+ this.allTree=this._createSelf();
+ this.allTree.appendChild(this.htmlNode.htmlNode);
+ if(_isFF) this.allTree.childNodes[0].width="100%";
+
+ var self=this;
+ this.allTree.onselectstart=new Function("return false;");
+ if (_isMacOS)
+ this.allTree.oncontextmenu = function(e){ return self._doContClick(e||window.event); };
+ this.allTree.onmousedown = function(e){ return self._doContClick(e||window.event); };
+
+ this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe);
+ if (_isIE) this.preventIECashing(true);
+
+
+
+
+ if (window.addEventListener) window.addEventListener("unload",function(){try{ self.destructor(); } catch(e){}},false);
+ if (window.attachEvent) window.attachEvent("onunload",function(){ try{ self.destructor(); } catch(e){}});
+
+ this.dhx_Event();
+ this._onEventSet={onMouseIn:function(){this.ehlt=true;},onMouseOut:function(){this.ehlt=true;},onSelect:function(){this._onSSCF=true;}}
+
+ return this;
+};
+
+
+/**
+* @desc: set default data transfer mode
+* @param: mode - data mode (json,xml,csv)
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.setDataMode=function(mode){
+ this._datamode=mode;
+}
+
+
+
+dhtmlXTreeObject.prototype._doContClick=function(ev){
+ if (ev.button!=2) {
+ if(this._acMenu) this.cMenu._contextEnd();
+ return true;
+ }
+
+ var el=(_isIE?ev.srcElement:ev.target);
+ while ((el)&&(el.tagName!="BODY")) {
+ if (el.parentObject) break;
+ el=el.parentNode;
+ }
+
+ if ((!el)||(!el.parentObject)) return true;
+
+ var obj=el.parentObject;
+ this._acMenu=(obj.cMenu||this.cMenu);
+ if (this._acMenu){
+ el.contextMenuId=obj.id;
+ el.contextMenu=this._acMenu;
+ el.a=this._acMenu._contextStart;
+ if (_isIE)
+ ev.srcElement.oncontextmenu = function(){ event.cancelBubble=true; return false; };
+ el.a(el,ev); el.a=null;
+ ev.cancelBubble=true;
+ return false;
+ }
+ return true;
+}
+
+
+/**
+* @desc: replace IMG tag with background images - solve problem with IE image caching , not works for IE6 SP1
+* @param: mode - true/false - enable/disable fix
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.enableIEImageFix=function(mode){
+ if (!mode){
+
+ this._getImg=function(id){ return document.createElement((id==this.rootId)?"div":"img"); }
+ this._setSrc=function(a,b){ a.src=b; }
+ this._getSrc=function(a){ return a.src; }
+ } else {
+
+ this._getImg=function(){ var z=document.createElement("DIV"); z.innerHTML="&nbsp;"; z.className="dhx_bg_img_fix"; return z; }
+ this._setSrc=function(a,b){ a.style.backgroundImage="url("+b+")"; }
+ this._getSrc=function(a){ var z=a.style.backgroundImage; return z.substr(4,z.length-5); }
+ }
+}
+
+/**
+* @desc: deletes tree and clears memory
+* @type: public
+*/
+dhtmlXTreeObject.prototype.destructor=function(){
+ for (var a in this._idpull){
+ var z=this._idpull[a];
+ if (!z) continue;
+ z.parentObject=null;z.treeNod=null;z.childNodes=null;z.span=null;z.tr.nodem=null;z.tr=null;z.htmlNode.objBelong=null;z.htmlNode=null;
+ this._idpull[a]=null;
+ }
+ this.allTree.innerHTML="";
+ this.XMLLoader.destructor();
+ for(var a in this){
+ this[a]=null;
+ }
+}
+
+function cObject(){
+ return this;
+}
+cObject.prototype= new Object;
+cObject.prototype.clone = function () {
+ function _dummy(){};
+ _dummy.prototype=this;
+ return new _dummy();
+ }
+
+/**
+* @desc: tree node constructor
+* @param: itemId - node id
+* @param: itemText - node label
+* @param: parentObject - parent item object
+* @param: treeObject - tree object
+* @param: actionHandler - onclick event handler(optional)
+* @param: mode - do not show images
+* @type: private
+* @topic: 0
+*/
+function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode){
+ this.htmlNode="";
+ this.acolor="";
+ this.scolor="";
+ this.tr=0;
+ this.childsCount=0;
+ this.tempDOMM=0;
+ this.tempDOMU=0;
+ this.dragSpan=0;
+ this.dragMove=0;
+ this.span=0;
+ this.closeble=1;
+ this.childNodes=new Array();
+ this.userData=new cObject();
+
+
+ this.checkstate=0;
+ this.treeNod=treeObject;
+ this.label=itemText;
+ this.parentObject=parentObject;
+ this.actionHandler=actionHandler;
+ this.images=new Array(treeObject.imageArray[0],treeObject.imageArray[1],treeObject.imageArray[2]);
+
+
+ this.id=treeObject._globalIdStorageAdd(itemId,this);
+ if (this.treeNod.checkBoxOff ) this.htmlNode=this.treeNod._createItem(1,this,mode);
+ else this.htmlNode=this.treeNod._createItem(0,this,mode);
+
+ this.htmlNode.objBelong=this;
+ return this;
+ };
+
+
+/**
+* @desc: register node
+* @type: private
+* @param: itemId - node id
+* @param: itemObject - node object
+* @topic: 3
+*/
+ dhtmlXTreeObject.prototype._globalIdStorageAdd=function(itemId,itemObject){
+ if (this._globalIdStorageFind(itemId,1,1)) { itemId=itemId +"_"+(new Date()).valueOf(); return this._globalIdStorageAdd(itemId,itemObject); }
+ this._idpull[itemId]=itemObject;
+ this._pullSize++;
+ return itemId;
+ };
+
+/**
+* @desc: unregister node
+* @type: private
+* @param: itemId - node id
+* @topic: 3
+*/
+ dhtmlXTreeObject.prototype._globalIdStorageSub=function(itemId){
+ if (this._idpull[itemId]){
+ this._unselectItem(this._idpull[itemId]);
+ this._idpull[itemId]=null;
+ this._pullSize--;
+ }
+ if ((this._locker)&&(this._locker[itemId])) this._locker[itemId]=false;
+ };
+
+/**
+* @desc: return node object
+* @param: itemId - node id
+* @type: private
+* @topic: 3
+*/
+ dhtmlXTreeObject.prototype._globalIdStorageFind=function(itemId,skipXMLSearch,skipParsing,isreparse){
+ var z=this._idpull[itemId]
+ if (z){
+
+ return z;
+ }
+
+ return null;
+ };
+
+
+/**
+* @desc: escape string
+* @param: itemId - item ID
+* @type: private
+* @topic: 3
+*/
+ dhtmlXTreeObject.prototype._escape=function(str){
+ switch(this.utfesc){
+ case "none":
+ return str;
+ break;
+ case "utf8":
+ return encodeURI(str);
+ break;
+ default:
+ return escape(str);
+ break;
+ }
+ }
+
+
+
+/**
+* @desc: create and return new line in tree
+* @type: private
+* @param: htmlObject - parent Node object
+* @param: node - item object
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._drawNewTr=function(htmlObject,node)
+ {
+ var tr =document.createElement('tr');
+ var td1=document.createElement('td');
+ var td2=document.createElement('td');
+ td1.appendChild(document.createTextNode(" "));
+ td2.colSpan=3;
+ td2.appendChild(htmlObject);
+ tr.appendChild(td1); tr.appendChild(td2);
+ return tr;
+ };
+/**
+* @desc: load tree from xml string
+* @type: public
+* @param: xmlString - XML string
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadXMLString=function(xmlString,afterCall){
+ var that=this;
+ if (!this.parsCount) this.callEvent("onXLS",[that,null]);
+ this.xmlstate=1;
+
+ if (afterCall) this.XMLLoader.waitCall=afterCall;
+ this.XMLLoader.loadXMLString(xmlString); };
+/**
+* @desc: load tree from xml file
+* @type: public
+* @param: file - link to XML file
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadXML=function(file,afterCall){
+ if (this._datamode && this._datamode!="xml") return this["load"+this._datamode.toUpperCase()](file,afterCall);
+ var that=this;
+ if (!this.parsCount) this.callEvent("onXLS",[that,this._ld_id]);
+ this._ld_id=null;
+ this.xmlstate=1;
+ this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe);
+
+ if (afterCall) this.XMLLoader.waitCall=afterCall;
+ this.XMLLoader.loadXML(file);
+ };
+/**
+* @desc: create new child node
+* @type: private
+* @param: parentObject - parent node object
+* @param: itemId - new node id
+* @param: itemText - new node text
+* @param: itemActionHandler - function fired on node select event
+* @param: image1 - image for node without children;
+* @param: image2 - image for closed node;
+* @param: image3 - image for opened node
+* @param: optionStr - string of otions
+* @param: childs - node childs flag (for dynamical trees) (optional)
+* @param: beforeNode - node, after which new node will be inserted (optional)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._attachChildNode=function(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs,beforeNode,afterNode){
+
+ if (beforeNode && beforeNode.parentObject) parentObject=beforeNode.parentObject;
+ if (((parentObject.XMLload==0)&&(this.XMLsource))&&(!this.XMLloadingWarning))
+ {
+ parentObject.XMLload=1;
+ this._loadDynXML(parentObject.id);
+
+ }
+
+ var Count=parentObject.childsCount;
+ var Nodes=parentObject.childNodes;
+
+
+ if (afterNode){
+ if (afterNode.tr.previousSibling.previousSibling){
+ beforeNode=afterNode.tr.previousSibling.nodem;
+ }
+ else
+ optionStr=optionStr.replace("TOP","")+",TOP";
+ }
+
+ if (beforeNode)
+ {
+ var ik,jk;
+ for (ik=0; ik<Count; ik++)
+ if (Nodes[ik]==beforeNode)
+ {
+ for (jk=Count; jk!=ik; jk--)
+ Nodes[1+jk]=Nodes[jk];
+ break;
+ }
+ ik++;
+ Count=ik;
+ }
+
+
+ if (optionStr) {
+ var tempStr=optionStr.split(",");
+ for (var i=0; i<tempStr.length; i++)
+ {
+ switch(tempStr[i])
+ {
+ case "TOP": if (parentObject.childsCount>0) { beforeNode=new Object; beforeNode.tr=parentObject.childNodes[0].tr.previousSibling; }
+ parentObject._has_top=true;
+ for (ik=Count; ik>0; ik--)
+ Nodes[ik]=Nodes[ik-1];
+ Count=0;
+ break;
+ }
+ };
+ };
+
+ var n;
+ if (!(n=this._idpull[itemId]) || n.span!=-1){
+ n=Nodes[Count]=new dhtmlXTreeItemObject(itemId,itemText,parentObject,this,itemActionHandler,1);
+ itemId = Nodes[Count].id;
+ parentObject.childsCount++;
+ }
+
+ if(!n.htmlNode) {
+ n.label=itemText;
+ n.htmlNode=this._createItem((this.checkBoxOff?1:0),n);
+ n.htmlNode.objBelong=n;
+ }
+
+ if(image1) n.images[0]=image1;
+ if(image2) n.images[1]=image2;
+ if(image3) n.images[2]=image3;
+
+
+ var tr=this._drawNewTr(n.htmlNode);
+ if ((this.XMLloadingWarning)||(this._hAdI))
+ n.htmlNode.parentNode.parentNode.style.display="none";
+
+
+ if ((beforeNode)&&(beforeNode.tr.nextSibling))
+ parentObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr.nextSibling);
+ else
+ if (this.parsingOn==parentObject.id){
+ this.parsedArray[this.parsedArray.length]=tr;
+ }
+ else
+ parentObject.htmlNode.childNodes[0].appendChild(tr);
+
+
+ if ((beforeNode)&&(!beforeNode.span)) beforeNode=null;
+
+ if (this.XMLsource) if ((childs)&&(childs!=0)) n.XMLload=0; else n.XMLload=1;
+ n.tr=tr;
+ tr.nodem=n;
+
+ if (parentObject.itemId==0)
+ tr.childNodes[0].className="hiddenRow";
+
+ if ((parentObject._r_logic)||(this._frbtr))
+ this._setSrc(n.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0],this.imPath+this.radioArray[0]);
+
+
+ if (optionStr) {
+ var tempStr=optionStr.split(",");
+
+ for (var i=0; i<tempStr.length; i++)
+ {
+ switch(tempStr[i])
+ {
+ case "SELECT": this.selectItem(itemId,false); break;
+ case "CALL": this.selectItem(itemId,true); break;
+ case "CHILD": n.XMLload=0; break;
+ case "CHECKED":
+ if (this.XMLloadingWarning)
+ this.setCheckList+=this.dlmtr+itemId;
+ else
+ this.setCheck(itemId,1);
+ break;
+ case "HCHECKED":
+ this._setCheck(n,"unsure");
+ break;
+ case "OPEN": n.openMe=1; break;
+ }
+ };
+ };
+
+ if (!this.XMLloadingWarning)
+ {
+ if ((this._getOpenState(parentObject)<0)&&(!this._hAdI)) this.openItem(parentObject.id);
+
+ if (beforeNode)
+ {
+ this._correctPlus(beforeNode);
+ this._correctLine(beforeNode);
+ }
+ this._correctPlus(parentObject);
+ this._correctLine(parentObject);
+ this._correctPlus(n);
+ if (parentObject.childsCount>=2)
+ {
+ this._correctPlus(Nodes[parentObject.childsCount-2]);
+ this._correctLine(Nodes[parentObject.childsCount-2]);
+ }
+ if (parentObject.childsCount!=2) this._correctPlus(Nodes[0]);
+
+ if (this.tscheck) this._correctCheckStates(parentObject);
+
+ if (this._onradh) {
+ if (this.xmlstate==1){
+ var old=this.onXLE;
+ this.onXLE=function(id){ this._onradh(itemId); if (old) old(id); }
+ }
+ else
+ this._onradh(itemId);
+ }
+
+ }
+ return n;
+};
+
+
+
+
+/**
+* @desc: create new node as a child to specified with parentId
+* @type: deprecated
+* @param: parentId - parent node id
+* @param: itemId - new node id
+* @param: itemText - new node text
+* @param: itemActionHandler - function fired on node select event (optional)
+* @param: image1 - image for node without children; (optional)
+* @param: image2 - image for closed node; (optional)
+* @param: image3 - image for opened node (optional)
+* @param: optionStr - options string (optional)
+* @param: children - node children flag (for dynamical trees) (optional)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.insertNewItem=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){
+ var parentObject=this._globalIdStorageFind(parentId);
+ if (!parentObject) return (-1);
+ var nodez=this._attachChildNode(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children);
+
+ return nodez;
+ };
+/**
+* @desc: create new node as a child to specified with parentId
+* @type: public
+* @param: parentId - parent node id
+* @param: itemId - new node id
+* @param: itemText - new node label
+* @param: itemActionHandler - function fired on node select event (optional)
+* @param: image1 - image for node without children; (optional)
+* @param: image2 - image for closed node; (optional)
+* @param: image3 - image for opened node (optional)
+* @param: optionStr - options string (optional)
+* @param: children - node children flag (for dynamical trees) (optional)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.insertNewChild=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){
+ return this.insertNewItem(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children);
+ }
+/**
+* @desc: parse xml
+* @type: private
+* @param: dhtmlObject - jsTree object
+* @param: node - top XML node
+* @param: parentId - parent node id
+* @param: level - level of tree
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._parseXMLTree=function(a,b,c,d,xml){
+ var p=new xmlPointer(xml.getXMLTopNode("tree"));
+ a._parse(p);
+ a._p=p;
+ }
+
+ dhtmlXTreeObject.prototype._parseItem=function(c,temp,preNode,befNode){
+ var id;
+ if (this._srnd && (!this._idpull[id=c.get("id")] || !this._idpull[id].span))
+ {
+ this._addItemSRND(temp.id,id,c);
+ return;
+ }
+
+ var a=c.get_all();
+
+ if ((typeof(this.waitUpdateXML)=="object")&&(!this.waitUpdateXML[a.id])){
+ this._parse(c,a.id,1);
+ return;
+ }
+
+
+
+
+
+
+ var zST=[];
+ if (a.select) zST.push("SELECT");
+ if (a.top) zST.push("TOP");
+ if (a.call) this.nodeAskingCall=a.id;
+ if (a.checked==-1) zST.push("HCHECKED");
+ else if (a.checked) zST.push("CHECKED");
+ if (a.open) zST.push("OPEN");
+
+ if (this.waitUpdateXML){
+ if (this._globalIdStorageFind(a.id))
+ var newNode=this.updateItem(a.id,a.text,a.im0,a.im1,a.im2,a.checked);
+ else{
+ if (this.npl==0) zST.push("TOP");
+ else preNode=temp.childNodes[this.npl];
+
+ var newNode=this._attachChildNode(temp,a.id,a.text,0,a.im0,a.im1,a.im2,zST.join(","),a.child,0,preNode);
+ preNode=null;
+ }
+ }
+ else
+ var newNode=this._attachChildNode(temp,a.id,a.text,0,a.im0,a.im1,a.im2,zST.join(","),a.child,(befNode||0),preNode);
+ if (a.tooltip)
+
+ newNode.span.parentNode.parentNode.title=a.tooltip;
+
+ if (a.style)
+ if (newNode.span.style.cssText)
+ newNode.span.style.cssText+=(";"+a.style);
+ else
+ newNode.span.setAttribute("style",newNode.span.getAttribute("style")+"; "+a.style);
+
+ if (a.radio) newNode._r_logic=true;
+
+ if (a.nocheckbox){
+ newNode.span.parentNode.previousSibling.previousSibling.childNodes[0].style.display='none';
+ newNode.nocheckbox=true;
+ }
+ if (a.disabled){
+ if (a.checked!=null) this._setCheck(newNode,convertStringToBoolean(a.checked));
+ this.disableCheckbox(newNode,1);
+ }
+
+
+ newNode._acc=a.child||0;
+
+ if (this.parserExtension) this.parserExtension._parseExtension.call(this,c,a,(temp?temp.id:0));
+
+ this.setItemColor(newNode,a.aCol,a.sCol);
+ if (a.locked=="1") this.lockItem(newNode.id,true,true);
+
+ if ((a.imwidth)||(a.imheight)) this.setIconSize(a.imwidth,a.imheight,newNode);
+ if ((a.closeable=="0")||(a.closeable=="1")) this.setItemCloseable(newNode,a.closeable);
+ var zcall="";
+ if (a.topoffset) this.setItemTopOffset(newNode,a.topoffset);
+ if ((!this.slowParse)||(typeof(this.waitUpdateXML)=="object")){
+ if (c.sub_exists("item"))
+ zcall=this._parse(c,a.id,1);
+ }
+
+ if (zcall!="") this.nodeAskingCall=zcall;
+
+
+ c.each("userdata",function(u){
+ this.setUserData(c.get("id"),u.get("name"),u.content());
+ },this)
+
+
+ }
+ dhtmlXTreeObject.prototype._parse=function(p,parentId,level,start){
+ if (this._srnd && !this.parentObject.offsetHeight) {
+ var self=this;
+ return window.setTimeout(function(){
+ self._parse(p,parentId,level,start);
+ },100);
+ }
+ if (!p.exists()) return;
+
+ this.skipLock=true; //disable item locking
+ //loading flags
+
+ this.parsCount=this.parsCount?(this.parsCount+1):1;
+ this.XMLloadingWarning=1;
+
+
+ if (!parentId) { //top level
+ parentId=p.get("id");
+ if (p.get("radio"))
+ this.htmlNode._r_logic=true;
+ this.parsingOn=parentId;
+ this.parsedArray=new Array();
+ this.setCheckList="";
+ this.nodeAskingCall="";
+ }
+
+ var temp=this._globalIdStorageFind(parentId);
+ if (!temp) return dhtmlxError.throwError("DataStructure","XML reffers to not existing parent");
+
+ if ((temp.childsCount)&&(!start)&&(!this._edsbps)&&(!temp._has_top))
+ var preNode=temp.childNodes[temp.childsCount-1];
+ else
+ var preNode=0;
+
+ this.npl=0;
+
+ p.each("item",function(c,i){
+
+ temp.XMLload=1;
+ if ((this._epgps)&&(this._epgpsC==this.npl)){
+ this._setNextPageSign(temp,this.npl+1*(start||0),level,node);
+ return -1;
+ }
+
+ this._parseItem(c,temp,preNode);
+
+
+ this.npl++;
+
+
+
+ },this,start);
+
+
+ if (!level) {
+ p.each("userdata",function(u){
+ this.setUserData(p.get("id"),u.get("name"),u.content());
+ },this);
+
+ temp.XMLload=1;
+ if (this.waitUpdateXML){
+ this.waitUpdateXML=false;
+ for (var i=temp.childsCount-1; i>=0; i--)
+ if (temp.childNodes[i]._dmark)
+ this.deleteItem(temp.childNodes[i].id);
+ }
+
+ var parsedNodeTop=this._globalIdStorageFind(this.parsingOn);
+
+ for (var i=0; i<this.parsedArray.length; i++)
+ temp.htmlNode.childNodes[0].appendChild(this.parsedArray[i]);
+
+ this.lastLoadedXMLId=parentId;
+ this.XMLloadingWarning=0;
+
+ var chArr=this.setCheckList.split(this.dlmtr);
+ for (var n=0; n<chArr.length; n++)
+ if (chArr[n]) this.setCheck(chArr[n],1);
+
+ if ((this.XMLsource)&&(this.tscheck)&&(this.smcheck)&&(temp.id!=this.rootId)){
+ if (temp.checkstate===0)
+ this._setSubChecked(0,temp);
+ else if (temp.checkstate===1)
+ this._setSubChecked(1,temp);
+ }
+
+ if (this.onXLE) this.onXLE(this,parentId);
+ this._redrawFrom(this,null,start)
+
+
+ if (p.get("order") && p.get("order")!="none")
+ this._reorderBranch(temp,p.get("order"),true);
+
+ if (this.nodeAskingCall!="") this.selectItem(this.nodeAskingCall,true);
+ if (this._branchUpdate) this._branchUpdateNext(p);
+ }
+
+
+ if (this.parsCount==1) {
+
+
+ this.parsingOn=null;
+ if ((!this._edsbps)||(!this._edsbpsA.length)){
+ var that=this;
+ window.setTimeout( function(){ that.callEvent("onXLE",[that,parentId]); },1);
+ this.xmlstate=0;
+ }
+ this.skipLock=false;
+ }
+ this.parsCount--;
+
+
+
+ if ((this._epgps)&&(start))
+ this._setPrevPageSign(temp,(start||0),level,node);
+
+ return this.nodeAskingCall;
+ };
+
+
+dhtmlXTreeObject.prototype._branchUpdateNext=function(p){
+ p.each("item",function(c){
+ var nid=c.get("id");
+ if (this._idpull[nid] && (!this._idpull[nid].XMLload)) return;
+ this._branchUpdate++;
+ this.smartRefreshItem(c.get("id"),c);
+ },this)
+ this._branchUpdate--;
+}
+
+ dhtmlXTreeObject.prototype.checkUserData=function(node,parentId){
+ if ((node.nodeType==1)&&(node.tagName == "userdata"))
+ {
+ var name=node.getAttribute("name");
+ if ((name)&&(node.childNodes[0]))
+ this.setUserData(parentId,name,node.childNodes[0].data);
+ }
+ }
+
+
+
+
+/**
+* @desc: reset tree images from selected level
+* @type: private
+* @param: dhtmlObject - tree
+* @param: itemObject - current item
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._redrawFrom=function(dhtmlObject,itemObject,start,visMode){
+ if (!itemObject) {
+ var tempx=dhtmlObject._globalIdStorageFind(dhtmlObject.lastLoadedXMLId);
+ dhtmlObject.lastLoadedXMLId=-1;
+ if (!tempx) return 0;
+ }
+ else tempx=itemObject;
+ var acc=0;
+
+ for (var i=(start?start-1:0); i<tempx.childsCount; i++)
+ {
+ if ((!this._branchUpdate)||(this._getOpenState(tempx)==1))
+ if ((!itemObject)||(visMode==1)) tempx.childNodes[i].htmlNode.parentNode.parentNode.style.display="";
+ if (tempx.childNodes[i].openMe==1)
+ {
+ this._openItem(tempx.childNodes[i]);
+ tempx.childNodes[i].openMe=0;
+ }
+
+ dhtmlObject._redrawFrom(dhtmlObject,tempx.childNodes[i]);
+
+
+ };
+
+ if ((!tempx.unParsed)&&((tempx.XMLload)||(!this.XMLsource)))
+ tempx._acc=acc;
+ dhtmlObject._correctLine(tempx);
+ dhtmlObject._correctPlus(tempx);
+
+ };
+
+/**
+* @desc: create and return main html element of tree
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._createSelf=function(){
+ var div=document.createElement('div');
+ div.className="containerTableStyle";
+ div.style.width=this.width;
+ div.style.height=this.height;
+ this.parentObject.appendChild(div);
+ return div;
+ };
+
+/**
+* @desc: collapse target node
+* @type: private
+* @param: itemObject - item object
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._xcloseAll=function(itemObject)
+ {
+ if (itemObject.unParsed) return;
+ if (this.rootId!=itemObject.id) {
+ var Nodes=itemObject.htmlNode.childNodes[0].childNodes;
+ var Count=Nodes.length;
+
+ for (var i=1; i<Count; i++)
+ Nodes[i].style.display="none";
+
+ this._correctPlus(itemObject);
+ }
+
+ for (var i=0; i<itemObject.childsCount; i++)
+ if (itemObject.childNodes[i].childsCount)
+ this._xcloseAll(itemObject.childNodes[i]);
+ };
+/**
+* @desc: expand target node
+* @type: private
+* @param: itemObject - item object
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._xopenAll=function(itemObject)
+ {
+ this._HideShow(itemObject,2);
+ for (var i=0; i<itemObject.childsCount; i++)
+ this._xopenAll(itemObject.childNodes[i]);
+ };
+/**
+* @desc: set correct tree-line and node images
+* @type: private
+* @param: itemObject - item object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._correctPlus=function(itemObject){
+ if (!itemObject.htmlNode) return;
+ var imsrc=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[0].lastChild;
+ var imsrc2=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[2].childNodes[0];
+
+ var workArray=this.lineArray;
+ if ((this.XMLsource)&&(!itemObject.XMLload))
+ {
+ var workArray=this.plusArray;
+ this._setSrc(imsrc2,this.imPath+itemObject.images[2]);
+ if (this._txtimg) return (imsrc.innerHTML="[+]");
+ }
+ else
+ if ((itemObject.childsCount)||(itemObject.unParsed))
+ {
+ if ((itemObject.htmlNode.childNodes[0].childNodes[1])&&( itemObject.htmlNode.childNodes[0].childNodes[1].style.display!="none" ))
+ {
+ if (!itemObject.wsign) var workArray=this.minusArray;
+ this._setSrc(imsrc2,this.imPath+itemObject.images[1]);
+ if (this._txtimg) return (imsrc.innerHTML="[-]");
+ }
+ else
+ {
+ if (!itemObject.wsign) var workArray=this.plusArray;
+ this._setSrc(imsrc2,this.imPath+itemObject.images[2]);
+ if (this._txtimg) return (imsrc.innerHTML="[+]");
+ }
+ }
+ else
+ {
+ this._setSrc(imsrc2,this.imPath+itemObject.images[0]);
+ }
+
+
+ var tempNum=2;
+ if (!itemObject.treeNod.treeLinesOn) this._setSrc(imsrc,this.imPath+workArray[3]);
+ else {
+ if (itemObject.parentObject) tempNum=this._getCountStatus(itemObject.id,itemObject.parentObject);
+ this._setSrc(imsrc,this.imPath+workArray[tempNum]);
+ }
+ };
+
+/**
+* @desc: set correct tree-line images
+* @type: private
+* @param: itemObject - item object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._correctLine=function(itemObject){
+ if (!itemObject.htmlNode) return;
+ var sNode=itemObject.parentObject;
+ if (sNode)
+ if ((this._getLineStatus(itemObject.id,sNode)==0)||(!this.treeLinesOn))
+ for(var i=1; i<=itemObject.childsCount; i++){
+ if (!itemObject.htmlNode.childNodes[0].childNodes[i]) break;
+ itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundImage="";
+ itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundRepeat="";
+ }
+ else
+ for(var i=1; i<=itemObject.childsCount; i++){
+ if (!itemObject.htmlNode.childNodes[0].childNodes[i]) break;
+ itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundImage="url("+this.imPath+this.lineArray[5]+")";
+ itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundRepeat="repeat-y";
+ }
+ };
+/**
+* @desc: return type of node
+* @type: private
+* @param: itemId - item id
+* @param: itemObject - parent node object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getCountStatus=function(itemId,itemObject){
+
+ if (itemObject.childsCount<=1) { if (itemObject.id==this.rootId) return 4; else return 0; }
+
+ if (itemObject.childNodes[0].id==itemId) if (!itemObject.id) return 2; else return 1;
+ if (itemObject.childNodes[itemObject.childsCount-1].id==itemId) return 0;
+
+ return 1;
+ };
+/**
+* @desc: return type of node
+* @type: private
+* @param: itemId - node id
+* @param: itemObject - parent node object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getLineStatus =function(itemId,itemObject){
+ if (itemObject.childNodes[itemObject.childsCount-1].id==itemId) return 0;
+ return 1;
+ }
+
+/**
+* @desc: open/close node
+* @type: private
+* @param: itemObject - node object
+* @param: mode - open/close mode [1-close 2-open](optional)
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._HideShow=function(itemObject,mode){
+ if ((this.XMLsource)&&(!itemObject.XMLload)) {
+ if (mode==1) return; //close for not loaded node - ignore it
+ itemObject.XMLload=1;
+ this._loadDynXML(itemObject.id);
+ return; };
+
+ var Nodes=itemObject.htmlNode.childNodes[0].childNodes; var Count=Nodes.length;
+ if (Count>1){
+ if ( ( (Nodes[1].style.display!="none") || (mode==1) ) && (mode!=2) ) {
+//nb:solves standard doctype prb in IE
+ this.allTree.childNodes[0].border = "1";
+ this.allTree.childNodes[0].border = "0";
+ nodestyle="none";
+ }
+ else nodestyle="";
+
+ for (var i=1; i<Count; i++)
+ Nodes[i].style.display=nodestyle;
+ }
+ this._correctPlus(itemObject);
+ }
+
+/**
+* @desc: return node state
+* @type: private
+* @param: itemObject - node object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getOpenState=function(itemObject){
+ var z=itemObject.htmlNode.childNodes[0].childNodes;
+ if (z.length<=1) return 0;
+ if (z[1].style.display!="none") return 1;
+ else return -1;
+ }
+
+
+
+/**
+* @desc: ondblclick item event handler
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.onRowClick2=function(){
+ var that=this.parentObject.treeNod;
+ if (!that.callEvent("onDblClick",[this.parentObject.id,that])) return 0;
+ if ((this.parentObject.closeble)&&(this.parentObject.closeble!="0"))
+ that._HideShow(this.parentObject);
+ else
+ that._HideShow(this.parentObject,2);
+
+ if (that.checkEvent("onOpenEnd"))
+ if (!that.xmlstate)
+ that.callEvent("onOpenEnd",[this.parentObject.id,that._getOpenState(this.parentObject)]);
+ else{
+ that._oie_onXLE.push(that.onXLE);
+ that.onXLE=that._epnFHe;
+ }
+ };
+/**
+* @desc: onclick item event handler
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.onRowClick=function(){
+ var that=this.parentObject.treeNod;
+ if (!that.callEvent("onOpenStart",[this.parentObject.id,that._getOpenState(this.parentObject)])) return 0;
+ if ((this.parentObject.closeble)&&(this.parentObject.closeble!="0"))
+ that._HideShow(this.parentObject);
+ else
+ that._HideShow(this.parentObject,2);
+//#on_open_end_event:11052006{
+
+ if (that.checkEvent("onOpenEnd"))
+ if (!that.xmlstate)
+ that.callEvent("onOpenEnd",[this.parentObject.id,that._getOpenState(this.parentObject)]);
+ else{
+ that._oie_onXLE.push(that.onXLE);
+ that.onXLE=that._epnFHe;
+ }
+//#}
+ };
+//#on_open_end_event:11052006{
+ dhtmlXTreeObject.prototype._epnFHe=function(that,id,flag){
+ if (id!=this.rootId)
+ this.callEvent("onOpenEnd",[id,that.getOpenState(id)]);
+ that.onXLE=that._oie_onXLE.pop();
+
+ if (!flag && !that._oie_onXLE.length)
+ if (that.onXLE) that.onXLE(that,id);
+ }
+
+//#}
+
+/**
+* @desc: onclick item image event handler
+* @type: private
+* @edition: Professional
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.onRowClickDown=function(e){
+ e=e||window.event;
+ var that=this.parentObject.treeNod;
+ that._selectItem(this.parentObject,e);
+ };
+
+
+/*****
+SELECTION
+*****/
+
+/**
+* @desc: retun selected item id
+* @type: public
+* @return: id of selected item
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype.getSelectedItemId=function()
+ {
+ var str=new Array();
+ for (var i=0; i<this._selected.length; i++) str[i]=this._selected[i].id;
+ return (str.join(this.dlmtr));
+ };
+
+/**
+* @desc: visual select item in tree
+* @type: private
+* @param: node - tree item object
+* @edition: Professional
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._selectItem=function(node,e){
+ if (this._onSSCF) this._onSSCFold=this.getSelectedItemId();
+
+ this._unselectItems();
+
+ this._markItem(node);
+ if (this._onSSCF) {
+ var z=this.getSelectedItemId();
+ if (z!=this._onSSCFold)
+ this.callEvent("onSelect",[z]);
+ }
+ }
+ dhtmlXTreeObject.prototype._markItem=function(node){
+ if (node.scolor) node.span.style.color=node.scolor;
+ node.span.className="selectedTreeRow";
+ node.i_sel=true;
+ this._selected[this._selected.length]=node;
+ }
+
+/**
+* @desc: retun node index in children collection by Id
+* @type: public
+* @param: itemId - node id
+* @return: node index
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.getIndexById=function(itemId){
+ var z=this._globalIdStorageFind(itemId);
+ if (!z) return null;
+ return this._getIndex(z);
+ };
+ dhtmlXTreeObject.prototype._getIndex=function(w){
+ var z=w.parentObject;
+ for (var i=0; i<z.childsCount; i++)
+ if (z.childNodes[i]==w) return i;
+ };
+
+
+
+
+
+/**
+* @desc: visual unselect item in tree
+* @type: private
+* @param: node - tree item object
+* @edition: Professional
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._unselectItem=function(node){
+ if ((node)&&(node.i_sel))
+ {
+
+ node.span.className="standartTreeRow";
+ if (node.acolor) node.span.style.color=node.acolor;
+ node.i_sel=false;
+ for (var i=0; i<this._selected.length; i++)
+ if (!this._selected[i].i_sel) {
+ this._selected.splice(i,1);
+ break;
+ }
+
+ }
+ }
+
+/**
+* @desc: visual unselect items in tree
+* @type: private
+* @param: node - tree item object
+* @edition: Professional
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._unselectItems=function(){
+ for (var i=0; i<this._selected.length; i++){
+ var node=this._selected[i];
+ node.span.className="standartTreeRow";
+ if (node.acolor) node.span.style.color=node.acolor;
+ node.i_sel=false;
+ }
+ this._selected=new Array();
+ }
+
+
+/**
+* @desc: select node text event handler
+* @type: private
+* @param: e - event object
+* @param: htmlObject - node object
+* @param: mode - if false - call onSelect event
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.onRowSelect=function(e,htmlObject,mode){
+ e=e||window.event;
+
+ var obj=this.parentObject;
+ if (htmlObject) obj=htmlObject.parentObject;
+ var that=obj.treeNod;
+
+ var lastId=that.getSelectedItemId();
+ if ((!e)||(!e.skipUnSel))
+ that._selectItem(obj,e);
+
+ if (!mode) {
+ if ((e)&&(e.button==2))
+ that.callEvent("onRightClick",[obj.id,e]);
+
+ if (obj.actionHandler) obj.actionHandler(obj.id,lastId);
+ else that.callEvent("onClick",[obj.id,lastId]);
+ }
+ };
+
+
+
+
+
+/**
+* @desc: fix checkbox state
+* @type: private
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype._correctCheckStates=function(dhtmlObject){
+
+ if (!this.tscheck) return;
+ if (!dhtmlObject) return;
+ if (dhtmlObject.id==this.rootId) return;
+ //calculate state
+ var act=dhtmlObject.childNodes;
+ var flag1=0; var flag2=0;
+ if (dhtmlObject.childsCount==0) return;
+ for (var i=0; i<dhtmlObject.childsCount; i++){
+ if (act[i].dscheck) continue;
+ if (act[i].checkstate==0) flag1=1;
+ else if (act[i].checkstate==1) flag2=1;
+ else { flag1=1; flag2=1; break; }
+ }
+
+ if ((flag1)&&(flag2)) this._setCheck(dhtmlObject,"unsure");
+ else if (flag1) this._setCheck(dhtmlObject,false);
+ else this._setCheck(dhtmlObject,true);
+
+ this._correctCheckStates(dhtmlObject.parentObject);
+}
+
+/**
+* @desc: checbox select action
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.onCheckBoxClick=function(e){
+ if (!this.treeNod.callEvent("onBeforeCheck",[this.parentObject.id,this.parentObject.checkstate]))
+ return;
+
+ if (this.parentObject.dscheck) return true;
+ if (this.treeNod.tscheck)
+ if (this.parentObject.checkstate==1) this.treeNod._setSubChecked(false,this.parentObject);
+ else this.treeNod._setSubChecked(true,this.parentObject);
+ else
+ if (this.parentObject.checkstate==1) this.treeNod._setCheck(this.parentObject,false);
+ else this.treeNod._setCheck(this.parentObject,true);
+ this.treeNod._correctCheckStates(this.parentObject.parentObject);
+
+ return this.treeNod.callEvent("onCheck",[this.parentObject.id,this.parentObject.checkstate]);
+ };
+/**
+* @desc: create HTML elements for tree node
+* @type: private
+* @param: acheck - enable/disable checkbox
+* @param: itemObject - item object
+* @param: mode - mode
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._createItem=function(acheck,itemObject,mode){
+
+ var table=document.createElement('table');
+ table.cellSpacing=0;table.cellPadding=0;
+ table.border=0;
+
+ if(this.hfMode)table.style.tableLayout="fixed";
+ table.style.margin=0;table.style.padding=0;
+
+ var tbody=document.createElement('tbody');
+ var tr=document.createElement('tr');
+
+ var td1=document.createElement('td');
+ td1.className="standartTreeImage";
+
+ if(this._txtimg){
+ var img0=document.createElement("div");
+ td1.appendChild(img0);
+ img0.className="dhx_tree_textSign";
+ }
+ else
+ {
+ var img0=this._getImg(itemObject.id);
+ img0.border="0";
+ if (img0.tagName=="IMG") img0.align="absmiddle";
+ td1.appendChild(img0); img0.style.padding=0; img0.style.margin=0;
+ img0.style.width=this.def_line_img_x; img0.style.height=this.def_line_img_y;
+ }
+
+ var td11=document.createElement('td');
+// var inp=document.createElement("input"); inp.type="checkbox"; inp.style.width="12px"; inp.style.height="12px";
+ var inp=this._getImg(this.cBROf?this.rootId:itemObject.id);
+ inp.checked=0; this._setSrc(inp,this.imPath+this.checkArray[0]); inp.style.width="16px"; inp.style.height="16px";
+ //can cause problems with hide/show check
+ if (!acheck) ((!_isIE)?td11:inp).style.display="none";
+
+ // td11.className="standartTreeImage";
+ //if (acheck)
+ td11.appendChild(inp);
+ if ((!this.cBROf)&&(inp.tagName=="IMG")) inp.align="absmiddle";
+ inp.onclick=this.onCheckBoxClick;
+ inp.treeNod=this;
+ inp.parentObject=itemObject;
+ td11.width="20px";
+
+ var td12=document.createElement('td');
+ td12.className="standartTreeImage";
+ var img=this._getImg(this.timgen?itemObject.id:this.rootId);
+ img.onmousedown=this._preventNsDrag; img.ondragstart=this._preventNsDrag;
+ img.border="0";
+ if (this._aimgs){
+ img.parentObject=itemObject;
+ if (img.tagName=="IMG") img.align="absmiddle";
+ img.onclick=this.onRowSelect; }
+ if (!mode) this._setSrc(img,this.imPath+this.imageArray[0]);
+ td12.appendChild(img); img.style.padding=0; img.style.margin=0;
+ if (this.timgen)
+ {
+ td12.style.width=img.style.width=this.def_img_x; img.style.height=this.def_img_y; }
+ else
+ {
+ img.style.width="0px"; img.style.height="0px";
+ if (_isOpera) td12.style.display="none";
+ }
+
+
+ var td2=document.createElement('td');
+ td2.className="standartTreeRow";
+
+ itemObject.span=document.createElement('span');
+ itemObject.span.className="standartTreeRow";
+ if (this.mlitems) {
+ itemObject.span.style.width=this.mlitems;
+ // if (!_isIE)
+ itemObject.span.style.display="block";
+ }
+ else td2.noWrap=true;
+ if (!_isKHTML) td2.style.width="100%";
+
+// itemObject.span.appendChild(document.createTextNode(itemObject.label));
+ itemObject.span.innerHTML=itemObject.label;
+ td2.appendChild(itemObject.span);
+ td2.parentObject=itemObject; td1.parentObject=itemObject;
+ td2.onclick=this.onRowSelect; td1.onclick=this.onRowClick; td2.ondblclick=this.onRowClick2;
+ if (this.ettip)
+
+ tr.title=itemObject.label;
+
+ if (this.dragAndDropOff) {
+ if (this._aimgs) { this.dragger.addDraggableItem(td12,this); td12.parentObject=itemObject; }
+ this.dragger.addDraggableItem(td2,this);
+ }
+
+ itemObject.span.style.paddingLeft="5px"; itemObject.span.style.paddingRight="5px"; td2.style.verticalAlign="";
+ td2.style.fontSize="10pt"; td2.style.cursor=this.style_pointer;
+ tr.appendChild(td1); tr.appendChild(td11); tr.appendChild(td12);
+ tr.appendChild(td2);
+ tbody.appendChild(tr);
+ table.appendChild(tbody);
+
+ if (this.ehlt){//highlighting
+ tr.onmousemove=this._itemMouseIn;
+ tr[(_isIE)?"onmouseleave":"onmouseout"]=this._itemMouseOut;
+ }
+ if(this.checkEvent && this.checkEvent("onRightClick"))
+ tr.oncontextmenu=Function("e","this.childNodes[0].parentObject.treeNod.callEvent('onRightClick',[this.childNodes[0].parentObject.id,(e||window.event)]); return false;");
+
+
+ return table;
+ };
+
+
+/**
+* @desc: set path to images directory
+* @param: newPath - path to images directory (related to the page with tree or absolute http url)
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.setImagePath=function( newPath ){ this.imPath=newPath; };
+
+
+
+/**
+* @desc: set function called when tree node selected
+* @param: (function) func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onRightClick
+* @depricated: use grid.attachEvent("onRightClick",func); instead
+* @eventdesc: Event occurs after right mouse button was clicked.
+ Assigning this handler can disable default context menu, and incompattible with dhtmlXMenu integration.
+* @eventparam: (string) ID of clicked item
+* @eventparam: (object) event object
+*/
+ dhtmlXTreeObject.prototype.setOnRightClickHandler=function(func){ this.attachEvent("onRightClick",func); };
+
+/**
+* @desc: set function called when tree node clicked, also can be forced to call from API
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onClick
+* @depricated: use grid.attachEvent("onClick",func); instead
+* @eventdesc: Event raises immideatly after text part of item in tree was clicked, but after default onClick functionality was processed.
+ Richt mouse button click can be catched by onRightClick event handler.
+* @eventparam: ID of clicked item
+* @eventparam: ID of previously selected item
+*/
+ dhtmlXTreeObject.prototype.setOnClickHandler=function(func){ this.attachEvent("onClick",func); };
+
+/**
+* @desc: set function called when tree node selected or unselected, include any select change caused by any functionality
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onSelect
+* @depricated: use grid.attachEvent("onSelect",func); instead
+* @eventdesc: Event raises immideatly after selection in tree was changed
+* @eventparam: selected item ID ( list of IDs in case of multiselection)
+*/
+ dhtmlXTreeObject.prototype.setOnSelectStateChange=function(func){ this.attachEvent("onSelect",func); this._onSSCF=true; };
+
+
+/**
+* @desc: enables dynamic loading from XML
+* @type: public
+* @param: filePath - name of script returning XML; in case of virtual loading - user defined function
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.setXMLAutoLoading=function(filePath){ this.XMLsource=filePath; };
+
+ /**
+* @desc: set function called before checkbox checked/unchecked
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onCheck
+* @depricated: use tree.attachEvent("onCheck",func); instead
+* @eventdesc: Event raises right before item in tree was checked/unchecked. can be canceled (return false from event handler)
+* @eventparam: ID of item which will be checked/unchecked
+* @eventparam: Current checkbox state. 1 - item checked, 0 - item unchecked.
+* @eventreturn: true - confirm changing checked state; false - deny chaning checked state;
+*/
+ dhtmlXTreeObject.prototype.setOnCheckHandler=function(func){ this.attachEvent("onCheck",func); };
+
+
+/**
+* @desc: set function called before tree node opened/closed
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onOpen
+* @depricated: use grid.attachEvent("onOpenStart",func); instead
+* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
+ Event does not occur if node was opened by dhtmlXtree API.
+* @eventparam: ID of node which will be opened/closed
+* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
+* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
+*/
+ dhtmlXTreeObject.prototype.setOnOpenHandler=function(func){ this.attachEvent("onOpenStart",func); };
+/**
+* @desc: set function called before tree node opened/closed
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onOpenStart
+* @depricated: use grid.attachEvent("onOpenStart",func); instead
+* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
+ Event not raised if node opened by dhtmlXtree API.
+* @eventparam: ID of node which will be opened/closed
+* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
+* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
+*/
+ dhtmlXTreeObject.prototype.setOnOpenStartHandler=function(func){ this.attachEvent("onOpenStart",func); };
+
+/**
+* @desc: set function called after tree node opened/closed
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onOpenEnd
+* @depricated: use grid.attachEvent("onOpenEnd",func); instead
+* @eventdesc: Event raises immideatly after item in tree was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
+ Event not raised if node opened by dhtmlXtree API.
+* @eventparam: ID of node which will be opened/closed
+* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
+*/
+ dhtmlXTreeObject.prototype.setOnOpenEndHandler=function(func){ this.attachEvent("onOpenEnd",func); };
+
+ /**
+* @desc: set function called when tree node double clicked
+* @param: func - event handling function
+* @type: public
+* @topic: 0,7
+* @event: onDblClick
+* @depricated: use grid.attachEvent("onDblClick",func); instead
+* @eventdesc: Event raised immideatly after item in tree was doubleclicked, before default onDblClick functionality was processed.
+ Beware using both onClick and onDblClick events, because component can generate onClick event before onDblClick event while doubleclicking item in tree.
+ ( that behavior depend on used browser )
+* @eventparam: ID of item which was doubleclicked
+* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
+*/
+ dhtmlXTreeObject.prototype.setOnDblClickHandler=function(func){ this.attachEvent("onDblClick",func); };
+
+
+
+
+
+
+
+
+
+ /**
+* @desc: expand target node and all sub nodes
+* @type: public
+* @param: itemId - node id
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.openAllItems=function(itemId)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ this._xopenAll(temp);
+ };
+
+/**
+* @desc: return open/close state
+* @type: public
+* @param: itemId - node id
+* @return: -1 - close, 1 - opened, 0 - node doesn't have children
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.getOpenState=function(itemId){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return "";
+ return this._getOpenState(temp);
+ };
+
+/**
+* @desc: collapse target node and all sub nodes
+* @type: public
+* @param: itemId - node id
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.closeAllItems=function(itemId)
+ {
+ if (itemId===window.undefined) itemId=this.rootId;
+
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ this._xcloseAll(temp);
+
+//nb:solves standard doctype prb in IE
+ this.allTree.childNodes[0].border = "1";
+ this.allTree.childNodes[0].border = "0";
+
+ };
+
+
+/**
+* @desc: set user data for target node
+* @type: public
+* @param: itemId - target node id
+* @param: name - key for user data
+* @param: value - user data value
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.setUserData=function(itemId,name,value){
+ var sNode=this._globalIdStorageFind(itemId,0,true);
+ if (!sNode) return;
+ if(name=="hint")
+
+ sNode.htmlNode.childNodes[0].childNodes[0].title=value;
+ if (typeof(sNode.userData["t_"+name])=="undefined"){
+ if (!sNode._userdatalist) sNode._userdatalist=name;
+ else sNode._userdatalist+=","+name;
+ }
+ sNode.userData["t_"+name]=value;
+ };
+
+/**
+* @desc: get user data from target node
+* @type: public
+* @param: itemId - target node id
+* @param: name - key for user data
+* @return: value of user data
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.getUserData=function(itemId,name){
+ var sNode=this._globalIdStorageFind(itemId,0,true);
+ if (!sNode) return;
+ return sNode.userData["t_"+name];
+ };
+
+
+
+
+/**
+* @desc: get node color (text color)
+* @param: itemId - id of node
+* @type: public
+* @return: color of node (empty string for default color);
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getItemColor=function(itemId)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+
+ var res= new Object();
+ if (temp.acolor) res.acolor=temp.acolor;
+ if (temp.acolor) res.scolor=temp.scolor;
+ return res;
+ };
+/**
+* @desc: set node text color
+* @param: itemId - id of node
+* @param: defaultColor - node color
+* @param: selectedColor - selected node color
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setItemColor=function(itemId,defaultColor,selectedColor)
+ {
+ if ((itemId)&&(itemId.span))
+ var temp=itemId;
+ else
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ else {
+ if (temp.i_sel)
+ { if (selectedColor) temp.span.style.color=selectedColor; }
+ else
+ { if (defaultColor) temp.span.style.color=defaultColor; }
+
+ if (selectedColor) temp.scolor=selectedColor;
+ if (defaultColor) temp.acolor=defaultColor;
+ }
+ };
+
+/**
+* @desc: return node text
+* @param: itemId - id of node
+* @type: public
+* @return: text of item (with HTML formatting, if any)
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getItemText=function(itemId)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ return(temp.htmlNode.childNodes[0].childNodes[0].childNodes[3].childNodes[0].innerHTML);
+ };
+/**
+* @desc: return parent item id
+* @param: itemId - id of node
+* @type: public
+* @return: id of parent item
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.getParentId=function(itemId)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if ((!temp)||(!temp.parentObject)) return "";
+ return temp.parentObject.id;
+ };
+
+
+
+/**
+* @desc: change item id
+* @type: public
+* @param: itemId - old node id
+* @param: newItemId - new node id
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.changeItemId=function(itemId,newItemId)
+ {
+ if (itemId==newItemId) return;
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ temp.id=newItemId;
+ temp.span.contextMenuId=newItemId;
+ this._idpull[newItemId]=this._idpull[itemId];
+ delete this._idpull[itemId];
+ };
+
+
+/**
+* @desc: mark selected item as cut
+* @type: public
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.doCut=function(){
+ if (this.nodeCut) this.clearCut();
+ this.nodeCut=(new Array()).concat(this._selected);
+ for (var i=0; i<this.nodeCut.length; i++){
+ var tempa=this.nodeCut[i];
+ tempa._cimgs=new Array();
+ tempa._cimgs[0]=tempa.images[0];
+ tempa._cimgs[1]=tempa.images[1];
+ tempa._cimgs[2]=tempa.images[2];
+ tempa.images[0]=tempa.images[1]=tempa.images[2]=this.cutImage;
+ this._correctPlus(tempa);
+ }
+ };
+
+/**
+* @desc: insert previously cut branch
+* @param: itemId - id of new parent node
+* @type: public
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.doPaste=function(itemId){
+ var tobj=this._globalIdStorageFind(itemId);
+ if (!tobj) return 0;
+ for (var i=0; i<this.nodeCut.length; i++){
+ if (this._checkPNodes(tobj,this.nodeCut[i])) continue;
+ this._moveNode(this.nodeCut[i],tobj);
+ }
+ this.clearCut();
+ };
+
+/**
+* @desc: clear cut
+* @type: public
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.clearCut=function(){
+ for (var i=0; i<this.nodeCut.length; i++)
+ {
+ var tempa=this.nodeCut[i];
+ tempa.images[0]=tempa._cimgs[0];
+ tempa.images[1]=tempa._cimgs[1];
+ tempa.images[2]=tempa._cimgs[2];
+ this._correctPlus(tempa);
+ }
+ this.nodeCut=new Array();
+ };
+
+
+
+ /**
+* @desc: move node with subnodes
+* @type: private
+* @param: itemObject - moved node object
+* @param: targetObject - new parent node
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._moveNode=function(itemObject,targetObject){
+
+ return this._moveNodeTo(itemObject,targetObject);
+
+ }
+
+ /**
+* @desc: fix order of nodes in collection
+* @type: private
+* @param: target - parent item node
+* @param: zParent - before node
+* @edition: Professional
+* @topic: 2
+*/
+
+dhtmlXTreeObject.prototype._fixNodesCollection=function(target,zParent){
+ var flag=0; var icount=0;
+ var Nodes=target.childNodes;
+ var Count=target.childsCount-1;
+
+ if (zParent==Nodes[Count]) return;
+ for (var i=0; i<Count; i++)
+ if (Nodes[i]==Nodes[Count]) { Nodes[i]=Nodes[i+1]; Nodes[i+1]=Nodes[Count]; }
+
+// Count=target.childsCount;
+ for (var i=0; i<Count+1; i++)
+ {
+ if (flag) {
+ var temp=Nodes[i];
+ Nodes[i]=flag;
+ flag=temp;
+ }
+ else
+ if (Nodes[i]==zParent) { flag=Nodes[i]; Nodes[i]=Nodes[Count]; }
+ }
+ };
+
+/**
+* @desc: recreate branch
+* @type: private
+* @param: itemObject - moved node object
+* @param: targetObject - new parent node
+* @param: level - top level flag
+* @param: beforeNode - node for sibling mode
+* @mode: mode - DragAndDrop mode (0 - as child, 1 as sibling)
+* @edition: Professional
+* @topic: 2
+*/
+dhtmlXTreeObject.prototype._recreateBranch=function(itemObject,targetObject,beforeNode,level){
+ var i; var st="";
+ if (beforeNode){
+ for (i=0; i<targetObject.childsCount; i++)
+ if (targetObject.childNodes[i]==beforeNode) break;
+
+ if (i!=0)
+ beforeNode=targetObject.childNodes[i-1];
+ else{
+ st="TOP";
+ beforeNode="";
+ }
+ }
+
+ var t2=this._onradh; this._onradh=null;
+ var newNode=this._attachChildNode(targetObject,itemObject.id,itemObject.label,0,itemObject.images[0],itemObject.images[1],itemObject.images[2],st,0,beforeNode);
+
+ //copy user data
+ newNode._userdatalist=itemObject._userdatalist;
+ newNode.userData=itemObject.userData.clone();
+ newNode.XMLload=itemObject.XMLload;
+ if (t2){
+ this._onradh=t2; this._onradh(newNode.id); }
+
+
+ for (var i=0; i<itemObject.childsCount; i++)
+ this._recreateBranch(itemObject.childNodes[i],newNode,0,1);
+
+
+ return newNode;
+}
+
+/**
+* @desc: move single node
+* @type: private
+* @param: itemObject - moved node object
+* @param: targetObject - new parent node
+* @mode: mode - DragAndDrop mode (0 - as child, 1 as sibling)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._moveNodeTo=function(itemObject,targetObject,beforeNode){
+ //return;
+ if (itemObject.treeNod._nonTrivialNode)
+ return itemObject.treeNod._nonTrivialNode(this,targetObject,beforeNode,itemObject);
+
+ if (targetObject.mytype)
+ var framesMove=(itemObject.treeNod.lWin!=targetObject.lWin);
+ else
+ var framesMove=(itemObject.treeNod.lWin!=targetObject.treeNod.lWin);
+
+ if (!this.callEvent("onDrag",[itemObject.id,targetObject.id,(beforeNode?beforeNode.id:null),itemObject.treeNod,targetObject.treeNod])) return false;
+ if ((targetObject.XMLload==0)&&(this.XMLsource))
+ {
+ targetObject.XMLload=1;
+ this._loadDynXML(targetObject.id);
+ }
+ this.openItem(targetObject.id);
+
+ var oldTree=itemObject.treeNod;
+ var c=itemObject.parentObject.childsCount;
+ var z=itemObject.parentObject;
+
+
+ if ((framesMove)||(oldTree.dpcpy)) {//interframe drag flag
+ var _otiid=itemObject.id;
+ itemObject=this._recreateBranch(itemObject,targetObject,beforeNode);
+ if (!oldTree.dpcpy) oldTree.deleteItem(_otiid);
+ }
+ else
+ {
+
+ var Count=targetObject.childsCount; var Nodes=targetObject.childNodes;
+ if (Count==0) targetObject._open=true;
+ oldTree._unselectItem(itemObject);
+ Nodes[Count]=itemObject;
+ itemObject.treeNod=targetObject.treeNod;
+ targetObject.childsCount++;
+
+ var tr=this._drawNewTr(Nodes[Count].htmlNode);
+
+ if (!beforeNode)
+ {
+ targetObject.htmlNode.childNodes[0].appendChild(tr);
+ if (this.dadmode==1) this._fixNodesCollection(targetObject,beforeNode);
+ }
+ else
+ {
+ targetObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr);
+ this._fixNodesCollection(targetObject,beforeNode);
+ Nodes=targetObject.childNodes;
+ }
+
+
+ }
+
+ if ((!oldTree.dpcpy)&&(!framesMove)) {
+ var zir=itemObject.tr;
+
+ if ((document.all)&&(navigator.appVersion.search(/MSIE\ 5\.0/gi)!=-1))
+ {
+ window.setTimeout(function() { zir.parentNode.removeChild(zir); } , 250 );
+ }
+ else //if (zir.parentNode) zir.parentNode.removeChild(zir,true);
+
+ itemObject.parentObject.htmlNode.childNodes[0].removeChild(itemObject.tr);
+
+ //itemObject.tr.removeNode(true);
+ if ((!beforeNode)||(targetObject!=itemObject.parentObject)){
+ for (var i=0; i<z.childsCount; i++){
+ if (z.childNodes[i].id==itemObject.id) {
+ z.childNodes[i]=0;
+ break; }}}
+ else z.childNodes[z.childsCount-1]=0;
+
+ oldTree._compressChildList(z.childsCount,z.childNodes);
+ z.childsCount--;
+ }
+
+
+ if ((!framesMove)&&(!oldTree.dpcpy)) {
+ itemObject.tr=tr;
+ tr.nodem=itemObject;
+ itemObject.parentObject=targetObject;
+
+ if (oldTree!=targetObject.treeNod) { if(itemObject.treeNod._registerBranch(itemObject,oldTree)) return; this._clearStyles(itemObject); this._redrawFrom(this,itemObject.parentObject); };
+
+ this._correctPlus(targetObject);
+ this._correctLine(targetObject);
+
+ this._correctLine(itemObject);
+ this._correctPlus(itemObject);
+
+ //fix target siblings
+ if (beforeNode)
+ {
+
+ this._correctPlus(beforeNode);
+ //this._correctLine(beforeNode);
+ }
+ else
+ if (targetObject.childsCount>=2)
+ {
+
+ this._correctPlus(Nodes[targetObject.childsCount-2]);
+ this._correctLine(Nodes[targetObject.childsCount-2]);
+ }
+
+ this._correctPlus(Nodes[targetObject.childsCount-1]);
+ //this._correctLine(Nodes[targetObject.childsCount-1]);
+
+
+ if (this.tscheck) this._correctCheckStates(targetObject);
+ if (oldTree.tscheck) oldTree._correctCheckStates(z);
+
+ }
+
+ //fix source parent
+
+ if (c>1) { oldTree._correctPlus(z.childNodes[c-2]);
+ oldTree._correctLine(z.childNodes[c-2]);
+ }
+
+
+// if (z.childsCount==0)
+ oldTree._correctPlus(z);
+ oldTree._correctLine(z);
+
+
+ this.callEvent("onDrop",[itemObject.id,targetObject.id,(beforeNode?beforeNode.id:null),oldTree,targetObject.treeNod]);
+ return itemObject.id;
+ };
+
+
+
+/**
+* @desc: recursive set default styles for node
+* @type: private
+* @param: itemObject - target node object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._clearStyles=function(itemObject){
+ if (!itemObject.htmlNode) return; //some weird case in SRND mode
+ var td1=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[1];
+ var td3=td1.nextSibling.nextSibling;
+
+ itemObject.span.innerHTML=itemObject.label;
+ itemObject.i_sel=false;
+
+ if (itemObject._aimgs)
+ this.dragger.removeDraggableItem(td1.nextSibling);
+
+ if (this.checkBoxOff) {
+ td1.childNodes[0].style.display="";
+ td1.childNodes[0].onclick=this.onCheckBoxClick;
+ this._setSrc(td1.childNodes[0],this.imPath+this.checkArray[itemObject.checkstate]);
+ }
+ else td1.childNodes[0].style.display="none";
+ td1.childNodes[0].treeNod=this;
+
+ this.dragger.removeDraggableItem(td3);
+ if (this.dragAndDropOff) this.dragger.addDraggableItem(td3,this);
+ if (this._aimgs) this.dragger.addDraggableItem(td1.nextSibling,this);
+
+ td3.childNodes[0].className="standartTreeRow";
+ td3.onclick=this.onRowSelect; td3.ondblclick=this.onRowClick2;
+ td1.previousSibling.onclick=this.onRowClick;
+
+ this._correctLine(itemObject);
+ this._correctPlus(itemObject);
+ for (var i=0; i<itemObject.childsCount; i++) this._clearStyles(itemObject.childNodes[i]);
+
+ };
+/**
+* @desc: register node and all children nodes
+* @type: private
+* @param: itemObject - node object
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._registerBranch=function(itemObject,oldTree){
+ if (oldTree) oldTree._globalIdStorageSub(itemObject.id);
+ itemObject.id=this._globalIdStorageAdd(itemObject.id,itemObject);
+ itemObject.treeNod=this;
+ for (var i=0; i<itemObject.childsCount; i++)
+ this._registerBranch(itemObject.childNodes[i],oldTree);
+ return 0;
+ };
+
+
+/**
+* @desc: enable three state checkboxes
+* @beforeInit: 1
+* @param: mode - 1 - on, 0 - off;
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableThreeStateCheckboxes=function(mode) { this.tscheck=convertStringToBoolean(mode); };
+
+
+/**
+* @desc: set function called when mouse is over tree node
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onMouseIn
+* @depricated: use grid.attachEvent("onMouseIn",func); instead
+* @eventdesc: Event raised immideatly after mouse started moving over item
+* @eventparam: ID of item
+*/
+ dhtmlXTreeObject.prototype.setOnMouseInHandler=function(func){
+ this.ehlt=true;
+ this.attachEvent("onMouseIn",func);
+ };
+
+/**
+* @desc: set function called when mouse is out of tree node
+* @param: func - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onMouseOut
+* @depricated: use grid.attachEvent("onMouseOut",func); instead
+* @eventdesc: Event raised immideatly after mouse moved out of item
+* @eventparam: ID of clicked item
+*/
+ dhtmlXTreeObject.prototype.setOnMouseOutHandler=function(func){
+ this.ehlt=true;
+ this.attachEvent("onMouseOut",func);
+ };
+
+
+
+
+
+
+
+
+
+/**
+* @desc: enable tree images
+* @beforeInit: 1
+* @param: mode - 1 - on, 0 - off;
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableTreeImages=function(mode) { this.timgen=convertStringToBoolean(mode); };
+
+
+
+/**
+* @desc: enable mode with fixed tables (looks better, but has no horisontal scrollbar)
+* @beforeInit: 1
+* @param: mode - 1 - on, 0 - off;
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableFixedMode=function(mode) { this.hfMode=convertStringToBoolean(mode); };
+
+/**
+* @desc: show/hide checkboxes (all checkboxes in tree)
+* @type: public
+* @param: mode - true/false
+* @param: hidden - if set to true, checkboxes not rendered but can be shown by showItemCheckbox
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableCheckBoxes=function(mode, hidden){ this.checkBoxOff=convertStringToBoolean(mode); this.cBROf=(!(this.checkBoxOff||convertStringToBoolean(hidden)));
+ };
+/**
+* @desc: set default images for nodes (must be called before XML loading)
+* @type: public
+* @param: a0 - image for node without children;
+* @param: a1 - image for closed node;
+* @param: a2 - image for opened node
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setStdImages=function(image1,image2,image3){
+ this.imageArray[0]=image1; this.imageArray[1]=image2; this.imageArray[2]=image3;};
+
+/**
+* @desc: enable/disable tree lines (parent-child threads)
+* @type: public
+* @param: mode - enable/disable tree lines
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.enableTreeLines=function(mode){
+ this.treeLinesOn=convertStringToBoolean(mode);
+ }
+
+/**
+* @desc: set images used for parent-child threads drawing (lines, plus, minus)
+* @type: public
+* @param: arrayName - name of array: plus, minus
+* @param: image1 - line crossed image
+* @param: image2 - image with top line
+* @param: image3 - image with bottom line
+* @param: image4 - image without line
+* @param: image5 - single root image
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setImageArrays=function(arrayName,image1,image2,image3,image4,image5){
+ switch(arrayName){
+ case "plus": this.plusArray[0]=image1; this.plusArray[1]=image2; this.plusArray[2]=image3; this.plusArray[3]=image4; this.plusArray[4]=image5; break;
+ case "minus": this.minusArray[0]=image1; this.minusArray[1]=image2; this.minusArray[2]=image3; this.minusArray[3]=image4; this.minusArray[4]=image5; break;
+ }
+ };
+
+/**
+* @desc: expand node
+* @param: itemId - id of node
+* @type: public
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.openItem=function(itemId){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ else return this._openItem(temp);
+ };
+
+/**
+* @desc: expand node
+* @param: item - tree node object
+* @type: private
+* @editing: pro
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._openItem=function(item){
+ var state=this._getOpenState(item);
+ if ((state<0)||(((this.XMLsource)&&(!item.XMLload)))){
+ if (!this.callEvent("onOpenStart",[item.id,state])) return 0;
+ this._HideShow(item,2);
+ //#on_open_end_event:11052006{
+ if (this.checkEvent("onOpenEnd")){
+ if (this.onXLE==this._epnFHe) this._epnFHe(this,item.id,true);
+ if (!this.xmlstate || !this.XMLsource)
+ this.callEvent("onOpenEnd",[item.id,this._getOpenState(item)]);
+ else{
+ this._oie_onXLE.push(this.onXLE);
+ this.onXLE=this._epnFHe;
+ }
+ }
+ //#}
+ } else if (this._srnd) this._HideShow(item,2);
+ if (item.parentObject) this._openItem(item.parentObject);
+ };
+
+/**
+* @desc: collapse node
+* @param: itemId - id of node
+* @type: public
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.closeItem=function(itemId){
+ if (this.rootId==itemId) return 0;
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ if (temp.closeble)
+ this._HideShow(temp,1);
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+* @desc: get node level (position in hierarchy)
+* @param: itemId - id of node
+* @type: public
+* @return: node level (0 if no such item in hierarchy - probably super root)
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.getLevel=function(itemId){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ return this._getNodeLevel(temp,0);
+ };
+
+
+
+/**
+* @desc: prevent node from closing
+* @param: itemId - id of node
+* @param: flag - if 0 - node can't be closed, else node can be closed
+* @type: public
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.setItemCloseable=function(itemId,flag)
+ {
+ flag=convertStringToBoolean(flag);
+ if ((itemId)&&(itemId.span))
+ var temp=itemId;
+ else
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ temp.closeble=flag;
+ };
+
+ /**
+* @desc: recursive function used for node level calculation
+* @param: itemObject - pointer to node object
+* @param: count - counter of levels
+* @type: private
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._getNodeLevel=function(itemObject,count){
+ if (itemObject.parentObject) return this._getNodeLevel(itemObject.parentObject,count+1);
+ return(count);
+ };
+
+ /**
+* @desc: return number of children
+* @param: itemId - id of node
+* @type: public
+* @return: number of child items for loaded branches; true - for not loaded branches
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype.hasChildren=function(itemId){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ else
+ {
+ if ( (this.XMLsource)&&(!temp.XMLload) ) return true;
+ else
+ return temp.childsCount;
+ };
+ };
+
+
+ /**
+* @desc: get number of leafs (nodes without children)
+* @param: itemNode - node object
+* @type: private
+* @edition: Professional
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._getLeafCount=function(itemNode){
+ var a=0;
+ for (var b=0; b<itemNode.childsCount; b++)
+ if (itemNode.childNodes[b].childsCount==0) a++;
+ return a;
+ }
+
+
+/**
+* @desc: set new node text (HTML allowed)
+* @param: itemId - id of node
+* @param: newLabel - node text
+* @param: newTooltip - (optional)tooltip for the node
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setItemText=function(itemId,newLabel,newTooltip)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ temp.label=newLabel;
+ temp.span.innerHTML=newLabel;
+
+ temp.span.parentNode.parentNode.title=newTooltip||"";
+ };
+
+/**
+* @desc: get item's tooltip
+* @param: itemId - id of node
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getItemTooltip=function(itemId){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return "";
+ return (temp.span.parentNode.parentNode._dhx_title||temp.span.parentNode.parentNode.title||"");
+ };
+
+/**
+* @desc: refresh tree branch from xml (XML with child nodes rerequested from server)
+* @param: itemId - id of node, if not defined tree super root used.
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.refreshItem=function(itemId){
+ if (!itemId) itemId=this.rootId;
+ var temp=this._globalIdStorageFind(itemId);
+ this.deleteChildItems(itemId);
+ this._loadDynXML(itemId);
+ };
+
+ /**
+* @desc: set item images
+* @param: itemId - id of node
+* @param: image1 - node without children icon
+* @param: image2 - closed node icon
+* @param: image3 - open node icon
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setItemImage2=function(itemId, image1,image2,image3){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ temp.images[1]=image2;
+ temp.images[2]=image3;
+ temp.images[0]=image1;
+ this._correctPlus(temp);
+ };
+/**
+* @desc: set item icons (mostly usefull for childless nodes)
+* @param: itemId - id of node
+* @param: image1 - node without children icon or closed node icon (if image2 specified)
+* @param: image2 - open node icon (optional)
+* @type: public
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.setItemImage=function(itemId,image1,image2)
+ {
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ if (image2)
+ {
+ temp.images[1]=image1;
+ temp.images[2]=image2;
+ }
+ else temp.images[0]=image1;
+ this._correctPlus(temp);
+ };
+
+
+/**
+* @desc: Returns the list of all subitems Ids from the next level of tree, separated by commas.
+* @param: itemId - id of node
+* @type: public
+* @return: list of all subitems from the next level of tree, separated by commas.
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getSubItems =function(itemId)
+ {
+ var temp=this._globalIdStorageFind(itemId,0,1);
+ if (!temp) return 0;
+
+ var z="";
+ for (i=0; i<temp.childsCount; i++){
+ if (!z) z=temp.childNodes[i].id;
+ else z+=this.dlmtr+temp.childNodes[i].id;
+
+ }
+
+ return z;
+ };
+
+
+
+
+/**
+* @desc: Returns the list of all sub items from all next levels of tree, separated by commas.
+* @param: itemId - id of node
+* @edition: Professional
+* @type: private
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getAllScraggyItems =function(node)
+ {
+ var z="";
+ for (var i=0; i<node.childsCount; i++)
+ {
+ if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0))
+ {
+ if (node.childNodes[i].unParsed)
+ var zb=this._getAllScraggyItemsXML(node.childNodes[i].unParsed,1);
+ else
+ var zb=this._getAllScraggyItems(node.childNodes[i])
+
+ if (zb)
+ if (z) z+=this.dlmtr+zb;
+ else z=zb;
+ }
+ else
+ if (!z) z=node.childNodes[i].id;
+ else z+=this.dlmtr+node.childNodes[i].id;
+ }
+ return z;
+ };
+
+
+
+
+
+/**
+* @desc: Returns the list of all children items from all next levels of tree, separated by commas.
+* @param: itemId - id of node
+* @type: private
+* @edition: Professional
+* @topic: 6
+*/
+
+ dhtmlXTreeObject.prototype._getAllFatItems =function(node)
+ {
+ var z="";
+ for (var i=0; i<node.childsCount; i++)
+ {
+ if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0))
+ {
+ if (!z) z=node.childNodes[i].id;
+ else z+=this.dlmtr+node.childNodes[i].id;
+
+ if (node.childNodes[i].unParsed)
+ var zb=this._getAllFatItemsXML(node.childNodes[i].unParsed,1);
+ else
+ var zb=this._getAllFatItems(node.childNodes[i])
+
+ if (zb) z+=this.dlmtr+zb;
+ }
+ }
+ return z;
+ };
+
+
+/**
+* @desc: Returns the list of all children items from all next levels of tree, separated by commas.
+* @param: itemId - id of node
+* @type: private
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getAllSubItems =function(itemId,z,node)
+ {
+ if (node) temp=node;
+ else {
+ var temp=this._globalIdStorageFind(itemId);
+ };
+ if (!temp) return 0;
+
+ z="";
+ for (var i=0; i<temp.childsCount; i++)
+ {
+ if (!z) z=temp.childNodes[i].id;
+ else z+=this.dlmtr+temp.childNodes[i].id;
+ var zb=this._getAllSubItems(0,z,temp.childNodes[i])
+
+ if (zb) z+=this.dlmtr+zb;
+ }
+
+
+ return z;
+ };
+
+
+
+
+
+/**
+* @desc: select node ( and optionaly fire onselect event)
+* @type: public
+* @param: itemId - node id
+* @param: mode - If true, script function for selected node will be called.
+* @param: preserve - preserve earlier selected nodes
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype.selectItem=function(itemId,mode,preserve){
+ mode=convertStringToBoolean(mode);
+ var temp=this._globalIdStorageFind(itemId);
+ if ((!temp)||(!temp.parentObject)) return 0;
+
+ if (this.XMLloadingWarning)
+ temp.parentObject.openMe=1;
+ else
+ this._openItem(temp.parentObject);
+
+ //temp.onRowSelect(0,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],mode);
+ var ze=null;
+ if (preserve) {
+ ze=new Object; ze.ctrlKey=true;
+ if (temp.i_sel) ze.skipUnSel=true;
+ }
+ if (mode)
+ this.onRowSelect(ze,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],false);
+ else
+ this.onRowSelect(ze,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],true);
+ };
+
+/**
+* @desc: retun selected node text
+* @type: public
+* @return: text of selected node (or list of all selected nodes text if more than one selected)
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype.getSelectedItemText=function()
+ {
+ var str=new Array();
+ for (var i=0; i<this._selected.length; i++) str[i]=this._selected[i].span.innerHTML;
+ return (str.join(this.dlmtr));
+ };
+
+
+
+
+/**
+* @desc: correct childNode list after node deleting
+* @type: private
+* @param: Count - childNodes collection length
+* @param: Nodes - childNodes collection
+* @topic: 4
+*/
+ dhtmlXTreeObject.prototype._compressChildList=function(Count,Nodes)
+ {
+ Count--;
+ for (var i=0; i<Count; i++)
+ {
+ if (Nodes[i]==0) { Nodes[i]=Nodes[i+1]; Nodes[i+1]=0;}
+ };
+ };
+/**
+* @desc: delete node
+* @type: private
+* @param: itemId - target node id
+* @param: htmlObject - target node object
+* @param: skip - node unregistration mode (optional, used by private methods)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype._deleteNode=function(itemId,htmlObject,skip){
+ if ((!htmlObject)||(!htmlObject.parentObject)) return 0;
+ var tempos=0; var tempos2=0;
+ if (htmlObject.tr.nextSibling) tempos=htmlObject.tr.nextSibling.nodem;
+ if (htmlObject.tr.previousSibling) tempos2=htmlObject.tr.previousSibling.nodem;
+
+ var sN=htmlObject.parentObject;
+ var Count=sN.childsCount;
+ var Nodes=sN.childNodes;
+ for (var i=0; i<Count; i++)
+ {
+ if (Nodes[i].id==itemId) {
+ if (!skip) sN.htmlNode.childNodes[0].removeChild(Nodes[i].tr);
+ Nodes[i]=0;
+ break;
+ }
+ }
+ this._compressChildList(Count,Nodes);
+ if (!skip) {
+ sN.childsCount--;
+ }
+
+ if (tempos) {
+ this._correctPlus(tempos);
+ this._correctLine(tempos);
+ }
+ if (tempos2) {
+ this._correctPlus(tempos2);
+ this._correctLine(tempos2);
+ }
+ if (this.tscheck) this._correctCheckStates(sN);
+
+ if (!skip) {
+ this._globalIdStorageRecSub(htmlObject);
+ }
+ };
+/**
+* @desc: set state of node's checkbox
+* @type: public
+* @param: itemId - target node id
+* @param: state - checkbox state (0/1/"unsure")
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.setCheck=function(itemId,state){
+ var sNode=this._globalIdStorageFind(itemId,0,1);
+ if (!sNode) return;
+
+ if (state==="unsure")
+ this._setCheck(sNode,state);
+ else
+ {
+ state=convertStringToBoolean(state);
+ if ((this.tscheck)&&(this.smcheck)) this._setSubChecked(state,sNode);
+ else this._setCheck(sNode,state);
+ }
+ if (this.smcheck)
+ this._correctCheckStates(sNode.parentObject);
+ };
+
+ dhtmlXTreeObject.prototype._setCheck=function(sNode,state){
+ if (!sNode) return;
+ if (((sNode.parentObject._r_logic)||(this._frbtr))&&(state))
+ if (this._frbtrs){
+ if (this._frbtrL) this._setCheck(this._frbtrL,0);
+ this._frbtrL=sNode;
+ } else
+ for (var i=0; i<sNode.parentObject.childsCount; i++)
+ this._setCheck(sNode.parentObject.childNodes[i],0);
+
+ var z=sNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];
+
+ if (state=="unsure") sNode.checkstate=2;
+ else if (state) sNode.checkstate=1; else sNode.checkstate=0;
+ if (sNode.dscheck) sNode.checkstate=sNode.dscheck;
+ this._setSrc(z,this.imPath+((sNode.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[sNode.checkstate]);
+ };
+
+/**
+* @desc: change state of node's checkbox and all children checkboxes
+* @type: public
+* @param: itemId - target node id
+* @param: state - checkbox state
+* @topic: 5
+*/
+dhtmlXTreeObject.prototype.setSubChecked=function(itemId,state){
+ var sNode=this._globalIdStorageFind(itemId);
+ this._setSubChecked(state,sNode);
+ this._correctCheckStates(sNode.parentObject);
+}
+
+
+
+/**
+* @desc: change state of node's checkbox and all childnodes checkboxes
+* @type: private
+* @param: itemId - target node id
+* @param: state - checkbox state
+* @param: sNode - target node object (optional, used by private methods)
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype._setSubChecked=function(state,sNode){
+ state=convertStringToBoolean(state);
+ if (!sNode) return;
+ if (((sNode.parentObject._r_logic)||(this._frbtr))&&(state))
+ for (var i=0; i<sNode.parentObject.childsCount; i++)
+ this._setSubChecked(0,sNode.parentObject.childNodes[i]);
+
+
+ if (sNode._r_logic||this._frbtr)
+ this._setSubChecked(state,sNode.childNodes[0]);
+ else
+ for (var i=0; i<sNode.childsCount; i++)
+ {
+ this._setSubChecked(state,sNode.childNodes[i]);
+ };
+ var z=sNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];
+
+ if (state) sNode.checkstate=1;
+ else sNode.checkstate=0;
+ if (sNode.dscheck) sNode.checkstate=sNode.dscheck;
+
+
+
+ this._setSrc(z,this.imPath+((sNode.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[sNode.checkstate]);
+ };
+
+/**
+* @desc: get state of nodes's checkbox
+* @type: public
+* @param: itemId - target node id
+* @return: node state (0 - unchecked,1 - checked, 2 - third state)
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.isItemChecked=function(itemId){
+ var sNode=this._globalIdStorageFind(itemId);
+ if (!sNode) return;
+ return sNode.checkstate;
+ };
+
+
+
+
+
+
+
+/**
+* @desc: delete all children of node
+* @type: public
+* @param: itemId - node id
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.deleteChildItems=function(itemId)
+ {
+ var sNode=this._globalIdStorageFind(itemId);
+ if (!sNode) return;
+ var j=sNode.childsCount;
+ for (var i=0; i<j; i++)
+ {
+ this._deleteNode(sNode.childNodes[0].id,sNode.childNodes[0]);
+ };
+ };
+
+/**
+* @desc: delete node
+* @type: public
+* @param: itemId - node id
+* @param: selectParent - If true parent of deleted item get selection, else no selected items leaving in tree.
+* @topic: 2
+*/
+dhtmlXTreeObject.prototype.deleteItem=function(itemId,selectParent){
+ if ((!this._onrdlh)||(this._onrdlh(itemId))){
+ var z=this._deleteItem(itemId,selectParent);
+
+ }
+
+ //nb:solves standard doctype prb in IE
+ this.allTree.childNodes[0].border = "1";
+ this.allTree.childNodes[0].border = "0";
+}
+/**
+* @desc: delete node
+* @type: private
+* @param: id - node id
+* @param: selectParent - If true parent of deleted item get selection, else no selected items leaving in tree.
+* @param: skip - unregistering mode (optional, used by private methods)
+* @topic: 2
+*/
+dhtmlXTreeObject.prototype._deleteItem=function(itemId,selectParent,skip){
+ selectParent=convertStringToBoolean(selectParent);
+ var sNode=this._globalIdStorageFind(itemId);
+ if (!sNode) return;
+ var pid=this.getParentId(itemId);
+
+ var zTemp=sNode.parentObject;
+ this._deleteNode(itemId,sNode,skip);
+ this._correctPlus(zTemp);
+ this._correctLine(zTemp);
+
+ if ((selectParent)&&(pid!=this.rootId)) this.selectItem(pid,1);
+ return zTemp;
+ };
+
+/**
+* @desc: uregister all child nodes of target node
+* @type: private
+* @param: itemObject - node object
+* @topic: 3
+*/
+ dhtmlXTreeObject.prototype._globalIdStorageRecSub=function(itemObject){
+ for(var i=0; i<itemObject.childsCount; i++)
+ {
+ this._globalIdStorageRecSub(itemObject.childNodes[i]);
+ this._globalIdStorageSub(itemObject.childNodes[i].id);
+ };
+ this._globalIdStorageSub(itemObject.id);
+
+ /*anti memory leaking*/
+ var z=itemObject;
+// var par=z.span.parentNode.parentNode.childNodes;
+// par[0].parentObject=null;
+// par[1].childNodes[0].parentObject=null;
+// par[2].childNodes[0].parentObject=null;
+// par[2].childNodes[0].treeNod=null;
+// par[2].parentObject=null;
+// par[3].parentObject=null;
+ z.span=null;
+ z.tr.nodem=null;
+ z.tr=null;
+ z.htmlNode=null;
+ };
+
+/**
+* @desc: create new node next to specified
+* @type: public
+* @param: itemId - node id
+* @param: newItemId - new node id
+* @param: itemText - new node text
+* @param: itemActionHandler - function fired on node select event (optional)
+* @param: image1 - image for node without children; (optional)
+* @param: image2 - image for closed node; (optional)
+* @param: image3 - image for opened node (optional)
+* @param: optionStr - options string (optional)
+* @param: children - node children flag (for dynamical trees) (optional)
+* @topic: 2
+*/
+ dhtmlXTreeObject.prototype.insertNewNext=function(itemId,newItemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){
+ var sNode=this._globalIdStorageFind(itemId);
+ if ((!sNode)||(!sNode.parentObject)) return (0);
+
+ var nodez=this._attachChildNode(0,newItemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children,sNode);
+
+ return nodez;
+ };
+
+
+
+/**
+* @desc: retun node id by index
+* @type: public
+* @param: itemId - parent node id
+* @param: index - index of node, 0 based
+* @return: node id
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype.getItemIdByIndex=function(itemId,index){
+ var z=this._globalIdStorageFind(itemId);
+ if ((!z)||(index>z.childsCount)) return null;
+ return z.childNodes[index].id;
+ };
+
+/**
+* @desc: retun child node id by index
+* @type: public
+* @param: itemId - parent node id
+* @param: index - index of child node
+* @return: node id
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(itemId,index){
+ var z=this._globalIdStorageFind(itemId);
+ if ((!z)||(index>=z.childsCount)) return null;
+ return z.childNodes[index].id;
+ };
+
+
+
+
+
+/**
+* @desc: set function called when drag-and-drop event occured
+* @param: aFunc - event handling function
+* @type: deprecated
+* @topic: 0,7
+* @event: onDrag
+* @depricated: use grid.attachEvent("onDrag",func); instead
+* @eventdesc: Event occured after item was dragged and droped on another item, but before item moving processed.
+ Event also raised while programmatic moving nodes.
+* @eventparam: ID of source item
+* @eventparam: ID of target item
+* @eventparam: if node droped as sibling then contain id of item before whitch source node will be inserted
+* @eventparam: source Tree object
+* @eventparam: target Tree object
+* @eventreturn: true - confirm drag-and-drop; false - deny drag-and-drop;
+*/
+ dhtmlXTreeObject.prototype.setDragHandler=function(func){ this.attachEvent("onDrag",func); };
+
+ /**
+* @desc: clear selection from node
+* @param: htmlNode - pointer to node object
+* @type: private
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype._clearMove=function(){
+ if (this._lastMark){
+ this._lastMark.className=this._lastMark.className.replace(/dragAndDropRow/g,"");
+ this._lastMark=null;
+ }
+
+ this.allTree.className=this.allTree.className.replace(" selectionBox","");
+ };
+
+ /**
+* @desc: enable/disable drag-and-drop
+* @type: public
+* @param: mode - enabled/disabled [ can be true/false/temporary_disabled - last value mean that tree can be D-n-D can be switched to true later ]
+* @param: rmode - enabled/disabled drag and drop on super root
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableDragAndDrop=function(mode,rmode){
+ if (mode=="temporary_disabled"){
+ this.dADTempOff=false;
+ mode=true; }
+ else
+ this.dADTempOff=true;
+
+ this.dragAndDropOff=convertStringToBoolean(mode);
+ if (this.dragAndDropOff) this.dragger.addDragLanding(this.allTree,this);
+ if (arguments.length>1)
+ this._ddronr=(!convertStringToBoolean(rmode));
+ };
+
+/**
+* @desc: set selection on node
+* @param: node - pointer to node object
+* @type: private
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype._setMove=function(htmlNode,x,y){
+ if (htmlNode.parentObject.span) {
+ //window.status=x;
+ var a1=getAbsoluteTop(htmlNode);
+ var a2=getAbsoluteTop(this.allTree);
+
+ this.dadmodec=this.dadmode;//this.dadmode;
+ this.dadmodefix=0;
+
+
+ var zN=htmlNode.parentObject.span;
+ zN.className+=" dragAndDropRow";
+ this._lastMark=zN;
+
+ this._autoScroll(null,a1,a2);
+
+ }
+ };
+
+dhtmlXTreeObject.prototype._autoScroll=function(node,a1,a2){
+ if (this.autoScroll)
+ {
+ if (node){
+ a1=getAbsoluteTop(node);
+ a2=getAbsoluteTop(this.allTree);
+ }
+ //scroll down
+ if ( (a1-a2-parseInt(this.allTree.scrollTop))>(parseInt(this.allTree.offsetHeight)-50) )
+ this.allTree.scrollTop=parseInt(this.allTree.scrollTop)+20;
+ //scroll top
+ if ( (a1-a2)<(parseInt(this.allTree.scrollTop)+30) )
+ this.allTree.scrollTop=parseInt(this.allTree.scrollTop)-20;
+ }
+}
+
+/**
+* @desc: create html element for dragging
+* @type: private
+* @param: htmlObject - html node object
+* @topic: 1
+*/
+dhtmlXTreeObject.prototype._createDragNode=function(htmlObject,e){
+ if (!this.dADTempOff) return null;
+
+ var obj=htmlObject.parentObject;
+ if (!this.callEvent("onBeforeDrag",[obj.id])) return null;
+ if (!obj.i_sel)
+ this._selectItem(obj,e);
+
+
+ var dragSpan=document.createElement('div');
+
+ var text=new Array();
+ if (this._itim_dg)
+ for (var i=0; i<this._selected.length; i++)
+ text[i]="<table cellspacing='0' cellpadding='0'><tr><td><img width='18px' height='18px' src='"+this._getSrc(this._selected[i].span.parentNode.previousSibling.childNodes[0])+"'></td><td>"+this._selected[i].span.innerHTML+"</td></tr><table>";
+ else
+ text=this.getSelectedItemText().split(this.dlmtr);
+
+ dragSpan.innerHTML=text.join("");
+ dragSpan.style.position="absolute";
+ dragSpan.className="dragSpanDiv";
+ this._dragged=(new Array()).concat(this._selected);
+ return dragSpan;
+}
+
+
+
+/**
+* @desc: focus item in tree
+* @type: private
+* @param: item - node object
+* @edition: Professional
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype._focusNode=function(item){
+ var z=getAbsoluteTop(item.htmlNode)-getAbsoluteTop(this.allTree);
+ if ((z>(this.allTree.scrollTop+this.allTree.offsetHeight-30))||(z<this.allTree.scrollTop))
+ this.allTree.scrollTop=z;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+///DragAndDrop
+
+dhtmlXTreeObject.prototype._preventNsDrag=function(e){
+ if ((e)&&(e.preventDefault)) { e.preventDefault(); return false; }
+ return false;
+}
+
+dhtmlXTreeObject.prototype._drag=function(sourceHtmlObject,dhtmlObject,targetHtmlObject){
+ if (this._autoOpenTimer) clearTimeout(this._autoOpenTimer);
+
+ if (!targetHtmlObject.parentObject){
+ targetHtmlObject=this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];
+ this.dadmodec=0;
+ }
+
+ this._clearMove();
+ var z=sourceHtmlObject.parentObject.treeNod;
+ if ((z)&&(z._clearMove)) z._clearMove("");
+
+ if ((!this.dragMove)||(this.dragMove()))
+ {
+ if ((!z)||(!z._clearMove)||(!z._dragged)) var col=new Array(sourceHtmlObject.parentObject);
+ else var col=z._dragged;
+ var trg=targetHtmlObject.parentObject;
+
+ for (var i=0; i<col.length; i++){
+ var newID=this._moveNode(col[i],trg);
+ if ((this.dadmodec)&&(newID!==false)) trg=this._globalIdStorageFind(newID,true,true);
+ if ((newID)&&(!this._sADnD)) this.selectItem(newID,0,1);
+ }
+
+ }
+ if (z) z._dragged=new Array();
+
+
+}
+
+dhtmlXTreeObject.prototype._dragIn=function(htmlObject,shtmlObject,x,y){
+
+ if (!this.dADTempOff) return 0;
+ var fobj=shtmlObject.parentObject;
+ var tobj=htmlObject.parentObject;
+ if ((!tobj)&&(this._ddronr)) return;
+ if (!this.callEvent("onDragIn",[fobj.id,tobj?tobj.id:null,fobj.treeNod,this]))
+ return 0;
+
+ if (!tobj)
+ this.allTree.className+=" selectionBox";
+ else
+ {
+ if (fobj.childNodes==null){
+ this._setMove(htmlObject,x,y);
+ return htmlObject;
+ }
+
+ var stree=fobj.treeNod;
+ for (var i=0; i<stree._dragged.length; i++)
+ if (this._checkPNodes(tobj,stree._dragged[i])){
+ this._autoScroll(htmlObject);
+ return 0;
+ }
+
+ this._setMove(htmlObject,x,y);
+ if (this._getOpenState(tobj)<=0){
+ this._autoOpenId=tobj.id;
+ this._autoOpenTimer=window.setTimeout(new callerFunction(this._autoOpenItem,this),1000);
+ }
+ }
+
+ return htmlObject;
+
+}
+dhtmlXTreeObject.prototype._autoOpenItem=function(e,treeObject){
+ treeObject.openItem(treeObject._autoOpenId);
+};
+dhtmlXTreeObject.prototype._dragOut=function(htmlObject){
+this._clearMove();
+if (this._autoOpenTimer) clearTimeout(this._autoOpenTimer);
+ }
+
+
+
+
+
+//#complex_move:01112006{
+
+/**
+* @desc: move item (inside of tree)
+* @type: public
+* @param: itemId - item Id
+* @param: mode - moving mode (left,up,down,item_child,item_sibling,item_sibling_next,up_strict,down_strict)
+* @param: targetId - target Node in item_child and item_sibling mode
+* @param: targetTree - used for moving between trees (optional)
+* @return: node id
+* @topic: 2
+*/
+dhtmlXTreeObject.prototype.moveItem=function(itemId,mode,targetId,targetTree)
+{
+ var sNode=this._globalIdStorageFind(itemId);
+ if (!sNode) return (0);
+
+ switch(mode){
+ case "right": alert('Not supported yet');
+ break;
+ case "item_child":
+ var tNode=(targetTree||this)._globalIdStorageFind(targetId);
+ if (!tNode) return (0);
+ (targetTree||this)._moveNodeTo(sNode,tNode,0);
+ break;
+ case "item_sibling":
+ var tNode=(targetTree||this)._globalIdStorageFind(targetId);
+ if (!tNode) return (0);
+ (targetTree||this)._moveNodeTo(sNode,tNode.parentObject,tNode);
+ break;
+ case "item_sibling_next":
+ var tNode=(targetTree||this)._globalIdStorageFind(targetId);
+ if (!tNode) return (0);
+ if ((tNode.tr)&&(tNode.tr.nextSibling)&&(tNode.tr.nextSibling.nodem))
+ (targetTree||this)._moveNodeTo(sNode,tNode.parentObject,tNode.tr.nextSibling.nodem);
+ else
+ (targetTree||this)._moveNodeTo(sNode,tNode.parentObject);
+ break;
+ case "left": if (sNode.parentObject.parentObject)
+ this._moveNodeTo(sNode,sNode.parentObject.parentObject,sNode.parentObject);
+ break;
+ case "up": var z=this._getPrevNode(sNode);
+ if ((z==-1)||(!z.parentObject)) return;
+ this._moveNodeTo(sNode,z.parentObject,z);
+ break;
+ case "up_strict": var z=this._getIndex(sNode);
+ if (z!=0)
+ this._moveNodeTo(sNode,sNode.parentObject,sNode.parentObject.childNodes[z-1]);
+ break;
+ case "down_strict": var z=this._getIndex(sNode);
+ var count=sNode.parentObject.childsCount-2;
+ if (z==count)
+ this._moveNodeTo(sNode,sNode.parentObject);
+ else if (z<count)
+ this._moveNodeTo(sNode,sNode.parentObject,sNode.parentObject.childNodes[z+2]);
+ break;
+ case "down": var z=this._getNextNode(this._lastChild(sNode));
+ if ((z==-1)||(!z.parentObject)) return;
+ if (z.parentObject==sNode.parentObject)
+ var z=this._getNextNode(z);
+ if (z==-1){
+ this._moveNodeTo(sNode,sNode.parentObject);
+ }
+ else
+ {
+ if ((z==-1)||(!z.parentObject)) return;
+ this._moveNodeTo(sNode,z.parentObject,z);
+ }
+ break;
+ }
+}
+
+
+//#}
+
+
+
+
+
+
+
+/**
+* @desc: load xml for tree branch
+* @param: id - id of parent node
+* @param: src - path to xml, optional
+* @type: private
+* @topic: 1
+*/
+ dhtmlXTreeObject.prototype._loadDynXML=function(id,src) {
+ src=src||this.XMLsource;
+ var sn=(new Date()).valueOf();
+ this._ld_id=id;
+
+ this.loadXML(src+getUrlSymbol(src)+"uid="+sn+"&id="+this._escape(id));
+ };
+
+
+
+
+
+
+
+/**
+* @desc: check possibility of drag-and-drop
+* @type: private
+* @param: itemId - draged node id
+* @param: htmlObject - droped node object
+* @param: shtmlObject - sourse node object
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._checkPNodes=function(item1,item2){
+ if (item2==item1) return 1
+ if (item1.parentObject) return this._checkPNodes(item1.parentObject,item2); else return 0;
+ };
+
+
+
+
+
+
+
+
+
+
+/**
+* @desc: prevent caching in IE by adding random value to URL string
+* @param: mode - enable/disable random value ( disabled by default )
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.preventIECaching=function(mode){
+ this.no_cashe = convertStringToBoolean(mode);
+ this.XMLLoader.rSeed=this.no_cashe;
+}
+dhtmlXTreeObject.prototype.preventIECashing=dhtmlXTreeObject.prototype.preventIECaching;
+
+
+
+
+//#tree_extra:01112006{
+
+/**
+* @desc: disable checkbox
+* @param: itemId - Id of tree item
+* @param: mode - 1 - on, 0 - off;
+* @type: public
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.disableCheckbox=function(itemId,mode) {
+ if (typeof(itemId)!="object")
+ var sNode=this._globalIdStorageFind(itemId,0,1);
+ else
+ var sNode=itemId;
+ if (!sNode) return;
+ sNode.dscheck=convertStringToBoolean(mode)?(((sNode.checkstate||0)%3)+3):((sNode.checkstate>2)?(sNode.checkstate-3):sNode.checkstate);
+ this._setCheck(sNode);
+ if (sNode.dscheck<3) sNode.dscheck=false;
+ };
+
+
+
+
+/**
+* @desc: set escaping mode (used for escaping ID in requests)
+* @param: mode - escaping mode ("utf8" for UTF escaping)
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.setEscapingMode=function(mode){
+ this.utfesc=mode;
+ }
+
+
+/**
+* @desc: enable item highlighting (item text highlited on mouseover)
+* @beforeInit: 1
+* @param: mode - 1 - on, 0 - off;
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableHighlighting=function(mode) { this.ehlt=true; this.ehlta=convertStringToBoolean(mode); };
+
+/**
+* @desc: called on mouse out
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._itemMouseOut=function(){
+ var that=this.childNodes[3].parentObject;
+ var tree=that.treeNod;
+ tree.callEvent("onMouseOut",[that.id]);
+ if (that.id==tree._l_onMSI) tree._l_onMSI=null;
+ if (!tree.ehlta) return;
+ that.span.className=that.span.className.replace("_lor","");
+ }
+/**
+* @desc: called on mouse in
+* @type: private
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype._itemMouseIn=function(){
+ var that=this.childNodes[3].parentObject;
+ var tree=that.treeNod;
+
+ if (tree._l_onMSI!=that.id) tree.callEvent("onMouseIn",[that.id]);
+ tree._l_onMSI=that.id;
+ if (!tree.ehlta) return;
+ that.span.className=that.span.className.replace("_lor","");
+ that.span.className=that.span.className.replace(/((standart|selected)TreeRow)/,"$1_lor");
+ }
+
+/**
+* @desc: enable active images (clickable and dragable). By default only text part of the node is active
+* @beforeInit: 1
+* @param: mode - 1 - on, 0 - off;
+* @type: public
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableActiveImages=function(mode){this._aimgs=convertStringToBoolean(mode); };
+
+/**
+* @desc: focus item in tree (scroll to it if necessary)
+* @type: public
+* @param: itemId - item Id
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.focusItem=function(itemId){
+ var sNode=this._globalIdStorageFind(itemId);
+ if (!sNode) return (0);
+ this._focusNode(sNode);
+ };
+
+
+/**
+* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter.
+* @param: itemId - id of node
+* @type: public
+* @return: list of all children items from all next levels of tree, separated by default delimiter
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getAllSubItems =function(itemId){
+ return this._getAllSubItems(itemId);
+ }
+
+/**
+* @desc: Returns the list of all items which doesn't have child nodes.
+* @type: public
+* @return: list of all items which doesn't have child nodes.
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getAllChildless =function(){
+ return this._getAllScraggyItems(this.htmlNode);
+ }
+ dhtmlXTreeObject.prototype.getAllLeafs=dhtmlXTreeObject.prototype.getAllChildless;
+
+
+/**
+* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter.
+* @param: itemId - id of node
+* @edition: Professional
+* @type: private
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getAllScraggyItems =function(node)
+ {
+ var z="";
+ for (var i=0; i<node.childsCount; i++)
+ {
+ if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0))
+ {
+ if (node.childNodes[i].unParsed)
+ var zb=this._getAllScraggyItemsXML(node.childNodes[i].unParsed,1);
+ else
+ var zb=this._getAllScraggyItems(node.childNodes[i])
+
+ if (zb)
+ if (z) z+=this.dlmtr+zb;
+ else z=zb;
+ }
+ else
+ if (!z) z=node.childNodes[i].id;
+ else z+=this.dlmtr+node.childNodes[i].id;
+ }
+ return z;
+ };
+
+
+
+
+
+/**
+* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter.
+* @param: itemId - id of node
+* @type: private
+* @edition: Professional
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype._getAllFatItems =function(node)
+ {
+ var z="";
+ for (var i=0; i<node.childsCount; i++)
+ {
+ if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0))
+ {
+ if (!z) z=node.childNodes[i].id;
+ else z+=this.dlmtr+node.childNodes[i].id;
+
+ if (node.childNodes[i].unParsed)
+ var zb=this._getAllFatItemsXML(node.childNodes[i].unParsed,1);
+ else
+ var zb=this._getAllFatItems(node.childNodes[i])
+
+ if (zb) z+=this.dlmtr+zb;
+ }
+ }
+ return z;
+ };
+
+/**
+* @desc: Returns the list of all items which have child nodes, separated by default delimiter.
+* @type: public
+* @return: list of all items which has child nodes, separated by default delimiter.
+* @topic: 6
+*/
+ dhtmlXTreeObject.prototype.getAllItemsWithKids =function(){
+ return this._getAllFatItems(this.htmlNode);
+ }
+ dhtmlXTreeObject.prototype.getAllFatItems=dhtmlXTreeObject.prototype.getAllItemsWithKids;
+
+
+
+/**
+* @desc: return list of identificators of nodes with checked checkboxes, separated by default delimiter
+* @type: public
+* @return: list of ID of items with checked checkboxes, separated by default delimiter
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.getAllChecked=function(){
+ return this._getAllChecked("","",1);
+ }
+/**
+* @desc: return list of identificators of nodes with unchecked checkboxes, separated by default delimiter
+* @type: public
+* @return: list of ID of items with unchecked checkboxes, separated by default delimiter
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.getAllUnchecked=function(itemId){
+ if (itemId)
+ itemId=this._globalIdStorageFind(itemId);
+ return this._getAllChecked(itemId,"",0);
+ }
+
+
+/**
+* @desc: return list of identificators of nodes with third state checkboxes, separated by default delimiter
+* @type: public
+* @return: list of ID of items with third state checkboxes, separated by default delimiter
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.getAllPartiallyChecked=function(){
+ return this._getAllChecked("","",2);
+ }
+
+
+/**
+* @desc: return list of identificators of nodes with checked and third state checkboxes, separated by default delimiter
+* @type: public
+* @return: list of ID of items with checked and third state checkboxes, separated by default delimiter
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype.getAllCheckedBranches=function(){
+ var temp= this._getAllChecked("","",1);
+ if (temp!="") temp+=this.dlmtr;
+ return temp+this._getAllChecked("","",2);
+ }
+
+/**
+* @desc: return list of identificators of nodes with checked checkboxes
+* @type: private
+* @param: node - node object (optional, used by private methods)
+* @param: list - initial identificators list (optional, used by private methods)
+* @topic: 5
+*/
+ dhtmlXTreeObject.prototype._getAllChecked=function(htmlNode,list,mode){
+ if (!htmlNode) htmlNode=this.htmlNode;
+
+ if (htmlNode.checkstate==mode)
+ if (!htmlNode.nocheckbox) { if (list) list+=this.dlmtr+htmlNode.id; else list=htmlNode.id; }
+ var j=htmlNode.childsCount;
+ for (var i=0; i<j; i++)
+ {
+ list=this._getAllChecked(htmlNode.childNodes[i],list,mode);
+ };
+
+
+ if (list) return list; else return "";
+ };
+
+/**
+* @desc: set individual item style
+* @type: public
+* @param: itemId - node id
+* @param: style_string - valid CSS string
+* @topic: 2
+*/
+dhtmlXTreeObject.prototype.setItemStyle=function(itemId,style_string){
+ var temp=this._globalIdStorageFind(itemId);
+ if (!temp) return 0;
+ if (!temp.span.style.cssText)
+ temp.span.setAttribute("style",temp.span.getAttribute("style")+"; "+style_string);
+ else
+ temp.span.style.cssText+=(";"+style_string);
+}
+
+/**
+* @desc: enable draging item image with item text
+* @type: public
+* @param: mode - true/false
+* @topic: 1
+*/
+dhtmlXTreeObject.prototype.enableImageDrag=function(mode){
+ this._itim_dg=convertStringToBoolean(mode);
+}
+
+/**
+* @desc: set function called when tree item draged over another item
+* @param: func - event handling function
+* @type: depricated
+* @edition: Professional
+* @topic: 4
+* @event: onDragIn
+* @depricated: use grid.attachEvent("onDragIn",func); instead
+* @eventdesc: Event raised when item draged other other dropable target
+* @eventparam: ID draged item
+* @eventparam: ID potencial drop landing
+* @eventparam: source object
+* @eventparam: target object
+* @eventreturn: true - allow drop; false - deny drop;
+*/
+ dhtmlXTreeObject.prototype.setOnDragIn=function(func){
+ this.attachEvent("onDragIn",func);
+ };
+
+/**
+* @desc: enable/disable auto scrolling while drag-and-drop
+* @type: public
+* @param: mode - enabled/disabled
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.enableDragAndDropScrolling=function(mode){ this.autoScroll=convertStringToBoolean(mode); };
+//#}
+
+
+dhtmlXTreeObject.prototype.dhx_Event=function()
+{
+ this.dhx_SeverCatcherPath="";
+
+ this.attachEvent = function(original, catcher, CallObj)
+ {
+ if (this._onEventSet && this._onEventSet[original])
+ this._onEventSet[original].apply(this,[]);
+
+ CallObj = CallObj||this;
+ original = 'ev_'+original;
+ if ( ( !this[original] ) || ( !this[original].addEvent ) ) {
+ var z = new this.eventCatcher(CallObj);
+ z.addEvent( this[original] );
+ this[original] = z;
+ }
+ return ( original + ':' + this[original].addEvent(catcher) ); //return ID (event name & event ID)
+ }
+ this.callEvent=function(name,a){
+ if (this["ev_"+name]) return this["ev_"+name].apply(this,a);
+ return true;
+ }
+ this.checkEvent=function(name){
+ if (this["ev_"+name]) return true;
+ return false;
+ }
+
+ this.eventCatcher = function(obj)
+ {
+ var dhx_catch = new Array();
+ var m_obj = obj;
+ var func_server = function(catcher,rpc)
+ {
+ catcher = catcher.split(":");
+ var postVar="";
+ var postVar2="";
+ var target=catcher[1];
+ if (catcher[1]=="rpc"){
+ postVar='<?xml version="1.0"?><methodCall><methodName>'+catcher[2]+'</methodName><params>';
+ postVar2="</params></methodCall>";
+ target=rpc;
+ }
+ var z = function() {
+ var loader = new dtmlXMLLoaderObject( null, window, false );
+ var request=postVar;
+ if (postVar2){
+ for (var i=0; i<arguments.length; i++)
+ request += "<param><value><string>"+(arguments[i]?arguments[i].toString():"")+"</string></value></param>";
+ request+=postVar2;
+ }
+ else
+ for (var i=0; i<arguments.length; i++)
+ request += ( '&arg'+i+'='+escape(arguments[i]));
+
+ loader.loadXML( target, true, request,postVar2?true:false);
+
+ try{
+ if (postVar2){
+ var dt=loader.doXPath("//methodResponse/params/param/value/string");
+ return convertStringToBoolean(dt[0].firstChild.data);
+ }
+ else return convertStringToBoolean(loader.xmlDoc.responseText);
+ }
+ catch(e){
+
+ dhtmlxError.throwError("rpcError",loader.xmlDoc.responseText);
+ return false;
+ }
+ }
+ return z;
+ }
+ var z = function()
+ {
+ if (dhx_catch)
+ var res=true;
+ for (var i=0; i<dhx_catch.length; i++) {
+ if (dhx_catch[i] != null) {
+ var zr = dhx_catch[i].apply( m_obj, arguments );
+ res = res && zr;
+ }
+ }
+ return res;
+ }
+ z.addEvent = function(ev)
+ {
+ if ( typeof(ev) != "function" )
+ if (ev && ev.indexOf && ev.indexOf("server:") === 0)
+ ev = new func_server(ev,m_obj.rpcServer);
+ else
+ ev = eval(ev);
+ if (ev)
+ return dhx_catch.push( ev ) - 1;
+ return false;
+ }
+ z.removeEvent = function(id)
+ {
+ dhx_catch[id] = null;
+ }
+ return z;
+ }
+
+ this.detachEvent = function(id)
+ {
+ if (id != false) {
+ var list = id.split(':'); //get EventName and ID
+ this[ list[0] ].removeEvent( list[1] ); //remove event
+ }
+ }
+}
+//(c)dhtmlx ltd. www.dhtmlx.com \ No newline at end of file
diff --git a/funcweb/funcweb/static/javascript/ext/dhtmlxtree_dragin.js b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_dragin.js
new file mode 100644
index 0000000..3de7a72
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_dragin.js
@@ -0,0 +1,75 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+/**
+* @desc: adds drag-n-drop capabilities (with possibility to drop into dhtmlxTree) to HTML object.
+* @param: obj - HTML object, or HTML object ID
+* @param: func - custom drag processor function, optional
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.makeDragable=function(obj,func){
+ if (typeof(obj)!="object")
+ obj=document.getElementById(obj);
+
+ dragger=new dhtmlDragAndDropObject();
+ dropper=new dhx_dragSomethingInTree();
+
+ dragger.addDraggableItem(obj,dropper);
+ obj.dragLanding=null;
+ obj.ondragstart=dropper._preventNsDrag;
+ obj.onselectstart=new Function("return false;");
+
+ obj.parentObject=new Object;
+ obj.parentObject.img=obj;
+ obj.parentObject.treeNod=dropper;
+ dropper._customDrop=func;
+}
+/**
+* @desc: adds drag-n-drop capabilities (with possibility to drop into dhtmlxTree) to all HTML items with dragInDhtmlXTree attribute
+* @param: func - custom drag processor function, optional
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.makeAllDraggable=function(func){
+ var z=document.getElementsByTagName("div");
+ for (var i=0; i<z.length; i++)
+ if (z[i].getAttribute("dragInDhtmlXTree"))
+ this.makeDragable(z[i],func);
+}
+
+function dhx_dragSomethingInTree(){
+ this.lWin=window;
+ //this function creates a HTML object which will be used while drag-n-drop
+ this._createDragNode=function(node){
+ var dragSpan=document.createElement('div');
+ dragSpan.style.position="absolute";
+ dragSpan.innerHTML=node.innerHTML;
+ dragSpan.style.zIndex=12;
+ return dragSpan;
+ };
+ //this function necessary for correct browser support
+ //doesn't change anything in it
+ this._preventNsDrag=function(e){
+ (e||window.event).cancelBubble=true;
+ if ((e)&&(e.preventDefault)) { e.preventDefault(); return false; }
+ return false;
+ }
+ //this function contains a reaction on drop operation
+ //the tree don't know what to do with custom item
+ //so you must define this reaction
+ this._nonTrivialNode=function(tree,item,bitem,source){
+ if (this._customDrop) return this._customDrop(tree,source.img.id,item.id,bitem?bitem.id:null);
+
+ var image=(source.img.getAttribute("image")||"");
+ var id=source.img.id||"new";
+ var text=(source.img.getAttribute("text")||(_isIE?source.img.innerText:source.img.textContent));
+ if (tree.callEvent("onDrag",[id,item.id,source.img,tree]))
+ tree[bitem?"insertNewNext":"insertNewItem"](bitem?bitem.id:item.id,id,text,"",image,image,image);
+ }
+}
+//(c)dhtmlx ltd. www.dhtmlx.com \ No newline at end of file
diff --git a/funcweb/funcweb/static/javascript/ext/dhtmlxtree_ed.js b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_ed.js
new file mode 100644
index 0000000..402df58
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_ed.js
@@ -0,0 +1,189 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+/*
+Purpose: item edit extension
+*/
+
+
+/**
+* @desc: enable editing of item text
+* @param: mode - true/false
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.enableItemEditor=function(mode){
+ this._eItEd=convertStringToBoolean(mode);
+ if (!this._eItEdFlag){
+
+ this._edn_click_IE=true;
+ this._edn_dblclick=true;
+ this._ie_aFunc=this.aFunc;
+ this._ie_dblclickFuncHandler=this.dblclickFuncHandler;
+
+ this.setOnDblClickHandler(function (a,b) {
+ if (this._edn_dblclick) this._editItem(a,b);
+ return true;
+ });
+
+ this.setOnClickHandler(function (a,b) {
+ this._stopEditItem(a,b);
+ if ((this.ed_hist_clcik==a)&&(this._edn_click_IE))
+ this._editItem(a,b);
+ this.ed_hist_clcik=a;
+ return true;
+ });
+
+ this._eItEdFlag=true;
+
+ }
+ };
+
+/**
+* @desc: set onEdit handler ( multi handler event)
+* @param: func - function which will be called on edit related events
+* @type: depricated
+* @event: onEdit
+* @depricated: use grid.attachEvent("onEdit",func); instead
+* @eventdesc: Event occurs on 4 different stages of edit process: before editing started (cancelable), after editing started, before closing (cancelable), after closed
+* @eventparam: state - 0 before editing started , 1 after editing started, 2 before closing, 3 after closed
+* @eventparam: id - id of edited items
+* @eventparam: tree - tree object
+* @eventparam: value - for stage 0 and 2, value of editor
+* @eventreturn: for stages 0 and 2; true - confirm opening/closing, false - deny opening/closing; text - edit value
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.setOnEditHandler=function(func){
+ this.attachEvent("onEdit",func);
+ };
+
+
+
+/**
+* @desc: define which events must start editing
+* @param: click_IE - click on already selected item - true/false [true by default]
+* @param: dblclick - on double click
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.setEditStartAction=function(click_IE, dblclick){
+ this._edn_click_IE=convertStringToBoolean(click_IE);
+ this._edn_dblclick=convertStringToBoolean(dblclick);
+ };
+
+dhtmlXTreeObject.prototype._stopEdit=function(a){
+ if (this._editCell){
+ this.dADTempOff=this.dADTempOffEd;
+ if (this._editCell.id!=a){
+
+ var editText=true;
+ editText=this.callEvent("onEdit",[2,this._editCell.id,this,this._editCell.span.childNodes[0].value]);
+ if (editText===true)
+ editText=this._editCell.span.childNodes[0].value;
+ else if (editText===false) editText=this._editCell._oldValue;
+
+ this._editCell.span.innerHTML=editText;
+ this._editCell.label=this._editCell.span.innerHTML;
+ var cSS=this._editCell.i_sel?"selectedTreeRow":"standartTreeRow";
+ this._editCell.span.className=cSS;
+ this._editCell.span.parentNode.className="standartTreeRow";
+ this._editCell.span.onclick=function(){};
+ var id=this._editCell.id; this._editCell=null;
+
+ if (this.childCalc) this._fixChildCountLabel(this._editCell);
+ this.callEvent("onEdit",[3,id,this]);
+
+ if (this._enblkbrd){
+ this.parentObject.lastChild.focus();
+ this.parentObject.lastChild.focus();
+ }
+ }
+ }
+}
+
+dhtmlXTreeObject.prototype._stopEditItem=function(id,tree){
+ this._stopEdit(id);
+};
+
+/**
+* @desc: switch currently edited item back to normal view
+* @type: public
+* @topic: 0
+*/
+
+dhtmlXTreeObject.prototype.stopEdit=function(){
+ if (this._editCell)
+ this._stopEdit(this._editCell.id+"_non");
+}
+
+/**
+* @desc: open editor for specified item
+* @param: id - item ID
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.editItem=function(id){
+ this._editItem(id,this);
+}
+
+dhtmlXTreeObject.prototype._editItem=function(id,tree){
+ if (this._eItEd){
+ this._stopEdit();
+ var temp=this._globalIdStorageFind(id);
+ if (!temp) return;
+
+ editText=this.callEvent("onEdit",[0,id,this,temp.span.innerHTML]);
+
+ if (editText===true)
+ editText=temp.label;
+ else if (editText===false) return;
+
+ this.dADTempOffEd=this.dADTempOff;
+ this.dADTempOff=false;
+
+
+ this._editCell=temp;
+ temp._oldValue=editText;
+ temp.span.innerHTML="<input type='text' class='intreeeditRow' />";
+
+ temp.span.childNodes[0].value=editText;
+
+ temp.span.childNodes[0].onselectstart=function(e){
+ (e||event).cancelBubble=true;
+ return true;
+ }
+ temp.span.childNodes[0].onmousedown=function(e){
+ (e||event).cancelBubble=true;
+ return true;
+ }
+
+ temp.span.childNodes[0].focus();
+ temp.span.childNodes[0].focus();
+// temp.span.childNodes[0].select();
+ temp.span.onclick=function (e){ (e||event).cancelBubble=true; return false; };
+ temp.span.className="";
+ temp.span.parentNode.className="";
+
+ var self=this;
+
+ temp.span.childNodes[0].onkeydown=function(e){
+ (e||event).cancelBubble=true;
+ }
+ temp.span.childNodes[0].onkeypress=function(e){
+ if (!e) e=window.event;
+ if (e.keyCode==13){
+ self._stopEdit(-1);
+ }
+ else if (e.keyCode==27){
+ self._editCell.span.childNodes[0].value=self._editCell._oldValue;
+ self._stopEdit(-1);
+ }
+ }
+ this.callEvent("onEdit",[1,id,this]);
+ }
+};
+//(c)dhtmlx ltd. www.dhtmlx.com
diff --git a/funcweb/funcweb/static/javascript/ext/dhtmlxtree_er.js b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_er.js
new file mode 100644
index 0000000..70d6302
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_er.js
@@ -0,0 +1,80 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+var _all_used_trees=new Array();
+dhtmlXTreeObject.prototype._createSelfA2=dhtmlXTreeObject.prototype._createSelf;
+dhtmlXTreeObject.prototype._createSelf=function(){
+ _all_used_trees[_all_used_trees.length]=this;
+ return this._createSelfA2();
+}
+
+window.onerror=function (a,b,c,d){
+ var d=document.createElement("DIV");
+ d.style.cssText="position:absolute; background-color:white; top:10px; left:10px; z-index:20; width:500px; border: 2px silver outset;";
+ var dh="<div style='width:100%; color:red; font-size:8pt; font-family:Arial; font-weight:bold; '>Javascript Error</div>";
+ dh+="<div style='width:100%; font-size:8pt; font-family:Arial; '>The next error ocured :<br/> <strong>"+a+"</strong> in <strong>"+b+"</strong> at line <strong>"+c+"</strong></div>";
+ dh+="<div style='width:100%; font-size:8pt; font-family:Arial; '>If you think that error can be caused by dhtmlxtree press the 'Generate report' button and send generated report to <a href='email:support@dhtmlx.com'>support@dhtmlx.com</a> </div>";
+ dh+="<input style='font-size:8pt; font-family:Arial; ' onclick='dhtmlxtreeReport(this)' type='button' value='Generate report'/><input style='font-size:8pt; font-family:Arial; ' type='button' value='Close' onclick='this.parentNode.parentNode.removeChild(this.parentNode);'/>";
+ dh+="<div/>";
+ d.innerHTML=dh;
+ document.body.appendChild(d);
+ return true;
+};
+
+function dhtmlxtreeErrorReport(a,b,c){
+ var str=a+" ["+b+"]";
+ if (a=='LoadXML')
+ {
+ str+="<br/>"+c[0].responseText+"</br>"+c[0].status;
+ }
+
+ window.onerror(str, "none", "none");
+}
+
+function dhtmlxtreeReport(node){
+ var that=node.parentNode;
+ that.lastChild.innerHTML="<textarea style='width:100%; height:300px;'></textarea>";
+ var rep=that.childNodes[1].innerHTML;
+ for (var a=0; a<_all_used_trees.length; a++){
+ var atree=_all_used_trees[a];
+ rep+="\n\n Tree "+a+"\n";
+ for (b in atree){
+ if (typeof(atree[b])=="function") continue;
+ rep+=b+"="+atree[b]+"\n";
+ }
+ rep+="---------------------\n";
+ if (atree.XMLLoader){
+ try{
+ var z=atree.XMLLoader.getXMLTopNode("tree")
+ if (document.all)
+ rep+=z.xml+"\n";
+ else{
+ var xmlSerializer = new XMLSerializer();
+ rep+=xmlSerializer.serializeToString(z)+"\n";
+ }
+ }
+ catch(e){
+ rep+="XML not recognised\n";
+ }
+ }
+
+ rep+="---------------------\n";
+ for (var i in atree._idpull){
+ var n=atree._idpull[i];
+ if (typeof(n)!='object') continue;
+ rep+="Node: "+n.id;
+ rep+=" Childs: "+n.childsCount;
+ for (var j=0; j<n.childsCount; j++)
+ rep+=" ch"+j+":"+n.childNodes[j].id;
+ rep+="\n";
+ }
+ }
+ that.lastChild.childNodes[0].value=rep;
+}
+
+dhtmlxError.catchError("ALL",dhtmlxtreeErrorReport);
+//(c)dhtmlx ltd. www.dhtmlx.com
diff --git a/funcweb/funcweb/static/javascript/ext/dhtmlxtree_json.js b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_json.js
new file mode 100644
index 0000000..4199512
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_json.js
@@ -0,0 +1,216 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+function jsonPointer(data,parent){
+ this.d=data;
+ this.dp=parent;
+}
+jsonPointer.prototype={
+ text:function(){ var afff=function(n){ var p=[]; for(var i=0; i<n.length; i++) p.push("{"+sfff(n[i])+"}"); return p.join(","); }; var sfff=function(n){ var p=[]; for (var a in n) if (typeof(n[a])=="object"){ if (a.length) p.push(a+":["+afff(n[a])+"]"); else p.push(a+":{"+sfff(n[a])+"}"); }else p.push(a+':"'+n[a]+'"'); return p.join(","); }; return "{"+sfff(this.d)+"}"; },
+ get:function(name){return this.d[name]; },
+ exists:function(){return !!this.d },
+ content:function(){return this.d.content; },
+ each:function(name,f,t){ var a=this.d[name]; var c=new jsonPointer(); if (a) for (var i=0; i<a.length; i++) { c.d=a[i]; f.apply(t,[c,i]); } },
+ get_all:function(){ return this.d; },
+ sub:function(name){ return new jsonPointer(this.d[name],this.d) },
+ sub_exists:function(name){ return !!this.d[name]; },
+ each_x:function(name,rule,f,t,i){ var a=this.d[name]; var c=new jsonPointer(0,this.d); if (a) for (i=i||0; i<a.length; i++) if (a[i][rule]) { c.d=a[i]; if(f.apply(t,[c,i])==-1) return; } },
+ up:function(name){ return new jsonPointer(this.d.parentNode,this.d); },
+ set:function(name,val){ this.d[name]=val; },
+ clone:function(name){ return new jsonPointer(this.d,this.dp); },
+ through:function(name,rule,v,f,t){ var a=this.d[name]; if (a.length) for (var i=0; i<a.length; i++) { if (a[i][rule]!=null && a[i][rule]!="" && (!v || a[i][rule]==v )) { var c=new jsonPointer(a[i],this.d); f.apply(t,[c,i]); } var w=this.d; this.d=a[i]; if (this.sub_exists(name)) this.through(name,rule,v,f,t); this.d=w; } }
+}
+
+/**
+* @desc: load tree from js array file|stream
+* @type: public
+* @param: file - link to JSArray file
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadJSArrayFile=function(file,afterCall){
+ if (!this.parsCount) this.callEvent("onXLS",[this,this._ld_id]); this._ld_id=null; this.xmlstate=1;
+ var that=this;
+
+ this.XMLLoader=new dtmlXMLLoaderObject(function(){
+ eval("var z="+arguments[4].xmlDoc.responseText);
+ that.loadJSArray(z);
+ },this,true,this.no_cashe);
+ if (afterCall) this.XMLLoader.waitCall=afterCall;
+ this.XMLLoader.loadXML(file);
+ };
+
+/**
+* @desc: load tree from csv file|stream
+* @type: public
+* @param: file - link to CSV file
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadCSV=function(file,afterCall){
+ if (!this.parsCount) this.callEvent("onXLS",[this,this._ld_id]); this._ld_id=null; this.xmlstate=1;
+ var that=this;
+ this.XMLLoader=new dtmlXMLLoaderObject(function(){
+ that.loadCSVString(arguments[4].xmlDoc.responseText);
+ },this,true,this.no_cashe);
+ if (afterCall) this.XMLLoader.waitCall=afterCall;
+ this.XMLLoader.loadXML(file);
+ };
+
+/**
+* @desc: load tree from js array object
+* @type: public
+* @param: ar - js array
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.loadJSArray=function(ar,afterCall){
+ //array id,parentid,text
+ var z=[];
+ for (var i=0; i<ar.length; i++){
+ if (!z[ar[i][1]]) z[ar[i][1]]=[];
+ z[ar[i][1]].push({id:ar[i][0],text:ar[i][2]});
+ }
+
+ var top={id: this.rootId};
+ var f=function(top,f){
+ if (z[top.id]){
+ top.item=z[top.id];
+ for (var j=0; j<top.item.length; j++)
+ f(top.item[j],f);
+ }
+ }
+ f(top,f);
+ this.loadJSONObject(top,afterCall);
+}
+
+
+/**
+* @desc: load tree from csv string
+* @type: public
+* @param: csv - csv string
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.loadCSVString=function(csv,afterCall){
+ //array id,parentid,text
+ var z=[];
+ var ar=csv.split("\n");
+ for (var i=0; i<ar.length; i++){
+ var t=ar[i].split(",");
+ if (!z[t[1]]) z[t[1]]=[];
+ z[t[1]].push({id:t[0],text:t[2]});
+ }
+
+ var top={id: this.rootId};
+ var f=function(top,f){
+ if (z[top.id]){
+ top.item=z[top.id];
+ for (var j=0; j<top.item.length; j++)
+ f(top.item[j],f);
+ }
+ }
+ f(top,f);
+ this.loadJSONObject(top,afterCall);
+}
+
+
+/**
+* @desc: load tree from json object
+* @type: public
+* @param: json - json object
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadJSONObject=function(json,afterCall){
+ if (!this.parsCount) this.callEvent("onXLS",[this,null]);this.xmlstate=1;
+ var p=new jsonPointer(json);
+ this._parse(p);
+ this._p=p;
+ if (afterCall) afterCall();
+ };
+
+
+/**
+* @desc: load tree from json file
+* @type: public
+* @param: file - link to JSON file
+* @param: afterCall - function which will be called after xml loading
+* @topic: 0
+*/
+ dhtmlXTreeObject.prototype.loadJSON=function(file,afterCall){
+ if (!this.parsCount) this.callEvent("onXLS",[this,this._ld_id]); this._ld_id=null; this.xmlstate=1;
+ var that=this;
+
+ this.XMLLoader=new dtmlXMLLoaderObject(function(){
+ eval("var t="+arguments[4].xmlDoc.responseText);
+ var p=new jsonPointer(t);
+ that._parse(p);
+ that._p=p;
+ },this,true,this.no_cashe);
+
+ if (afterCall) this.XMLLoader.waitCall=afterCall;
+ this.XMLLoader.loadXML(file);
+ };
+
+
+/**
+* @desc: return tree as json string
+* @type: public
+* @topic: 0
+*/
+dhtmlXTreeObject.prototype.serializeTreeToJSON=function(){
+ var out=["{id:'"+this.rootId+"', item:["];
+ var p=[];
+ for (var i=0; i<this.htmlNode.childsCount; i++)
+ p.push(this._serializeItemJSON(this.htmlNode.childNodes[i]));
+ out.push(p.join(","));
+ out.push("]}");
+ return out.join("");
+};
+dhtmlXTreeObject.prototype._serializeItemJSON=function(itemNode){
+ var out=[];
+ if (itemNode.unParsed)
+ return (itemNode.unParsed.text());
+
+ if (this._selected.length)
+ var lid=this._selected[0].id;
+ else lid="";
+ var text=itemNode.span.innerHTML;
+
+ if (this._xescapeEntities)
+ for (var i=0; i<this._serEnts.length; i++)
+ text=text.replace(this._serEnts[i][2],this._serEnts[i][1]);
+
+ if (!this._xfullXML)
+ out.push('{ id:"'+itemNode.id+'", '+(this._getOpenState(itemNode)==1?' open:"1", ':'')+(lid==itemNode.id?' select:"1",':'')+' text:"'+text+'"'+( ((this.XMLsource)&&(itemNode.XMLload==0))?", child:\"1\" ":""));
+ else
+ out.push('{ id:"'+itemNode.id+'", '+(this._getOpenState(itemNode)==1?' open:"1", ':'')+(lid==itemNode.id?' select:"1",':'')+' text:"'+text+'", im0:"'+itemNode.images[0]+'", im1:"'+itemNode.images[1]+'", im2:"'+itemNode.images[2]+'" '+(itemNode.acolor?(', aCol:"'+itemNode.acolor+'" '):'')+(itemNode.scolor?(', sCol:"'+itemNode.scolor+'" '):'')+(itemNode.checkstate==1?', checked:"1" ':(itemNode.checkstate==2?', checked:"-1"':''))+(itemNode.closeable?', closeable:"1" ':''));
+
+ if ((this._xuserData)&&(itemNode._userdatalist))
+ {
+ out.push(", userdata:[");
+ var names=itemNode._userdatalist.split(",");
+ var p=[];
+ for (var i=0; i<names.length; i++)
+ p.push("{ name:\""+names[i]+"\" , content:\""+itemNode.userData["t_"+names[i]]+"\" }");
+ out.push(p.join(",")); out.push("]");
+ }
+
+ if (itemNode.childsCount){
+ out.push(", item:[");
+ var p=[];
+ for (var i=0; i<itemNode.childsCount; i++)
+ p.push(this._serializeItemJSON(itemNode.childNodes[i]));
+ out.push(p.join(","));
+ out.push("]\n");
+ }
+
+ out.push("}\n")
+ return out.join("");
+}
+//(c)dhtmlx ltd. www.dhtmlx.com \ No newline at end of file
diff --git a/funcweb/funcweb/static/javascript/ext/dhtmlxtree_start.js b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_start.js
new file mode 100644
index 0000000..3c930d8
--- /dev/null
+++ b/funcweb/funcweb/static/javascript/ext/dhtmlxtree_start.js
@@ -0,0 +1,101 @@
+//v.1.6 build 80512
+
+/*
+Copyright DHTMLX LTD. http://www.dhtmlx.com
+You allowed to use this component or parts of it under GPL terms
+To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
+*/
+function dhtmlXTreeFromHTML(obj){
+ if (typeof(obj)!="object")
+ obj=document.getElementById(obj);
+
+ var n=obj;
+ var id=n.id;
+ var cont="";
+
+ for (var j=0; j<obj.childNodes.length; j++)
+ if (obj.childNodes[j].nodeType=="1"){
+ if (obj.childNodes[j].tagName=="XMP"){
+ var cHead=obj.childNodes[j];
+ for (var m=0; m<cHead.childNodes.length; m++)
+ cont+=cHead.childNodes[m].data;
+
+ }
+ else if (obj.childNodes[j].tagName.toLowerCase()=="ul")
+ cont=dhx_li2trees(obj.childNodes[j],new Array(),0);
+ break;
+ }
+ obj.innerHTML="";
+
+
+ var t=new dhtmlXTreeObject(obj,"100%","100%",0);
+ var z_all=new Array();
+ for ( b in t )
+ z_all[b.toLowerCase()]=b;
+
+ var atr=obj.attributes;
+ for (var a=0; a<atr.length; a++)
+ if ((atr[a].name.indexOf("set")==0)||(atr[a].name.indexOf("enable")==0)){
+ var an=atr[a].name;
+ if (!t[an])
+ an=z_all[atr[a].name];
+ t[an].apply(t,atr[a].value.split(","));
+ }
+
+ if (typeof(cont)=="object"){
+ t.XMLloadingWarning=1;
+ for (var i=0; i<cont.length; i++){
+ var n=t.insertNewItem(cont[i][0],cont[i][3],cont[i][1]);
+ if (cont[i][2]) t._setCheck(n,cont[i][2]);
+ }
+ t.XMLloadingWarning=0;
+ t.lastLoadedXMLId=0;
+ t._redrawFrom(t);
+ }
+ else
+ t.loadXMLString("<tree id='0'>"+cont+"</tree>");
+ window[id]=t;
+ return t;
+}
+
+function dhx_init_trees(){
+ var z=document.getElementsByTagName("div");
+ for (var i=0; i<z.length; i++)
+ if (z[i].className=="dhtmlxTree")
+ dhtmlXTreeFromHTML(z[i])
+}
+
+function dhx_li2trees(tag,data,ind){
+ for (var i=0; i<tag.childNodes.length; i++){
+ var z=tag.childNodes[i];
+ if ((z.nodeType==1)&&(z.tagName.toLowerCase()=="li")){
+ var c=""; var ul=null;
+ var check=z.getAttribute("checked");
+ for (var j=0; j<z.childNodes.length; j++){
+ var zc=z.childNodes[j];
+ if (zc.nodeType==3) c+=zc.data;
+ else if (zc.tagName.toLowerCase()!="ul") c+=dhx_outer_html(zc);
+ else ul=zc;
+ }
+
+ data[data.length]=[ind,c,check,(z.id||(data.length+1))];
+ if (ul)
+ data=dhx_li2trees(ul,data,(z.id||data.length));
+ }
+ }
+ return data;
+}
+
+function dhx_outer_html(node){
+ if (node.outerHTML) return node.outerHTML;
+ var temp=document.createElement("DIV");
+ temp.appendChild(node.cloneNode(true));
+ temp=temp.innerHTML;
+ return temp;
+}
+
+if (window.addEventListener) window.addEventListener("load",dhx_init_trees,false);
+else if (window.attachEvent) window.attachEvent("onload",dhx_init_trees);
+//(c)dhtmlx ltd. www.dhtmlx.com
+
+
diff --git a/funcweb/funcweb/templates/master.html b/funcweb/funcweb/templates/master.html
index 51948fe..21df0f5 100644
--- a/funcweb/funcweb/templates/master.html
+++ b/funcweb/funcweb/templates/master.html
@@ -12,15 +12,27 @@
<link py:for="css in tg_css" py:strip="">${ET(css.display())}</link>
<script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ajax.js')}" />
<script type="text/javascript" src="${tg.url('/funcweb/static/javascript/utils.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/dhtmlxcommon.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/dhtmlxtree.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ext/dhtmlxtree_dragin.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ext/dhtmlxtree_ed.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ext/dhtmlxtree_er.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ext/dhtmlxtree_json.js')}" />
+ <script type="text/javascript" src="${tg.url('/funcweb/static/javascript/ext/dhtmlxtree_start.js')}" />
- <style type="text/css" media="screen">
+ <style type="text/css" media="screen">
@import url("/funcweb/static/css/style.css");
</style>
<style type="text/css" media="screen">
@import url("/funcweb/static/css/groupscss.css");
</style>
+ <style type="text/css" media="screen">
+ @import url("/funcweb/static/css/dhtmlxtree.css");
+ </style>
+
+
<link media="screen" href="/funcweb/static/css/expanding_form.css" type="text/css" rel="stylesheet"/>
<script src="${tg.url('/funcweb/static/javascript/expanding_form.js')}" type="text/javascript"/>
<script src="${tg.url('/funcweb/static/javascript/async_tools.js')}" type="text/javascript"/>