From: Subject: Geotech Forums - DBP2010 Date: Wed, 9 Aug 2006 00:58:32 +0200 MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_0000_01C6BB4E.EF542470"; type="text/html" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1807 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://72.14.221.104/search?q=cache:q9dUv7q98NcJ:www.thunting.com/geotech/forums/showthread.php4%3Ft%3D7559+DBP-2010&hl=cs&ct=clnk&cd=3 Geotech Forums - DBP2010
This = is G o = o g = l e's cache of = http://www.thunting.com/geotech/forums/showthread.php4?t=3D7= 559=20 as retrieved on 16 Aug 2005 05:39:14 GMT.
G o = o g = l e's cache is=20 the snapshot that we took of the page as we crawled the = web.
The=20 page may have changed since that time. Click here for the = current page without = highlighting.
This=20 cached page may reference images which are no longer = available.=20 Click here for the cached text only.
To link to or = bookmark=20 this page, use the following url:=20 = http://www.google.com/search?q=3Dcache:q9dUv7q98NcJ:www.thunting.co= m/geotech/forums/showthread.php4%3Ft%3D7559+DBP-2010&hl=3Dcs&ct=3D= clnk&cd=3D3

Google is neither affiliated with = the=20 authors of this page nor responsible for its=20 content.
These terms only=20 appear in links pointing to this page: dbp 2010 dbp2010=20 =

 

  Geotech=20 Forums > T= echnology=20 > T= ech=20 Forum
= DBP2010 =
User Name Remember=20 Me?
Password
=20
Register FAQ Members = List Calendar Search Today's=20 Posts Mark=20 Forums=20 Read


Thread=20 Tools Search=20 this Thread Display=20 Modes=20
  #1  
06-11-2003, 06:58 AM=20
C.Pruysers
Guest
 
Posts: n/a
3DDefault=20 DBP2010

Has anybody any experience in fine-tuning the DBP 2010 ? = Kees
=20
C.Pruysers
  #2  
06-12-2003, 01:58 AM=20
Michel
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

Hello,

There is a french forum discussion about a book = where=20 DBP2010 is=20 = described.

http://fr.groups.yahoo.com/group/ddm-elektor/

Th= is=20 book is a french translation of a original German one, who provide = very=20 good information about metal hunting.
One guy seems to got = excellent=20 results with this detector, and explain problem encountered, = adjustment,=20 coil winding etc ...

Regards,

Michel
=20
Michel
  #3  
06-12-2003, 08:46 AM=20
C.Pruysers
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

I built two DBP2010 dete3ctors . In the book however there is = nothing=20 said about adjusting the detector . Still works pretty good as it = is=20 though .I would like to adjust to specifications and those are not = given=20 in the book . The book is written so you will buy the kit from the = designer and that is not the right idea if you ask me . = Kees
=20
C.Pruysers
  #4  
06-12-2003, 11:21 AM=20
Chris
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

Hi Pruyser

I have the German version of the book. The = guide=20 line how to adjust the detector start at page 170 to 174. Which = language=20 version do you have? French, Dutch, English or German? Should I = send you=20 the German version?

Regards
Chris
=20
Chris
  #5  
06-12-2003, 11:54 AM=20
Michel
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

Hi,

I agree with you and as components are not = specifics, kit=20 package has not a real interrest.
I did'nt built it, I have = built PI-1=20 because it is widely open to experiment.
I have also a Digger = on my=20 table, which is absolutely unusable without an updated = software.

If=20 you have "The book", did you compare Tesoro Bandido schematic, = recently=20 published, and diagrams A1-A2 on pages 150 and 151 (french=20 version)?
Regards,

Michel
=20
Michel
  #6  
06-12-2003, 02:07 PM=20
Philippe
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

Answer :
Schematic A2 is a tresoro Eldorado = ;o)
hoooowwww you=20 win !!!!!

I have the book in french .
There is a little = mistake=20 on the placement of the component drawing 3.35 page 130 ( french=20 version):
between the two pads near P1 and P2 there is wire : = you can=20 see it on the drawing 3.34 page 128 french=20 version).
regards
PhilippeM
=20
Philippe
  #7  
06-12-2003, 02:17 PM=20
C.Pruysers
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

Chris . I have the Dutch versian of the book . There is some = info on=20 starting the detector but that is not what I am looking for . I = don't=20 think there is a proper adjustment written by the designer . = Kees
=20
C.Pruysers
  #8  
03-31-2004, 12:00 AM=20
Edwin J. Fowler
Guest
 
Posts: n/a
3DDefault=20 Re: DBP2010

I was reading a forum on mods, and think you have a french = book about=20 and tesoro eldorado. I need a little help...I noticed that there = are 3=20 test point on the PCB, and a small trim-pot. can you tell me what = check=20 can be made using the test points, and the=20 trim-pot?

thanks.

ejf
=20
Edwin J. = Fowler

=AB Previous=20 Thread | Next=20 Thread =BB

Thread Tools Search this Thread
3D"Email Email=20 this Page
=20 Search this = Thread:

Advanced=20 Search
Display Modes
3D"Linear Linear Mode
3D"Hybrid Switch=20 to Hybrid Mode
3D"Threaded Switch=20 to Threaded=20 Mode

Posting Rules
You may post new threads
You may post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is=20 Off
=20 Forum=20 Jump
=20 =



All times are GMT. The time now is = 05:39 AM.

Contact = Us - Geotech - = Archiv= e=20 - Top=20

Powered by: = vBulletin=20 Version 3.0.7
Copyright =A92000 - 2005, Jelsoft Enterprises Ltd.
------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/pages/images/forum_title1.jpg /9j/4AAQSkZJRgABAgEASABIAAD//gEC2EVwBjwDAAA8AwAA4AQAANYCAADgBAAAjAoAANQDAADU AwAAjAoAAIAaAACqCgAArAgAAKoKAACAEQAAiiEAAAwTAAD6EAAA+hAAAAwTAACKIQAA3DAAAAQY AADgEwAADBMAAOATAAAEGAAA3DAAAKZfAAAyIwAArBkAAFwWAABcFgAArBkAADIjAACmXwAAJkUA AEQlAACSHAAAFhoAAJIcAABEJQAAJkUAAEpJAABoKQAAiiEAAIohAABoKQAASkkAAJJRAADcMAAA pioAANwwAACSUQAApl8AABw+AAAcPgAApl8AACZ6AABEWgAAJnoAADixAAA4sQAA0FsBAP/AABEI AEsA/wMBEQACEQEDEQH/2wCEAAgFBgcGBQgHBwcJCQgKDRUODQsLDRoSFA8VHxshIB4bHh0iJzEq IiQvJR0eKzsrLzM1Nzg3ISk9QTw2QTE2NzUBCQkJDQsNGQ4OGTUjHiMjNTU1NTU1NTU1NTU1NTU1 NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1Nf/EAaIAAAEFAQEBAQEBAAAAAAAAAAAB AgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4 eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi 4+Tl5ufo6erx8vP09fb3+Pn6AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsRAAIBAgQEAwQH BQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJico KSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A9/oAKACgBCcUAVrq/tLJS91cwwKOd0sioP1NAGcnjDw07hF8QaUW6AC7jyfw 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 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/misc/navbits_start.gif R0lGODlhDwAPAPeWANLt/4WZ64GV5oea7X6S4tTu/32R4IeNpMfj/9PV5Iqc7oWY64qf8dfy/8vO 3ICT48jj/2uA2o6XvGt/12J4y87n/5an/5Wm/c3m/+7v+3WN5YGS41hpt3eN4nmN3MvQ54eZ63qN 3Mfg/9Lu/8Ld/7a5yXKG0sXe/+Hi7tPq/2J5x73Az2+D0fHy/vHx/JCj93iN3YSX6dr4/2yB2LK7 32Z4zWBxwoyUudrz/7y9x4ib9M7o/6iw0HqL4HaK2oGV5H6S4Y2d1I2WwM3m9tbX4+zs98XI3M/r /5uhuXuQ4dDp/9n0/4OW53aJ1naJ1+D6/2yA0YCV5tfz/4mc746g887m/3mN24eQtbnE7Yib7ri9 1naK146h9Njy/6a7321/1vLz/n2T6nGG1HSI1Nba732Q4IOMsWd9xYiYyJ2v2X6S5JGZvq2zzVdo soyWvEBNiWBxue3u+oGT8MDL6N33/2yB0Yuf8sni/2Z3xYSZ8XqO3JKo2MbJ2aO53oyf+ZafvHSH 0szo/29/yHiM2YKW55CbtpCj/F5zwt75/5uw2ouUu9Ht/5iq09LV48XK4GJ4yLS92vT0/tPV5bC1 yVZjmZ6w2fX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJYALAAAAAAPAA8A QAjJAC0JHEiwoKUgdQYZEBBgip0LeDjYiICCIJhFAAAUKIChipIlPATGOSTGB4wkaqIsGPCGksE5 UhDtKbGiUQIHRLBo6BAmjw4/hiz0GNIFRyAjAs+w2KKHgIAYIKjA+QIlksGrV138KcQHq8AWJ+6I 2DHiCAQEMtBMQvLBEaREaSox8tKgQgoAWjKoGGMFCJMBDF7I6fOEDglJlshQaOKBAKEAWbhsaFNj RhGBNB6ZcBKizIMfCgRNAESQjZkrN9ZIcKNIyIEclgICADs= ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/misc/navbits_finallink.gif R0lGODlhHgAPAPeYAAAAAP///4yg8o+j94md8PLz/pSo/5Km+4aEg46j94ea6o2g8Y2WurK404+X u4uf8Yqh95uw/19lmbO8z1tmleH//4GZ5oug9Iec8IV4qoeb7JCl+vT//0tYhu7u+2p90+3u+5Kn /sDD1JCn/vHx/HyQ4Zuaoo2Xqp6y/4Wa7o2i9eTk7o+k+I+YvJCq/3uT7drb5XeO5bq0somSuImS t7rE2JCPjiMjI6mpsYec7rW0q4OY7MnP4YN7mIR7pu/v+ZSn+7Cvq3B1mEZTgZOesJ6u7EdUlZOK vO///9LS2q7F/42j/oKFlbm5wb+9saC4/4ib7vL//5KfsFRfnXZsoIWb9MXJ1crN24KX7a3E/4WZ 6pGk/H6T5Gp7v6e//3KK34ic7LXDwL7L+4iClres077A0cfFwdXW4DdNuZCk9nSP/2R8zLvE64OX 6X+V8Gdkk7rR07XM4L3D06myxMnIxLG2xIib74GGm8nL2puz//H//8jV7JOn+3uS46itv5ir/46i +q2yxJCZvXB9wmxpj93d3ome8YyMkIaa7JWq/dre9I+YwKeinsDG2Iifvoyi9oqe8KG4/8TIyIqU uaC2/6ixxIqf8cPJ2/X1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJgALAAAAAAeAA8A QAjoADEJHAhgoMGDCBMaLMgQU8EbmIpUecRiwwE+QCIM6nHkzRmEBRUOLBAljAxGAQo5mZKljkiF Hr5gSYGBgB0oDyAZGZIw5EtMezgEcGQiwKEyVmCAVCjGRZ4nlFBE8qKkhI0gOtaI+ImQy44cBCwJ ELBghIQMHX5wXcv2J4lKc/BgwpGkbcICFfTAkRQgAB00SIi05dHokpwacSackOIHgRkmagK1BeEG AqAtIQwY+LNEyBgyFK7YVfTC0AUVCQakSdSHkA8qK+xiYhOjjRZEGsAoGNDlgwXZAhvMcDCJhqAW DBbdaYIpIAA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/reply.gif R0lGODlhbgAaAPf/AGh0iIycuWh9oefr84WKlvjOpXWRxFVieYup3WR5ne37/rzCypy67KuqqoeS qnyZy0xhhqyxuoh7ebGVfldtk/T0/W6NxpSbpXSJrYGczDRIa3qa0GN1lEFWemyDqv///4uRm1xx lWZ7oNPW2quzxOTy/MnO04Oh1brD0t3i7MLGy6Osu/D//z1SdrO7zIKOqtvd4XF5h3GGqnmPs1l1 pcOji+Dj7Vttioqk0+vs7s7Q1JOdspGguqGrwZikvJV8bu3x+uXo7PHy9JSx5NHa47G1u2F2msbM 1GqEsZm05GFrecvS27q+wZuks46s4bS7w1dRTkVZfZ+87n+KqUVRZThNcaqkmt7r+LycgXGRyJup wYKbx9HT132WwZyhpdi2ltba3neMsElegtna3FFmit7h5VJjgb7K1MTJzHx3eeLk53qRubi5vPDI nNbj7Oj2/nCPxnqVxYWk2LO5u6WqsFRpjV5zmExefEtacua+nKOIeFxqhYeZuHmSvWl8nXaNtXuG mm2JvGyBpXSOu3+Ag/f4+HqUwjtGWJSZn3iSwWJmcMrLz4im2tLW5GB7q2SBtJ+ou3SCmd3o7IqV r5Cs3Nnc6EtmlXaUyIagznKKspKu4nN+kcPJ2Wx6k2qHu6awwsDG1H6FkXaWzdPh47a+0NGsiPn/ /26Dp2RvgneQvY6ZtHSLsfT+/nVxb3+Yw29iWm+Nwubz9n2Kn22OyJOMhFBedn+MonOFo3+e0myL waiusu/4+K22yG6Bopq36XmXyvj6+sioj3qQtoSYsy1CZlFZZ4uLj2yNxqivu8rO3f39/T9MYa+5 y62QdbS1ttKvk/3//32YxnySuWaArXqTvpehsH2UvFdph1ljcWuKwG+An19wjmuApG2CpnOTymp/ oldngZa05/Dv8NSxjo2n1oWXt6C+8Zax4CtAZLuwoZWVjvv6+/37+7G4xmJbVmx0goFvasDCyLy/ xmaEuGZ4l2+HsmyMxGGAtKGEanOMtz9YgHN/l0FTcYGLmUhXb/X1/yH5BAEAAP8ALAAAAABuABoA QAj/AP8BUSHpyAImT+ZEoKPLywWHFyD1mDhRi0UtPELJmsTDhw8eIEOK5BGgpMmTAfjwSamypcuW 5V7KnNnSZMdPzDil+MezJ88K7d4tUfHhXZAP0EyxUBBL0qhRS5ZYgVcgz7MaE1AlyJSqTx8Un1aI nXRDwB9q1LyiXctWiyo/mah1mUuKl9gVnziIWNXFVV9XgF1tGUx4y4cPgL79ndulz6B89ZBMc0SD AoQqO/8BvYOIk7gcBD4EUTFikQ5ahBCJg8aKxZltMjDIiI2hNobDdMBxqy3Dx+HDMPwd+f0hQi0X v5Ht+SZjwAc1eOj5/iAk0jriIEYQ/wCi1uEY1xIM//9wyIwRI3ZCUKgDQUyUFuhI+exZycEebIeV CWHSTwkVDRpU0UILHRRo4IEIJqjgggw2aGAUDio4YAsQNDEfTyaM0MQHCyjywVNPLcGKAku98QYL HATiARR6tFEKFhPgowgZSBjwyy8P4JgBLjye4KMccjDCCAJEIuDEkZoMoeQQ4YTjy5MMMCDFlOZU aaU5U04ZJQNPNqmJE4ycgMsDlxgASyCezHMPZZb4VEEnd1SwwgfIFPGBDjpwsUg8ixQxhwRVWZHG O9t8E8YMiCaKGyoLHBYaeXt88gEMOnxQxCG1gHPDYcUcQM8tMwhjwwc5gPDEYahMMimmc+piAnd4 cP/w3WGK7HDYMo0WgYcftZ3yjQgh1BGFBpv89A8yBwABygfMgPEBF1zQYowzMCiggIlXXAHCDSII 0K0A4IYr7jcCfGPuudykK8i63AjSzbunnAJvvO++K0i653qbQALoheCveuuRQUZ77kVhsMEFTthC FcSg0FMF8QwQmiRnHHHGxWeggDEK29gxjSdZeONNJlDAk8eLzaDiyCUbtOwyLi7HLHPLotQssigi 56xzFjzzDEfPQP8Mx9BAZ/Gz0UMPbYE9nkxy4QhetKOGKU2YYoIxdBShSxq6gIDIUqx08ooeBXwR DBbNpGGGAIMk4vbbcMeRiCFx0B3H3XhHo/cDD2T/4LffmASOCQ6Ek2M4OZQkfs7iSTyZxOOPn5M4 OThgkkEcqQQimSOUUWAJBw/bcsAAEXwQSqVooMGECkWUscACRbRSQ9lnS3CAH38Is8bujuLhwGEX gMNLGa4DAhsPRxAfQTW4NeGAHzNIM6oJVNwgxAdj1NILCWCooQIgHPDCiwOfqMFFJ/R8RwIJnXzz Bwok2PLNKqvI4IEARlimwQ4/yXLHCCT4gApCkwNxsCM/VjCGqySxi030IgxhwAAEJxiGRcniBvRg xgfKsAwO8OAwh0AFJLTzgUdhAxy9qE0YUvCBRVDhMGqgwpyCUIwYRGIfN9AOImrhh6M8Sgl74AV1 /56zjG286xv8ChYEOqABQBjrDu9IQRlKWAhg6GAMY6AFCLzQpyMQ4QpvWE68xkjGMpJREOZqVzfu ZS53rTFc31gXu7jxDXzRkVwi2JcIjuIFPITgPOexQ3p6cCt/kKEOAiMYhBZWhYfxBBJ1OMAHlvCq DzSAizlYColY8AY3LMAM/wqBIEcJSCPsS48iSOW3wvWtVJ6SX6UcZSgpsB5EDkyRCEuYwhhZhV5W AUAAQgckfAIENgygGm5IgSTcwMxmuoEImxiGIzzhiUDkIhewyAUSoPCKGNwgBI6YRzbsYY9jHKOc 5jTn0mZhDwuc0x6zOIY7ZzELC9jTnvW0QD33Sf/PeNLTnkqbBRzu2U8LwKGf9TxGNjxRDwwEwAYX +sciggAC7ihCKSzIKAtiwdFYWEsBIoAFHOoBhR+4CG0ySkAceIQLH/0ISEEqkpGORNOa0vRLNqWp TIkkJCG5VEw8atkvRHEJpGUzG2pa0yfmowMmfGIXYPDQHLzghQh4QQGm4Oi1WEAPD7iDbOPAih5a YYZpDMIAaDXAJS6BtzjgiG99+5vfWnoCHAiJHERKHCU0kaTHPckXUsqSYAUbJV8kYQiUQMAJLmcA ND3iEZShgSVc4BMYhAIUXPjAJnbBijLsIhacZQVSTMGKXbRCAl+QgCIOsAcAGMEDg0jFIOpBW9r/ 5iMVbzOE2wyhW97SzRDUSEUqDNGFaMzFEGv4g3L/sIYuEAZwghscDig3XUxIQxhbGJzlthANQ6QC MpurjCX08bAdKKESp4qBs1jHBBMUQR6rW4AuTNaGZ9TODIJgLu+2kwM8iOAPGGjXKfT7BxmsSwbf gc0fpGGNo2ynH9v4gzUKLAgZCEMaf1hFhmezhsMoYRsYYK411lCbTOQjE/XwgAjydxnKaiYStQBC AEHAhhbqQAWLWB0TWKEOslmlBoQwgx/CIIwiF/kwIDjANxx1lEI4S7Nz+sAIYLCdD5CAA2GQ3p2o QI+joKEWzjJB6T6ACipPqhCH8cdhsJGDD8jj/wDT8RT9MNAN/OnPiZrZxx2EMCcinGoEKogHE0zD BAkEIx10QAM4/CADCiLqUFXuB/O4QAU/fPADMSDOmz28jUMhalTEKUYthLidEbzqAge4xRRD4eE9 HIbVH1DCNU4hg1NwY8UUIAMTi6WZHdyhCKRYBwwe9QFliEMNhSaEMZ6Q0WrQwzbQrg2SeRibGSAZ AEeJgA4iAABUtLmiH9AFABzAgVNggIWUjgQMX/iBC6BiEypognbooIQNfWAZHjZDL34TCjwYQQD8 Sg973kOMavykEncIRSOCUIjQFGIEI+ACG9IwLROYwAtueMMNZsPxjveCAxzwA61ncwo/OEAW2/+4 Qci1YQtZXGMbCfgGyy/IAW74igPb4EAdE5DynN9CFoAwww2oTIBaBP0agrzBNf54GC8sY+m0RGR7 IFQFdEBUM//YBjYGoJ0VtHkMMGBCGrzQAGe1pgQlAAA97sX2dKnr7W6Pu9zVdS+31z3udXT7ucgF LhG8wBbbQHq/AFaHW0RiD/wQAwQIVrAODEgDoDNWBSBgBvygILNCyEEr2DAGYJSoBFdwwxPMAMtX vlKVqQTX3tM1r3iR3IzyWqPevZXHgPurlomcOoR0OSBfBsj3Ef2HA+4AiGUoAThqyME6SPsGFPQD G8uoQhTEQH3FL/76Asu+9rfP/exf//uMr/53wcafywg5XmG91AAxthHRCri/Av8YABt0oIv3xuMI S2iE/huxhGQkgxOcAAoCiAIESAqk4AIuwAzMID7rQwKf8IAUAQkS6BEUyAM7sAOqkIEZOAkcOAkO 8IEO8AIiKIJTUIImeIIoOAUi6ACToAo+QAKgcHXzERAAOw== ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/statusicon/post_old.gif R0lGODlhCgALAOZJADtDbJep14aWzLzT77LI6YGO1b3U8Ka64bzT7tDp/8/o/4CN1HB/kbzS7nWE mc7n/8jg/3uLodHr/1NdioSVqpao1XSDmG99lai98CkzQ29+kU9Zc7HH6Ka468Pb/7rQ+1RghLHH 51xnfJao1uT//258jaW54JOl34eVyoWVy7rR7bvS7kNMeLrR7svl/0VMcztCa0ZQbXCAk8rk/3mK niQqQ2d2kF9siqW5319tfkFJdicyR9jz/y03SbXL9pao5MTc+bvR7SowTtr2/4yb6I+f7TtCbElT ZFVheENbigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAEAAEkALAAAAAAKAAsAQAdngEcRGgwMMjQ7SUkgJykCjwIoPzEODysDmAMtEjkWD0EICA0qMy49 Nj4mB6sHOB9IQjpGALQAMCw1FCQKCb08QBlJDgoIBsYGDUMlFx4cBM8EIRAiNx0jAdgBFRgbE0QL BeEFC0UvgQA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/icons/icon1.gif R0lGODlhEAAQAPeVAP////b298vM1cDAx8fH0M/Q187T2dDU3HyBgqSnp87S2crL09bZ3vb29unp 62tvcH2Cgdre5P7+/dfb6M7R38vM06Onps3R3NHW4sHDyMPDy4uPkTI1NYmLlFZYXb+/yPb4+OPk 6NHR1dbb4+Dh5ezs7+Hk6ycpKRQWFiIlJebp6szR2dfY3qamrOfq7Pj3+UhMTcTH1N3d5svNzcXI yO7u783N1crL1GVmbc7P2srL2Tg6PM/S4LG0wNLS2ubn6uzr8HV5evPy9NPY3uPl483N0j8/RNfa 2tja5MvM0Obm7RobHaqtuCssL66ttry+yEFCR+bp6dDU3dXW29vf5W9xePz9/ZKUncXFzFpfX8/R 1/Dx9OHi5dfY4L6+xvDw8Nzc383S283N18/O18rK0cjI0N/i8UJDR9LT3ZqaoNjZ4PTy9Lm5wT9B QtDQ0qOlsBkcHeDj8vz8/93d4t7c4/79/sbI1aWlqtDS1sjKzTQ4OdLT1tPY5P7+/qKlr7m8yPX1 9dTV2srK0szL1tbZ6B8gItrf6eDj5//+/9LW3P37/CorLvT09hEREoaIkdbW3O7t7svM2NHW3s7P 1Pz8/OHk8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJUALAAAAAAQABAA AAjlACsZOmSCSoQhB0ZIkqLATKWHbxAA2MMFTAkAGDFieFjpCgcAae44aZEniRuMFzj2SAGgxpcA ayAxaoBxBUc7hYgAmEMihJpALBYAMMCR0CIaQD4MGDCJQIExABhwrATFghxBRbBoYAMCo4qpHiAA 8ELGBp1HgDJOrZIFQB2MVgL8wNMHwASOHdoAqDBFgIAnZYRQAhCGo58TAMTcGNTFhxYRGRQl4vgH BQA0kXTkIOAAEUYXHHk0AiADiZItLyRkBBCH45Ioq2MD4MOxyYzVRxI82AEnxlQjQTbA0HMGhyMm FKYGBAA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/quote.gif R0lGODlhRgAWAPf/AIup3ayxu6ugklx2ptzd40ZcgYyJiXOUzt23mO7v+qSkp4KcyVtynM/R1rGU eXKKtIp8dmV7of///9PW2ayzwURZfdLT1lxxlXSOunmFosqpkFtsjPHy/L3BxpuluzxRdczP3by8 xHqb1YWSq2F2mlVqjXd+iDVIa0xeesnJ0UxhhHuIpY6Wo+rr7OHh5Wh9oSg5VZOw43WKrqOruayu spCu5Nra3rS2uYiVrWV6nXqVwqWpsWuApFNkglhuk52dmn2aza+ytUNSa46s4MrMzYqMk/Lx8XGG qvX29oWi1ZShudbY22WCtnqTvXR/kteykdjZ45Kt3XuRtqGns0FWemt5lGl1im6EqaG+8M3P0ThO cZufouXl55ucouXm6mlcWM3N1aXB9IyTnXWRw5CeuMCpkmZ/qm1+mcrM0pm05XaQvWNtfHSV0GRy jL2/zZSbq5267JKguFFmieTl7cLExkpkku7t8Yul1ZqBcJOdtLuZgKauwIKOqPr5+19VUZqks2Zx hOfBmZaYn7i7vsDCzIyXsMbJzo6ZrVlkdIel28fI0VxqfpadppWesXaCl256juPj6rW4uufp7VZp hW6Gr5OVm7+ffz5UeMLEylJgcc+sjLW3v/78+n2CjX+JnZq26X2GlpCasoin2+Pj42uIvcTG0XmO smqFs3mRu3ODocTFy2J4nGmCq8bHzmB9sv/SqXmWyGB0l8PFzVJebXtyb/r8+/n3+PDy8pehtVFi f1pqg2J3m2aBruvt+HqGm+zs9m+DqOvs9//+/fL29vDt8EJVdvv8/Pj394iRom6MwW6Qy9+6lJif q46q2Cs/Y8TJ2P39/MOhiP79/My2oMnK1MzM18/T4N/g42uHu4Gf1H+Yxc/P2tLV4PHx9HyOrre7 xbG4ynGPwdrd6Wx4g3iZ03mX1OLl41tjbk1cb2eDsIagzvz7+2WFuefn8HWCmXiPuJaZlsPDzcTC y2Bvipeku+Hj75+ou+3GpPfNpj9Qb2R5m+nq8Ovr9aGUiLrC0/X1/yH5BAEAAP8ALAAAAABGABYA QAj/AP8J/EXHQhY6CAdFuhGERpBIg34J/JdlE5R2HCZq3Mixo8ePAn3wSleAUzcwS1KkkNWhgYQJ tPAt0xANUYkHanSo4cUAl70ZqQbk1AZkgVF1SO/cacY0SrMFGBZESUM1RpQ76mBhOGVmwIA6z/5t WKWPBDoJc6ptA2Fgyw4kEuJK4ITiypEjwICtqrJEroQpKkpQkOtCwrV8AfwGQDHPr5VjfmVVkKOi ApUTjTRukTCKCxc7xOwc6+N33JcngaI5wHMOlBIP9OgpmU07ThwltnPHIcO7t28ytmnT2wMOhMY9 F15cuSBIwi0vXBqgKQXBQJEskBfJkMJdCom+Fi40/5HhK+6iuJ52TZGQhYUEIyhQGJHAQgz7E+cl wYCxQ0KHHDIA88IFVPQgEBQbqOAMEXFJM8oENHQyy37OnPABFQVkqOGGBVDhYQUghmiZhx5eYuKJ KH7wgYkqfqCFFifMs1E7kUjQCQ0KKBCCX3GtA8Y/mPihyTKW6GEAGgmApOSSH9XjChMoSODFJt+0 koIb8qhigSJ20KJHGWugMAkJpwCRiCiiAADAEGzWUEMMbsb5JpxwxjmEmqIkkkgS2QABBCzhhJMM Key4gsM/IDBgBiVyMLhJCIRgQsASkCigxytl9DOLD1eg0gQqD1QR1zcVtBFXBz4UMoIMD3iDwwiU xP9yyAwzHHKBPptIYIMTOFxwBgV7/EECJe88QIkZDBRwhhs+6PMCCWtIwA01KWwDhQFd7EDDJjRI wEgspsgg7gvrSYDCCyX0JwEMcT2CwhsSGIKGBDuUkK4EDdhnAQozSMAFIo88YoUVF0QQiw8qaCEj LiTos4oQ0Mj1ww1LwMWjE7G8oLHGPPCQwyQtyIVDxzzYddcVwHi8SgQ57ELCBSVQRlkBKl5ChYov avGBRnNMIAFpPPJIgECG+OGAAAqkAElGTDbt9D/8dCtIJIJAUYkgqhTBYFyKYHIakatVsk0CHJRN dgJoJ9BL2mkH08vbcMe9NttMd+TPALoEbQwStzz/V8stQgaiiSUO5DLAASIkLgI5ipNDDhvlsCH5 5JMfYPkBbFyOOeaUH6AMNitMlAoTrlQggQsptIJJCFkQkEI81cCDxysIaKLHJGaMAYufsIwRzhhA JJFEmmzGYHwan8ABBxbMh+G888xjAccnMQCQBKDYkP7VP8EwwMspKnCBhDw2TIBGtYMMQwsC9zyh ASJyUPJpE2Y0wqMNq2CgfxM6oOKpNtpQwwMe0ASoDOYarFiAOhbQBAzkpAkCTEcEknUIcDBAOSUI QtAkYA4ITOMHg9jXdrrDg8EIQwVSiMAf4pKPuIzgBQfMRcjkIglP8Gg9xiBAXM7AqisMqADzoEDB /3gQCxNIwEpLUAQUbmCCG8yHNCbggSmmaIpY9KUBPpDCFRwRl2hJwBMkWI+8JMAMjTEDX+5Zghz6 xSMXxMKHsSjBB3oAhWY9CxGnUws3goAtG9hCLkSQg7hkgJdJxMUFVoDXX4oRFwKwwA7sAUVcnOCE uCDjjC04gRDiEgBAAGIGS1ABzFRQgBO4Qyy70McuNimJbexjCQbIwgz9go4ckKxju+iBLtbDBUAg 4wxymIcveoCCwKyiBLlwhCNyUYJVXKACThAYFbSAgoGdQAsVKIBlPuAMawikBCQgQT5GEZdR/MAG 84kLEjpggkzk4gK72MUqchABju1CBVVwhCc2QGPPHKxiFS4jQSxicQEf2IsypAQRFS7RIhe96AQn cMYhNsIBQgShA2LoRCc8gYw3NMIDHrAHSOmBC1zkIQ+hSGkhVoqDlo7gpXyIaUxXQNOariADOM2p TnO6ghGEYg/iEAgHAgIAOw== ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/printer.gif R0lGODlhFQARAPfJAP///6y6v6Wenqu6v4WEjZWUqJaVqIKBjWZkasvHx6+mp7S1vbS0vrC6wHZ1 foiJlYqJlKKXmK27wcLJzsHIzdPNzcC61dbV2IOCkLWtrdTR0oOCieHg5Z2ZsbWur+Dg4c3Kyunn 7Z2csa67wHZ2fL+7uuvl9e7u8aaluai1uqmyucvV2vP19n9+ho+Om5Scouzr7pGQnMa+vn59hYqJ keTj6Y2Ml6ekvLXDyIaFlP3+/miJZvj3/IF4kK6oqaexuIiIjuHg55GMoqy7wHt5hXV0e8jExGps cG1sdMLBy2podY2NmI6KnOnt7qunwcfGz6KZmb28zpuaprCnp31/iJWVobu9wrS0u+rn57KqqWhn cpuZq2tsdJSUppKRmJ+orNjW1snBwpqgpent73xvjNLR11/zN5KRom//LYWFjMzW2YqJm4uKmtvd 38K8vaGprbC7wZGQmtLOzoGAi+Lg4LCvyPz9/e7t89fS0quqtujn76KgtaCnpo2MmvX0+JefpZCO n+Pk5o6NlYiNk2ppcrOzvrisrejq7OTi7s7N1JCQlpmfp83W2YqQmqu5voqAl9DJyp+ep7PAxdHR 0/3+/Y+Ol9DX24GAjna1Yau4vsvGx+vn5ouKnOvq8Jubqs7JyKCpr725u+rq6vf39ubm5t/f46+8 weXq6+zr65SEperq7YmHl5KRodHZ3Nzh5Le1wdfV3tze4YiHmKCrserp8K+kpbG/xI2MlXx/heXh 4f7///7+/rS9wmZlbOTf35CPmaCXmaGnq3JxfYiHkdbT1IGAkI+On5mjqOrp76y7wAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMkALAAAAAAVABEA QAj/AJMJTCahFSNLrsYcsrNioMOBjTwtKMRgEoCLuk7ACEGLh59SEx4KXETlTwqRKB3y2lTBFxZU pACoSRkgB6AuTjqgwZRqCYRhBDa0KELii0g4ADSBCBPKB5gmKUUGqhVhioJPeFjQ5FQARRQ9JhDB SpJHSgwblQQpCubwQTFje4SQ6UFEGKFeuI45ivohi4cSGojt0oEjqsNYGYAJEEDnoi3DAjNRkpPA DRQjok5FHTKigYo2MgxBynVxlBUKkh7+kPXqSZkLqoLUQHanE4dEVyJ5ETNwwKozBupY4FOFSR8X cX7dopEGyJuBAS6xYXVji5kdjw7MmeEACYIjoEw9DXyBQcQaJVq4DJqVMiAAOw== ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/sendtofriend.gif R0lGODlhFQARAPfNAOjq/+fo/+fp/+jp/+Xo/9rm/9zm/9Lh/Nnl/+To/+bo/9vm/+fn/+Hn/+np /87g+93m/9Li/LG/xLC/xLLBxuzs/9Hh/Mrg+eLn/+Dn//aZjGFqdLXDybnGy7/S3/Lw/7TDyLLB x+bo/erq/7G/xezw/87T6Mne+rnFytDY3NLZ3v9SKMzV3s/h+9bk/8vg+fp7Yc7h+5GZqP9PI8fg +sTd8tjf6szg+tfc7VZYX7TA1NXd6c/g+9La5ODm/tHb59LZ50dJTuzd7sjX7UBCR0BDSM7a5aGo t7fN28HM0Njk/8ng+tfi/8jg+e7u+V5lbf1pRtfj/5igrsbV3+7J0NTa57zN1+Dk/8vU3Ht/ienr /8Pd9+Xm/qquvrvL1MHW5uHj98bS6s3f+9vg5s3b9MnR1tri+HN7h0tPVd/m/3N6hs3g+rjFy8Tf +cXf+K69wuTn/1dbY9Pi/LbEyfHx/sjS6FtcY87W3M3U6e/u/8nW4q++w8Hc+MzY5LjIz83e+tnm /8Pd9MLd+Ojo/8ff+lBSWMbg+bnHzbTCx8TY8Ofq/9/j6sTT3evp/9Hd9cbf+pudqcHR2tTi/Z+s vfePfs/e9mNncObp+M/Z8LfGzWpud9je48Ld+cne+err/+jq8vxwT76/z9bj/+nr89Pi/bPBx+Tl ++/Hztng6+Dm/3F5g2Rocr7K0cPc8b3Izu3t/9Xj/tDh+77L4dvj/8fW38LX6OPo/7XEy+Pn//5e N6y7zbHAxdHX46y7wMvg+tHg/sDS6enq/8fS2uLl7eTm+sPO1tHg/cnS1sPd9bTCyMfY77/T4P9N Iay7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAM0ALAAAAAAVABEA QAj/AJsJHEiwmQQUSY6l2LTo0x2ByX5kaJDBDJEgmo5gWlAAAQIlUX4dGggCya2CKFFiuaQFAAAw oUS4dDmgZi5mVFgInDDFWIQDlVQ9OTMJ2IsmjwTVWOZnIBBiFRqNcCBgUICrVxkwADUDRhWBbGwI GCBAQAAFBAgkwIXBR4NUaWYVE0ihD4ICgBytQhNHhqwDByzE4vGgEwWBbyKd8HVhiaEtrTxk6pVS ICJXZVSMGTbKCZ0PeV5V8ORAiIZTOAT2KAEgmKKZsGdCWUGJl8AOqGZCsmOqLFYFCrjAuSJM4Jwd aRMksIXBRJcsOYrgMWBgARNWAksZgQCBOscCdaRYQioURhKpA384CCShR5QLWHLIRLCgQ82QB2tu XCDEZ4LAPYyI0UIMymygSyI0tIFMLVaEgJIEtHDiRiBfeLFLZQQFBAA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/mode_linear.gif R0lGODlhEAAQAOYAAP////H09fP19qeoqf39/ZWXl/7+/sHB/4KCioGBiVpabZSWlri4/2Bgc7W1 /1lZallZbGFhc4SEi+fn6Lq6/7m5/4aGj+jo6YKCi/T298LC/4SEjltbb1lZa4KCiFpabra2/sfH /7a2/YeHi1pabL3JzV9fdqurq2BgdImKi6ios4eHkXl5f+fn56mpqrnEyMDA26+vr/j5+r29/7u7 /lxcb9DZ26iqqnJyeoODi6ipqoSEjZiZml9fcZmam3JyeX19grS0tLi4xWBgcnp6gMDA/3R0fb6+ /66ur5KSlcfH4rGxvqqqtMPD/1pacVdXaLe3/VlZb7Gx/7S0/25u2FxccW5u1b291uPj5Lu7/4CA iIWFj7+//7W4uKqqt4KCifHz9WFhdIWFjYeHjzk9PmNjdvDy842NkKWnp6mpua6urvz8/IODjG1t 1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAAAAAAALAAAAAAQABAAQAe+gCVmGQKFhocCMjYDF0k9DUMNDRERYShlJkIBAwCdnp+fmzFKIU0a GgepB0UhM1Sbalc0UCIiICAOuUdSbZsXSGIrYxYWWxsbbEBGXpugzp4BN2sE1NUEBtjYBGBdEy4e EhgICF8JCVosP0wZA1gjHR0K8h8fHBxVTmnNz86bQTBcKFDIUqECg4MHpljZxy/UgAknPOyQkEMc AnNEcKgIoKPFmScPQkIYqYBEjShLApBJ4WOBywIwYxbggeZFIAA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/mode_hybrid.gif R0lGODlhEAAQAOYAAP////H09fP19qeoqVpaWv39/ZWXl/7+/mZmZlpabbW1/7i4/2Bgc5SWlmRk ZLq6/4GBiba2/WFhc/T294SEjltbb4KCiujo6YaGj1pabrm5/7a2/llZa4WFj7W4uK6urmFhdIOD jIeHj/Hz9XJyeePj5FpacZGRkb+//319gqWnp+fn6JSUlIKCi9DZ24eHkb3JzWBgdKqqt4eHi76+ /4KCiJKSlYmKi4CAiLi4xV9fcTk9Pru7/3R0dMHB/7291qmpuW5u1be3/aqqtPz8/LS0tKiqqoWF jbS0//Dy82BgcmNjdlxccXR0fVhYWMDA24SEi6mpqldXV4KCifj5+nl5f5iZmqipqm1t1LGx/19f dru7/oiIiK6ur7nEyJmamwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAAAAAAALAAAAAAQABAAQAepgDBJEwKFhocCVC4DFzY6DEoMDBISIDFLWjkBAwCdnp+fm6Cjnpsf P1tCEREbGwqvNFlYmxddRy8iGBgdFBQhKU0yoqSjAUZEBcnKBQfNzQUjHitRNVAtFhZTEBA4VSRD EwMlMxwcCecZGRUVTCZAw8ShA0VPKA8PPBoaC/w+SEHw4nUS1cMJgYMIEUrhEuDKKBYOEEhE4OBE gB03vjTYaKCjRwNWVHgJBAA7 ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/mode_threaded.gif R0lGODlhEAAQAOYAAP////H09fP19qeoqU5OTlpaWv39/ZWXl/7+/kFBQWZmZpSWlrW1/1pabVpa boKCillZa1tbb2RkZIGBiba2/vT297a2/ampqvz8/LW4uK6urlxccfDy83R0dKWnp3p6eoKCi729 1pSUlIiIiJiZmoSEiz4+PtDZ24CAiFpacXd3dz09PaqqtKiqqkxMTFhYWDk9Pr6+/7u7/pGRkbe3 /ePj5FdXV73JzfHz9bnEyHl5f3JyeampuUtLS/j5+pmam4CAgOfn6Kipqm1t1GpqaoKCiYmKi7Gx /4eHi4KCiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAAAAAAALAAAAAAQABAAQAePgDccFQKFhocCPicDAI2OHysJkgkmKgGMjpmaAJebnpwDGiEyNBYW FBQMqjFHQ51ELgSys7M9QJ2fmgEtGAa+vwYIwsIGOBlBF0klIA8PRRMTKDo7LBUDNUgQEA3cDg4R ERspPLi5juXmoOnnjB0vBfDx8TYjAUKbIhIK+woSMwEwjPxYQPCAwYMHSHjIEQgAOw== ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.thunting.com/geotech/forums/images/buttons/collapse_thead.gif R0lGODlhDQANAOYAAEpgjuDk7FxwmUZlnDdQgjtUgj9bjElpoVFmkjlShDlSg1lul+rs8lpvmFtv mVZrlW2ItzZOd1htl6GtxMfO3Pv8/TdQgzhRfLnG3Fp4rUhfjVltl6eyyPLz9197rJinwGh6oKu1 ytvf6P39/q270jpShFRpk6+913WPu1Nok0JekVJok1hskF1xmYiexGV8p5Kfu5uowZShuenq7GJ1 nUthjn6Wv0ddjD5Wh1tvmJ2tytHX4kNbikhgjWZ/rNnd515ymlNolFRplOPk5W1/pI6cuISTsqy8 1kRilj5Whkpgj0Naip2pwjhRgzdRg0lgjnqSvUponbC6zmR3nnONukdejFBlkt7i67PB2UlgjU9l klRolNXa5TNKckphjk1kkEtspv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAAAAAAALAAAAAANAA0AAAehgBYEBDhaEgISVkmCTk0JADkxPx0iEy1PCgoJX0YUGCgZVFg7RV8l SwIULmBgYQMHNiM0PAhMGKxhuQYHJxwIGwEQrWFduh4MGw4dGWADBcRdBVEVDgvBYAe5YRcqxwsm HEfDxWEGOlJbXlMVUM4RFxEsM0ReN0EwXCQvSD4fQzJCqvTIkgLIhCthAoQAsUKDBiVeAHx50EBA gwdfAHipEQgAOw== ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.thunting.com/geotech/forums/clientscript/vbulletin_global.js /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*\=0A= || #################################################################### = ||=0A= || # vBulletin 3.5.4=0A= || # ---------------------------------------------------------------- # = ||=0A= || # Copyright =A92000-2006 Jelsoft Enterprises Ltd. All Rights = Reserved. ||=0A= || # This file may not be redistributed in whole or significant part. # = ||=0A= || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # = ||=0A= || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # = ||=0A= || #################################################################### = ||=0A= \*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/=0A= =0A= // = #########################################################################= ####=0A= // Initial setup=0A= =0A= // ensure SESSIONURL exists=0A= if (typeof SESSIONURL =3D=3D 'undefined')=0A= {=0A= SESSIONURL =3D '';=0A= }=0A= =0A= // ensure vbphrase exists=0A= if (typeof vbphrase =3D=3D 'undefined')=0A= {=0A= vbphrase =3D new Array();=0A= }=0A= =0A= // Array of message editor objects=0A= var vB_Editor =3D new Array();=0A= =0A= // Ignore characters within [quote] tags in messages for length check=0A= var ignorequotechars =3D false;=0A= =0A= // Number of pagenav items dealt with so far=0A= var pagenavcounter =3D 0;=0A= =0A= // = #########################################################################= ####=0A= // Browser detection and limitation workarounds=0A= =0A= // Define the browser we have instead of multiple calls throughout the = file=0A= var userAgent =3D navigator.userAgent.toLowerCase();=0A= var is_opera =3D (userAgent.indexOf('opera') !=3D -1);=0A= var is_saf =3D ((userAgent.indexOf('applewebkit') !=3D -1) || = (navigator.vendor =3D=3D 'Apple Computer, Inc.'));=0A= var is_webtv =3D (userAgent.indexOf('webtv') !=3D -1);=0A= var is_ie =3D ((userAgent.indexOf('msie') !=3D -1) && (!is_opera) && = (!is_saf) && (!is_webtv));=0A= var is_ie4 =3D ((is_ie) && (userAgent.indexOf('msie 4.') !=3D -1));=0A= var is_moz =3D ((navigator.product =3D=3D 'Gecko') && (!is_saf));=0A= var is_kon =3D (userAgent.indexOf('konqueror') !=3D -1);=0A= var is_ns =3D ((userAgent.indexOf('compatible') =3D=3D -1) && = (userAgent.indexOf('mozilla') !=3D -1) && (!is_opera) && (!is_webtv) && = (!is_saf));=0A= var is_ns4 =3D ((is_ns) && (parseInt(navigator.appVersion) =3D=3D 4));=0A= var is_mac =3D (userAgent.indexOf('mac') !=3D -1);=0A= =0A= // Catch possible bugs with WebTV and other older browsers=0A= var is_regexp =3D (window.RegExp) ? true : false;=0A= =0A= // Is the visiting browser compatible with AJAX?=0A= var AJAX_Compatible =3D false;=0A= =0A= // Help out old versions of IE that don't understand = element.style.cursor =3D 'pointer'=0A= var pointer_cursor =3D (is_ie ? 'hand' : 'pointer');=0A= =0A= /**=0A= * Workaround for heinous IE bug - add special vBlength property to all = strings=0A= * This method is applied to ALL string objects automatically=0A= *=0A= * @return integer=0A= */=0A= String.prototype.vBlength =3D function()=0A= {=0A= return (is_ie && this.indexOf('\n') !=3D -1) ? this.replace(/\r?\n/g, = '_').length : this.length;=0A= }=0A= =0A= /**=0A= * Pop function for browsers that don't have it built in=0A= *=0A= * @param array Array from which to pop=0A= *=0A= * @return mixed null on empty, value on success=0A= */=0A= function array_pop(a)=0A= {=0A= if (typeof a !=3D 'object' || !a.length)=0A= {=0A= return null;=0A= }=0A= else=0A= {=0A= var response =3D a[a.length - 1];=0A= a.length--;=0A= return response;=0A= }=0A= }=0A= =0A= /**=0A= * Push function for browsers that don't have it built in=0A= *=0A= * @param array Array onto which to push=0A= * @param mixed Value to push onto array=0A= *=0A= * @return integer Length of array=0A= */=0A= function array_push(a, value)=0A= {=0A= a[a.length] =3D value;=0A= return a.length;=0A= }=0A= =0A= /**=0A= * Function to emulate document.getElementById=0A= *=0A= * @param string Object ID=0A= *=0A= * @return mixed null if not found, object if found=0A= */=0A= function fetch_object(idname)=0A= {=0A= if (document.getElementById)=0A= {=0A= return document.getElementById(idname);=0A= }=0A= else if (document.all)=0A= {=0A= return document.all[idname];=0A= }=0A= else if (document.layers)=0A= {=0A= return document.layers[idname];=0A= }=0A= else=0A= {=0A= return null;=0A= }=0A= }=0A= =0A= /**=0A= * Function to emulate document.getElementsByTagName=0A= *=0A= * @param object Parent tag (eg: document)=0A= * @param string Tag type (eg: 'td')=0A= *=0A= * @return array=0A= */=0A= function fetch_tags(parentobj, tag)=0A= {=0A= if (typeof parentobj.getElementsByTagName !=3D 'undefined')=0A= {=0A= return parentobj.getElementsByTagName(tag);=0A= }=0A= else if (parentobj.all && parentobj.all.tags)=0A= {=0A= return parentobj.all.tags(tag);=0A= }=0A= else=0A= {=0A= return null;=0A= }=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Event handlers=0A= =0A= /**=0A= * Handles the different event models of different browsers and prevents = event bubbling=0A= *=0A= * @param event Event object=0A= *=0A= * @return event=0A= */=0A= function do_an_e(eventobj)=0A= {=0A= if (!eventobj || is_ie)=0A= {=0A= window.event.returnValue =3D false;=0A= window.event.cancelBubble =3D true;=0A= return window.event;=0A= }=0A= else=0A= {=0A= eventobj.stopPropagation();=0A= eventobj.preventDefault();=0A= return eventobj;=0A= }=0A= }=0A= =0A= /**=0A= * Handles the different event models of different browsers and prevents = event bubbling in a lesser way than do_an_e()=0A= *=0A= * @param event Event object=0A= *=0A= * @return event=0A= */=0A= function e_by_gum(eventobj)=0A= {=0A= if (!eventobj || is_ie)=0A= {=0A= window.event.cancelBubble =3D true;=0A= return window.event;=0A= }=0A= else=0A= {=0A= if (eventobj.target.type =3D=3D 'submit')=0A= {=0A= // naughty safari=0A= eventobj.target.form.submit();=0A= }=0A= eventobj.stopPropagation();=0A= return eventobj;=0A= }=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Message manipulation and validation=0A= =0A= /**=0A= * Checks that a message is valid for submission to PHP=0A= *=0A= * @param string Message text=0A= * @param mixed Either subject text (if you want to make sure it exists) = or 0 if you don't care=0A= * @param integer Minimum acceptable character limit for the message=0A= *=0A= * @return boolean=0A= */=0A= function validatemessage(messagetext, subjecttext, minchars)=0A= {=0A= if (is_kon || is_saf || is_webtv)=0A= {=0A= // ignore less-than-capable browsers=0A= return true;=0A= }=0A= else if (subjecttext.length < 1)=0A= {=0A= // subject not specified=0A= alert(vbphrase['must_enter_subject']);=0A= return false;=0A= }=0A= else=0A= {=0A= var stripped =3D PHP.trim(stripcode(messagetext, false, = ignorequotechars));=0A= =0A= if (stripped.length < minchars)=0A= {=0A= // minimum message length not met=0A= alert(construct_phrase(vbphrase['message_too_short'], minchars));=0A= return false;=0A= }=0A= else=0A= {=0A= // everything seems ok=0A= return true;=0A= }=0A= }=0A= }=0A= =0A= /**=0A= * Strips quotes and bbcode tags from text=0A= *=0A= * @param string Text to manipulate=0A= * @param boolean If true, strip otherwise strip [x]=0A= * @param boolean If true, strip all [quote]...contents...[/quote]=0A= *=0A= * @return string=0A= */=0A= function stripcode(str, ishtml, stripquotes)=0A= {=0A= if (!is_regexp)=0A= {=0A= return str;=0A= }=0A= =0A= if (stripquotes)=0A= {=0A= var start_time =3D new Date().getTime();=0A= =0A= while ((startindex =3D PHP.stripos(str, '[quote')) !=3D=3D false)=0A= {=0A= if (new Date().getTime() - start_time > 2000)=0A= {=0A= // while loop has been running for over 2 seconds and has probably = gone infinite=0A= break;=0A= }=0A= =0A= if ((stopindex =3D PHP.stripos(str, '[/quote]')) !=3D=3D false)=0A= {=0A= fragment =3D str.substr(startindex, stopindex - startindex + 8);=0A= str =3D str.replace(fragment, '');=0A= }=0A= else=0A= {=0A= break;=0A= }=0A= str =3D PHP.trim(str);=0A= }=0A= }=0A= =0A= if (ishtml)=0A= {=0A= // exempt image tags -- they need to count as characters in the string=0A= // as the do as BB codes=0A= str =3D str.replace(/]+src=3D"([^"]+)"[^>]*>/gi, '$1');=0A= =0A= var html1 =3D new RegExp("<(\\w+)[^>]*>", 'gi');=0A= var html2 =3D new RegExp("<\\/\\w+>", 'gi');=0A= =0A= str =3D str.replace(html1, '');=0A= str =3D str.replace(html2, '');=0A= =0A= var html3 =3D new RegExp('( )', 'gi');=0A= str =3D str.replace(html3, ' ');=0A= }=0A= else=0A= {=0A= var bbcode1 =3D new RegExp("\\[(\\w+)[^\\]]*\\]", 'gi');=0A= var bbcode2 =3D new RegExp("\\[\\/(\\w+)\\]", 'gi');=0A= =0A= str =3D str.replace(bbcode1, '');=0A= str =3D str.replace(bbcode2, '');=0A= }=0A= =0A= return str;=0A= }=0A= =0A= // = #########################################################################= ####=0A= // vB_PHP_Emulator class=0A= // = #########################################################################= ####=0A= =0A= /**=0A= * PHP Function Emulator Class=0A= */=0A= function vB_PHP_Emulator()=0A= {=0A= }=0A= =0A= // = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=0A= // vB_PHP_Emulator Methods=0A= =0A= /**=0A= * Find a string within a string (case insensitive)=0A= *=0A= * @param string Haystack=0A= * @param string Needle=0A= * @param integer Offset=0A= *=0A= * @return mixed Not found: false / Found: integer position=0A= */=0A= vB_PHP_Emulator.prototype.stripos =3D function(haystack, needle, offset)=0A= {=0A= if (typeof offset =3D=3D 'undefined')=0A= {=0A= offset =3D 0;=0A= }=0A= =0A= index =3D haystack.toLowerCase().indexOf(needle.toLowerCase(), offset);=0A= =0A= return (index =3D=3D -1 ? false : index);=0A= }=0A= =0A= /**=0A= * Trims leading whitespace=0A= *=0A= * @param string String to trim=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.ltrim =3D function(str)=0A= {=0A= return str.replace(/^\s+/g, '');=0A= }=0A= =0A= /**=0A= * Trims trailing whitespace=0A= *=0A= * @param string String to trim=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.rtrim =3D function(str)=0A= {=0A= return str.replace(/(\s+)$/g, '');=0A= }=0A= =0A= /**=0A= * Trims leading and trailing whitespace=0A= *=0A= * @param string String to trim=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.trim =3D function(str)=0A= {=0A= return this.ltrim(this.rtrim(str));=0A= }=0A= =0A= /**=0A= * Emulation of PHP's preg_quote()=0A= *=0A= * @param string String to process=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.preg_quote =3D function(str)=0A= {=0A= // replace + { } ( ) [ ] | / ? ^ $ \ . =3D ! < > : * with = backslash+character=0A= return = str.replace(/(\+|\{|\}|\(|\)|\[|\]|\||\/|\?|\^|\$|\\|\.|\=3D|\!|\<|\>|\:|= \*)/g, "\\$1");=0A= }=0A= =0A= /**=0A= * Emulates unhtmlspecialchars in vBulletin=0A= *=0A= * @param string String to process=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.unhtmlspecialchars =3D function(str)=0A= {=0A= f =3D new Array(/</g, />/g, /"/g, /&/g);=0A= r =3D new Array('<', '>', '"', '&');=0A= =0A= for (var i in f)=0A= {=0A= str =3D str.replace(f[i], r[i]);=0A= }=0A= =0A= return str;=0A= }=0A= =0A= /**=0A= * Emulates PHP's htmlspecialchars()=0A= *=0A= * @param string String to process=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.htmlspecialchars =3D function(str)=0A= {=0A= //var f =3D new Array(/&(?!#[0-9]+;)/g, //g, /"/g);=0A= var f =3D new Array(=0A= (is_mac && is_ie ? new RegExp('&', 'g') : new RegExp('&(?!#[0-9]+;)', = 'g')),=0A= new RegExp('<', 'g'),=0A= new RegExp('>', 'g'),=0A= new RegExp('"', 'g')=0A= );=0A= var r =3D new Array(=0A= '&',=0A= '<',=0A= '>',=0A= '"'=0A= );=0A= =0A= for (var i =3D 0; i < f.length; i++)=0A= {=0A= str =3D str.replace(f[i], r[i]);=0A= }=0A= =0A= return str;=0A= }=0A= =0A= /**=0A= * Searches an array for a value=0A= *=0A= * @param string Needle=0A= * @param array Haystack=0A= * @param boolean Case insensitive=0A= *=0A= * @return integer Not found: -1 / Found: integer index=0A= */=0A= vB_PHP_Emulator.prototype.in_array =3D function(ineedle, haystack, = caseinsensitive)=0A= {=0A= var needle =3D new String(ineedle);=0A= =0A= if (caseinsensitive)=0A= {=0A= needle =3D needle.toLowerCase();=0A= for (var i in haystack)=0A= {=0A= if (haystack[i].toLowerCase() =3D=3D needle)=0A= {=0A= return i;=0A= }=0A= }=0A= }=0A= else=0A= {=0A= for (var i in haystack)=0A= {=0A= if (haystack[i] =3D=3D needle)=0A= {=0A= return i;=0A= }=0A= }=0A= }=0A= return -1;=0A= }=0A= =0A= /**=0A= * Emulates PHP's strpad()=0A= *=0A= * @param string Text to pad=0A= * @param integer Length to pad=0A= * @param string String with which to pad=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.str_pad =3D function(text, length, padstring)=0A= {=0A= text =3D new String(text);=0A= padstring =3D new String(padstring);=0A= =0A= if (text.length < length)=0A= {=0A= padtext =3D new String(padstring);=0A= =0A= while (padtext.length < (length - text.length))=0A= {=0A= padtext +=3D padstring;=0A= }=0A= =0A= text =3D padtext.substr(0, (length - text.length)) + text;=0A= }=0A= =0A= return text;=0A= }=0A= =0A= /**=0A= * A sort of emulation of PHP's urlencode - not 100% the same, but = accomplishes the same thing=0A= *=0A= * @param string String to encode=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.urlencode =3D function(text)=0A= {=0A= text =3D text.toString();=0A= =0A= // this escapes 128 - 255, as JS uses the unicode code points for them.=0A= // This causes problems with submitting text via AJAX with the UTF-8 = charset.=0A= var matches =3D text.match(/[\x90-\xFF]/g);=0A= if (matches)=0A= {=0A= for (var matchid =3D 0; matchid < matches.length; matchid++)=0A= {=0A= var char_code =3D matches[matchid].charCodeAt(0);=0A= text =3D text.replace(matches[matchid], '%u00' + (char_code & = 0xFF).toString(16).toUpperCase());=0A= }=0A= }=0A= =0A= return escape(text).replace(/\+/g, "%2B");=0A= }=0A= =0A= /**=0A= * Works a bit like ucfirst, but with some extra options=0A= *=0A= * @param string String with which to work=0A= * @param string Cut off string before first occurence of this string=0A= *=0A= * @return string=0A= */=0A= vB_PHP_Emulator.prototype.ucfirst =3D function(str, cutoff)=0A= {=0A= if (typeof cutoff !=3D 'undefined')=0A= {=0A= var cutpos =3D str.indexOf(cutoff);=0A= if (cutpos > 0)=0A= {=0A= str =3D str.substr(0, cutpos);=0A= }=0A= }=0A= =0A= str =3D str.split(' ');=0A= for (var i =3D 0; i < str.length; i++)=0A= {=0A= str[i] =3D str[i].substr(0, 1).toUpperCase() + str[i].substr(1);=0A= }=0A= return str.join(' ');=0A= }=0A= =0A= // initialize the PHP emulator=0A= var PHP =3D new vB_PHP_Emulator();=0A= =0A= // = #########################################################################= ####=0A= // vB_AJAX_Handler=0A= // = #########################################################################= ####=0A= =0A= /**=0A= * XML Sender Class=0A= *=0A= * @param boolean Should connections be asyncronous?=0A= */=0A= function vB_AJAX_Handler(async)=0A= {=0A= /**=0A= * Should connections be asynchronous?=0A= *=0A= * @var boolean=0A= */=0A= this.async =3D async ? true : false;=0A= }=0A= =0A= // = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=0A= // vB_AJAX_Handler methods=0A= =0A= /**=0A= * Initializes the XML handler=0A= *=0A= * @return boolean True if handler created OK=0A= */=0A= vB_AJAX_Handler.prototype.init =3D function()=0A= {=0A= if (typeof vb_disable_ajax !=3D 'undefined' && vb_disable_ajax =3D=3D 2)=0A= {=0A= // disable all ajax features=0A= return false;=0A= }=0A= =0A= try=0A= {=0A= this.handler =3D new XMLHttpRequest();=0A= return (this.handler.setRequestHeader ? true : false);=0A= }=0A= catch(e)=0A= {=0A= try=0A= {=0A= this.handler =3D eval("new A" + "ctiv" + "eX" + "Ob" + "ject('Micr" + = "osoft.XM" + "LHTTP');");=0A= return true;=0A= }=0A= catch(e)=0A= {=0A= return false;=0A= }=0A= }=0A= }=0A= =0A= /**=0A= * Detects if the browser is fully compatible=0A= *=0A= * @return boolean=0A= */=0A= vB_AJAX_Handler.prototype.is_compatible =3D function()=0A= {=0A= if (typeof vb_disable_ajax !=3D 'undefined' && vb_disable_ajax =3D=3D 2)=0A= {=0A= // disable all ajax features=0A= return false;=0A= }=0A= =0A= if (is_ie && !is_ie4) { return true; }=0A= else if (XMLHttpRequest)=0A= {=0A= try { return XMLHttpRequest.prototype.setRequestHeader ? true : false; = }=0A= catch(e)=0A= {=0A= try { var tester =3D new XMLHttpRequest(); return = tester.setRequestHeader ? true : false; }=0A= catch(e) { return false; }=0A= }=0A= }=0A= else { return false; }=0A= }=0A= =0A= /**=0A= * Checks if the system is ready=0A= *=0A= * @return boolean False if ready=0A= */=0A= vB_AJAX_Handler.prototype.not_ready =3D function()=0A= {=0A= return (this.handler.readyState && (this.handler.readyState < 4));=0A= }=0A= =0A= /**=0A= * OnReadyStateChange event handler=0A= *=0A= * @param function=0A= */=0A= vB_AJAX_Handler.prototype.onreadystatechange =3D function(event)=0A= {=0A= if (!this.handler)=0A= {=0A= if (!this.init())=0A= {=0A= return false;=0A= }=0A= }=0A= if (typeof event =3D=3D 'function')=0A= {=0A= this.handler.onreadystatechange =3D event;=0A= }=0A= else=0A= {=0A= alert('XML Sender OnReadyState event is not a function');=0A= }=0A= }=0A= =0A= /**=0A= * Sends data=0A= *=0A= * @param string Destination URL=0A= * @param string Request Data=0A= *=0A= * @return mixed Return message=0A= */=0A= vB_AJAX_Handler.prototype.send =3D function(desturl, datastream)=0A= {=0A= if (!this.handler)=0A= {=0A= if (!this.init())=0A= {=0A= return false;=0A= }=0A= }=0A= if (!this.not_ready())=0A= {=0A= this.handler.open('POST', desturl, this.async);=0A= this.handler.setRequestHeader('Content-Type', = 'application/x-www-form-urlencoded');=0A= this.handler.send(datastream + '&s=3D' + fetch_sessionhash());=0A= =0A= if (!this.async && this.handler.readyState =3D=3D 4 && = this.handler.status =3D=3D 200)=0A= {=0A= return true;=0A= }=0A= }=0A= return false;=0A= }=0A= =0A= // we can check this variable to see if browser is AJAX compatible=0A= var AJAX_Compatible =3D vB_AJAX_Handler.prototype.is_compatible();=0A= =0A= // = #########################################################################= ####=0A= // vB_Hidden_Form=0A= // = #########################################################################= ####=0A= =0A= /**=0A= * Form Generator Class=0A= *=0A= * Builds a form filled with hidden fields for invisible submit via POST=0A= *=0A= * @param string Script (my_target_script.php)=0A= */=0A= function vB_Hidden_Form(script)=0A= {=0A= this.form =3D document.createElement('form');=0A= this.form.method =3D 'post';=0A= this.form.action =3D script;=0A= }=0A= =0A= // = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=0A= // vB_Hidden_Form methods=0A= =0A= /**=0A= * Adds a hidden input field to the form object=0A= *=0A= * @param string Name attribute=0A= * @param string Value attribute=0A= */=0A= vB_Hidden_Form.prototype.add_input =3D function(name, value)=0A= {=0A= var inputobj =3D document.createElement('input');=0A= =0A= inputobj.type =3D 'hidden';=0A= inputobj.name =3D name;=0A= inputobj.value =3D value;=0A= =0A= this.form.appendChild(inputobj);=0A= };=0A= =0A= /**=0A= * Fetches all form elements inside an HTML element and performs = 'add_input()' on them=0A= *=0A= * @param object HTML element to search=0A= */=0A= vB_Hidden_Form.prototype.add_inputs_from_object =3D function(obj)=0A= {=0A= var inputs =3D fetch_tags(obj, 'input');=0A= for (var i =3D 0; i < inputs.length; i++)=0A= {=0A= switch (inputs[i].type)=0A= {=0A= case 'checkbox':=0A= case 'radio':=0A= if (inputs[i].checked)=0A= {=0A= this.add_input(inputs[i].name, inputs[i].value);=0A= }=0A= break;=0A= case 'text':=0A= case 'hidden':=0A= case 'password':=0A= this.add_input(inputs[i].name, inputs[i].value);=0A= break;=0A= default:=0A= continue;=0A= }=0A= }=0A= =0A= var textareas =3D fetch_tags(obj, 'textarea');=0A= for (var i =3D 0; i < textareas.length; i++)=0A= {=0A= this.add_input(textareas[i].name, textareas[i].value);=0A= }=0A= =0A= var selects =3D fetch_tags(obj, 'select');=0A= for (var i =3D 0; i < selects.length; i++)=0A= {=0A= if (selects[i].multiple)=0A= {=0A= for (var j =3D 0; j < selects[i].options.length; j++)=0A= {=0A= if (selects[i].options[j].selected)=0A= {=0A= this.add_input(selects[i].name, selects[i].options[j].value);=0A= }=0A= }=0A= }=0A= else=0A= {=0A= this.add_input(selects[i].name, = selects[i].options[selects[i].selectedIndex].value);=0A= }=0A= }=0A= }=0A= =0A= /**=0A= * Submits the hidden form object=0A= */=0A= vB_Hidden_Form.prototype.submit_form =3D function()=0A= {=0A= document.body.appendChild(this.form).submit();=0A= };=0A= =0A= // = #########################################################################= ####=0A= // Window openers and instant messenger wrappers=0A= =0A= /**=0A= * Opens a generic browser window=0A= *=0A= * @param string URL=0A= * @param integer Width=0A= * @param integer Height=0A= * @param string Optional Window ID=0A= */=0A= function openWindow(url, width, height, windowid)=0A= {=0A= return window.open(=0A= url,=0A= (typeof windowid =3D=3D 'undefined' ? 'vBPopup' : windowid),=0A= = 'statusbar=3Dno,menubar=3Dno,toolbar=3Dno,scrollbars=3Dyes,resizable=3Dye= s'=0A= + (typeof width !=3D 'undefined' ? (',width=3D' + width) : '') + = (typeof height !=3D 'undefined' ? (',height=3D' + height) : '')=0A= );=0A= }=0A= =0A= /**=0A= * Opens control panel help window=0A= *=0A= * @param string Script name=0A= * @param string Action type=0A= * @param string Option value=0A= *=0A= * @return window=0A= */=0A= function js_open_help(scriptname, actiontype, optionval)=0A= {=0A= return openWindow(=0A= 'help.php?s=3D' + SESSIONHASH + '&do=3Danswer&page=3D' + scriptname + = '&pageaction=3D' + actiontype + '&option=3D' + optionval,=0A= 600, 450, 'helpwindow'=0A= );=0A= }=0A= =0A= /**=0A= * Opens a window to show a list of posters in a thread = (misc.php?do=3Dwhoposted)=0A= *=0A= * @param integer Thread ID=0A= *=0A= * @return window=0A= */=0A= function who(threadid)=0A= {=0A= return openWindow(=0A= 'misc.php?' + SESSIONURL + 'do=3Dwhoposted&t=3D' + threadid,=0A= 230, 300=0A= );=0A= }=0A= =0A= /**=0A= * Opens an IM Window=0A= *=0A= * @param string IM type=0A= * @param integer User ID=0A= * @param integer Width of window=0A= * @param integer Height of window=0A= *=0A= * @return window=0A= */=0A= function imwindow(imtype, userid, width, height)=0A= {=0A= return openWindow(=0A= 'sendmessage.php?' + SESSIONURL + 'do=3Dim&type=3D' + imtype + '&u=3D' = + userid,=0A= width, height=0A= );=0A= }=0A= =0A= /**=0A= * Sends an MSN message=0A= *=0A= * @param string Target MSN handle=0A= *=0A= * @return boolean false=0A= */=0A= function SendMSNMessage(name)=0A= {=0A= if (!is_ie)=0A= {=0A= alert(vbphrase['msn_functions_only_work_in_ie']);=0A= return false;=0A= }=0A= else=0A= {=0A= MsgrObj.InstantMessage(name);=0A= return false;=0A= }=0A= }=0A= =0A= /**=0A= * Adds an MSN Contact (requires MSN)=0A= *=0A= * @param string MSN handle=0A= *=0A= * @return boolean false=0A= */=0A= function AddMSNContact(name)=0A= {=0A= if (!is_ie)=0A= {=0A= alert(vbphrase['msn_functions_only_work_in_ie']);=0A= return false;=0A= }=0A= else=0A= {=0A= MsgrObj.AddContact(0, name);=0A= return false;=0A= }=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Cookie handlers=0A= =0A= /**=0A= * Sets a cookie=0A= *=0A= * @param string Cookie name=0A= * @param string Cookie value=0A= * @param date Cookie expiry date=0A= */=0A= function set_cookie(name, value, expires)=0A= {=0A= document.cookie =3D name + '=3D' + escape(value) + '; path=3D/' + = (typeof expires !=3D 'undefined' ? '; expires=3D' + = expires.toGMTString() : '');=0A= }=0A= =0A= /**=0A= * Deletes a cookie=0A= *=0A= * @param string Cookie name=0A= */=0A= function delete_cookie(name)=0A= {=0A= document.cookie =3D name + '=3D' + '; expires=3DThu, 01-Jan-70 00:00:01 = GMT' + '; path=3D/';=0A= }=0A= =0A= /**=0A= * Fetches the value of a cookie=0A= *=0A= * @param string Cookie name=0A= *=0A= * @return string=0A= */=0A= function fetch_cookie(name)=0A= {=0A= cookie_name =3D name + '=3D';=0A= cookie_length =3D document.cookie.length;=0A= cookie_begin =3D 0;=0A= while (cookie_begin < cookie_length)=0A= {=0A= value_begin =3D cookie_begin + cookie_name.length;=0A= if (document.cookie.substring(cookie_begin, value_begin) =3D=3D = cookie_name)=0A= {=0A= var value_end =3D document.cookie.indexOf (';', value_begin);=0A= if (value_end =3D=3D -1)=0A= {=0A= value_end =3D cookie_length;=0A= }=0A= return unescape(document.cookie.substring(value_begin, value_end));=0A= }=0A= cookie_begin =3D document.cookie.indexOf(' ', cookie_begin) + 1;=0A= if (cookie_begin =3D=3D 0)=0A= {=0A= break;=0A= }=0A= }=0A= return null;=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Form element managers (used for 'check all' type systems=0A= =0A= /**=0A= * Sets all checkboxes, radio buttons or selects in a given form to a = given state, with exceptions=0A= *=0A= * @param object Form object=0A= * @param string Target element type (one of 'radio', 'select-one', = 'checkbox')=0A= * @param string Selected option in case of 'radio'=0A= * @param array Array of element names to be excluded=0A= * @param mixed Value to give to found elements=0A= */=0A= function js_toggle_all(formobj, formtype, option, exclude, setto)=0A= {=0A= for (var i =3D0; i < formobj.elements.length; i++)=0A= {=0A= var elm =3D formobj.elements[i];=0A= if (elm.type =3D=3D formtype && PHP.in_array(elm.name, exclude, false) = =3D=3D -1)=0A= {=0A= switch (formtype)=0A= {=0A= case 'radio':=0A= if (elm.value =3D=3D option) // option =3D=3D '' evaluates true = when option =3D 0=0A= {=0A= elm.checked =3D setto;=0A= }=0A= break;=0A= case 'select-one':=0A= elm.selectedIndex =3D setto;=0A= break;=0A= default:=0A= elm.checked =3D setto;=0A= break;=0A= }=0A= }=0A= }=0A= }=0A= =0A= /**=0A= * Sets all elements to have the same checked = status as 'allbox'=0A= *=0A= * @param object Form object=0A= */=0A= function js_check_all(formobj)=0A= {=0A= exclude =3D new Array();=0A= exclude[0] =3D 'keepattachments';=0A= exclude[1] =3D 'allbox';=0A= exclude[2] =3D 'removeall';=0A= js_toggle_all(formobj, 'checkbox', '', exclude, formobj.allbox.checked);=0A= }=0A= =0A= /**=0A= * Sets all groups to have a particular option = checked=0A= *=0A= * @param object Form object=0A= * @param mixed Selected option=0A= */=0A= function js_check_all_option(formobj, option)=0A= {=0A= exclude =3D new Array();=0A= exclude[0] =3D 'useusergroup';=0A= js_toggle_all(formobj, 'radio', option, exclude, true);=0A= }=0A= =0A= /**=0A= * Alias to js_check_all=0A= */=0A= function checkall(formobj) { js_check_all(formobj); }=0A= =0A= /**=0A= * Alias to js_check_all_option=0A= */=0A= function checkall_option(formobj, option) { js_check_all_option(formobj, = option); }=0A= =0A= /**=0A= * Resize function for CP textareas=0A= *=0A= * @param integer If positive, size up, otherwise size down=0A= * @param string ID of the textarea=0A= *=0A= * @return boolean false=0A= */=0A= function resize_textarea(to, id)=0A= {=0A= if (to < 0)=0A= {=0A= var rows =3D -5;=0A= var cols =3D -10;=0A= }=0A= else=0A= {=0A= var rows =3D 5;=0A= var cols =3D 10;=0A= }=0A= =0A= var textarea =3D fetch_object(id);=0A= if (typeof textarea.orig_rows =3D=3D 'undefined')=0A= {=0A= textarea.orig_rows =3D textarea.rows;=0A= textarea.orig_cols =3D textarea.cols;=0A= }=0A= =0A= var newrows =3D textarea.rows + rows;=0A= var newcols =3D textarea.cols + cols;=0A= =0A= if (newrows >=3D textarea.orig_rows && newcols >=3D textarea.orig_cols)=0A= {=0A= textarea.rows =3D newrows;=0A= textarea.cols =3D newcols;=0A= }=0A= =0A= return false;=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Collapsible element handlers=0A= =0A= /**=0A= * Toggles the collapse state of an object, and saves state to = 'vbulletin_collapse' cookie=0A= *=0A= * @param string Unique ID for the collapse group=0A= *=0A= * @return boolean false=0A= */=0A= function toggle_collapse(objid)=0A= {=0A= if (!is_regexp)=0A= {=0A= return false;=0A= }=0A= =0A= obj =3D fetch_object('collapseobj_' + objid);=0A= img =3D fetch_object('collapseimg_' + objid);=0A= cel =3D fetch_object('collapsecel_' + objid);=0A= =0A= if (!obj)=0A= {=0A= // nothing to collapse!=0A= if (img)=0A= {=0A= // hide the clicky image if there is one=0A= img.style.display =3D 'none';=0A= }=0A= return false;=0A= }=0A= =0A= if (obj.style.display =3D=3D 'none')=0A= {=0A= obj.style.display =3D '';=0A= save_collapsed(objid, false);=0A= if (img)=0A= {=0A= img_re =3D new RegExp("_collapsed\\.gif$");=0A= img.src =3D img.src.replace(img_re, '.gif');=0A= }=0A= if (cel)=0A= {=0A= cel_re =3D new RegExp("^(thead|tcat)(_collapsed)$");=0A= cel.className =3D cel.className.replace(cel_re, '$1');=0A= }=0A= }=0A= else=0A= {=0A= obj.style.display =3D 'none';=0A= save_collapsed(objid, true);=0A= if (img)=0A= {=0A= img_re =3D new RegExp("\\.gif$");=0A= img.src =3D img.src.replace(img_re, '_collapsed.gif');=0A= }=0A= if (cel)=0A= {=0A= cel_re =3D new RegExp("^(thead|tcat)$");=0A= cel.className =3D cel.className.replace(cel_re, '$1_collapsed');=0A= }=0A= }=0A= return false;=0A= }=0A= =0A= /**=0A= * Updates vbulletin_collapse cookie with collapse preferences=0A= *=0A= * @param string Unique ID for the collapse group=0A= * @param boolean Add a cookie=0A= */=0A= function save_collapsed(objid, addcollapsed)=0A= {=0A= var collapsed =3D fetch_cookie('vbulletin_collapse');=0A= var tmp =3D new Array();=0A= =0A= if (collapsed !=3D null)=0A= {=0A= collapsed =3D collapsed.split('\n');=0A= =0A= for (var i in collapsed)=0A= {=0A= if (collapsed[i] !=3D objid && collapsed[i] !=3D '')=0A= {=0A= tmp[tmp.length] =3D collapsed[i];=0A= }=0A= }=0A= }=0A= =0A= if (addcollapsed)=0A= {=0A= tmp[tmp.length] =3D objid;=0A= }=0A= =0A= expires =3D new Date();=0A= expires.setTime(expires.getTime() + (1000 * 86400 * 365));=0A= set_cookie('vbulletin_collapse', tmp.join('\n'), expires);=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Event Handlers for PageNav menus=0A= =0A= /**=0A= * Class to handle pagenav events=0A= */=0A= function vBpagenav()=0A= {=0A= }=0A= =0A= /**=0A= * Handles clicks on pagenav menu control objects=0A= */=0A= vBpagenav.prototype.controlobj_onclick =3D function(e)=0A= {=0A= this._onclick(e);=0A= var inputs =3D fetch_tags(this.menu.menuobj, 'input');=0A= for (var i =3D 0; i < inputs.length; i++)=0A= {=0A= if (inputs[i].type =3D=3D 'text')=0A= {=0A= inputs[i].focus();=0A= break;=0A= }=0A= }=0A= };=0A= =0A= /**=0A= * Submits the pagenav form... sort of=0A= */=0A= vBpagenav.prototype.form_gotopage =3D function(e)=0A= {=0A= if ((pagenum =3D parseInt(fetch_object('pagenav_itxt').value, 10)) > 0)=0A= {=0A= window.location =3D this.addr + '&page=3D' + pagenum;=0A= }=0A= return false;=0A= };=0A= =0A= /**=0A= * Handles clicks on the 'Go' button in pagenav popups=0A= */=0A= vBpagenav.prototype.ibtn_onclick =3D function(e)=0A= {=0A= return this.form.gotopage();=0A= };=0A= =0A= /**=0A= * Handles keypresses in the text input of pagenav popups=0A= */=0A= vBpagenav.prototype.itxt_onkeypress =3D function(e)=0A= {=0A= return ((e ? e : window.event).keyCode =3D=3D 13 ? this.form.gotopage() = : true);=0A= };=0A= =0A= // = #########################################################################= ####=0A= // DHTML Popup Menu Handling (complements vbulletin_menu.js)=0A= =0A= /**=0A= * Wrapper for vBmenu.register=0A= *=0A= * @param string Control ID=0A= * @param boolean No image (true)=0A= * @param boolean Does nothing any more=0A= */=0A= function vbmenu_register(controlid, noimage, datefield)=0A= {=0A= if (typeof vBmenu =3D=3D 'object')=0A= {=0A= vBmenu.register(controlid, noimage);=0A= }=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Stuff that really doesn't fit anywhere else=0A= =0A= /**=0A= * Sets an element and all its children to be 'unselectable'=0A= *=0A= * @param object Object to be made unselectable=0A= */=0A= function set_unselectable(obj)=0A= {=0A= if (!is_ie4 && typeof obj.tagName !=3D 'undefined')=0A= {=0A= if (obj.hasChildNodes())=0A= {=0A= for (var i =3D 0; i < obj.childNodes.length; i++)=0A= {=0A= set_unselectable(obj.childNodes[i]);=0A= }=0A= }=0A= obj.unselectable =3D 'on';=0A= }=0A= }=0A= =0A= /**=0A= * Fetches the sessionhash from the SESSIONURL variable=0A= *=0A= * @return string=0A= */=0A= function fetch_sessionhash()=0A= {=0A= return (SESSIONURL =3D=3D '' ? '' : SESSIONURL.substr(2, 32));=0A= }=0A= =0A= /**=0A= * Emulates the PHP version of vBulletin's construct_phrase() sprintf = wrapper=0A= *=0A= * @param string String containing %1$s type replacement markers=0A= * @param string First replacement=0A= * @param string Nth replacement=0A= *=0A= * @return string=0A= */=0A= function construct_phrase()=0A= {=0A= if (!arguments || arguments.length < 1 || !is_regexp)=0A= {=0A= return false;=0A= }=0A= =0A= var args =3D arguments;=0A= var str =3D args[0];=0A= var re;=0A= =0A= for (var i =3D 1; i < args.length; i++)=0A= {=0A= re =3D new RegExp("%" + i + "\\$s", 'gi');=0A= str =3D str.replace(re, args[i]);=0A= }=0A= return str;=0A= }=0A= =0A= /**=0A= * Handles the quick style/language options in the footer=0A= *=0A= * @param object Select object=0A= * @param string Type (style or language)=0A= */=0A= function switch_id(selectobj, type)=0A= {=0A= var id =3D selectobj.options[selectobj.selectedIndex].value;=0A= =0A= if (id =3D=3D '')=0A= {=0A= return;=0A= }=0A= =0A= var url =3D new String(window.location);=0A= var fragment =3D new String('');=0A= =0A= // get rid of fragment=0A= url =3D url.split('#');=0A= =0A= // deal with the fragment first=0A= if (url[1])=0A= {=0A= fragment =3D '#' + url[1];=0A= }=0A= =0A= // deal with the main url=0A= url =3D url[0];=0A= =0A= // remove id=3Dx& from main bit=0A= if (url.indexOf(type + 'id=3D') !=3D -1 && is_regexp)=0A= {=0A= re =3D new RegExp(type + "id=3D\\d+&?");=0A= url =3D url.replace(re, '');=0A= }=0A= =0A= // add the ? to the url if needed=0A= if (url.indexOf('?') =3D=3D -1)=0A= {=0A= url +=3D '?';=0A= }=0A= else=0A= {=0A= // make sure that we have a valid character to join our id bit=0A= lastchar =3D url.substr(url.length - 1);=0A= if (lastchar !=3D '&' && lastchar !=3D '?')=0A= {=0A= url +=3D '&';=0A= }=0A= }=0A= =0A= window.location =3D url + type + 'id=3D' + id + fragment;=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Initialize a PostBit=0A= =0A= /**=0A= * This function runs all the necessary Javascript code on a PostBit=0A= * after it has been loaded via AJAX. Don't use this method before a=0A= * complete page load or you'll have problems.=0A= *=0A= * @param object Object containing postbits=0A= */=0A= function PostBit_Init(obj)=0A= {=0A= if (typeof vBmenu !=3D 'undefined')=0A= {=0A= // init profile menu(s)=0A= var divs =3D fetch_tags(obj, 'div');=0A= for (var i =3D 0; i < divs.length; i++)=0A= {=0A= if (divs[i].id && divs[i].id.substr(0, 9) =3D=3D 'postmenu_')=0A= {=0A= vBmenu.register(divs[i].id, true);=0A= }=0A= }=0A= }=0A= =0A= if (typeof vB_QuickEditor !=3D 'undefined')=0A= {=0A= // init quick edit controls=0A= vB_AJAX_QuickEdit_Init(obj);=0A= }=0A= =0A= if (typeof vB_QuickReply !=3D 'undefined')=0A= {=0A= // init quick reply button=0A= qr_init_buttons(obj);=0A= }=0A= }=0A= =0A= // = #########################################################################= ####=0A= // Main vBulletin Javascript Initialization=0A= =0A= /**=0A= * This function runs (almost) at the end of script loading on most = vBulletin pages=0A= *=0A= * It sets up things like image alt->title tags, turns on the popup menu = system etc.=0A= *=0A= * @return boolean=0A= */=0A= function vBulletin_init()=0A= {=0A= // don't bother doing any exciting stuff for WebTV=0A= if (is_webtv)=0A= {=0A= return false;=0A= }=0A= =0A= // set 'title' tags for image elements=0A= var imgs =3D fetch_tags(document, 'img');=0A= for (var i =3D 0; i < imgs.length; i++)=0A= {=0A= if (!imgs[i].title && imgs[i].alt !=3D '')=0A= {=0A= imgs[i].title =3D imgs[i].alt;=0A= }=0A= }=0A= =0A= // finalize popup menus=0A= if (typeof vBmenu =3D=3D 'object')=0A= {=0A= // close all menus on document click=0A= if (window.attachEvent && !is_saf)=0A= {=0A= document.attachEvent('onclick', vbmenu_hide);=0A= window.attachEvent('onresize', vbmenu_hide);=0A= }=0A= else if (document.addEventListener && !is_saf)=0A= {=0A= document.addEventListener('click', vbmenu_hide, false);=0A= window.addEventListener('resize', vbmenu_hide, false);=0A= }=0A= else=0A= {=0A= window.onclick =3D vbmenu_hide;=0A= window.onresize =3D vbmenu_hide;=0A= }=0A= =0A= // add popups to pagenav elements=0A= var pagenavs =3D fetch_tags(document, 'td');=0A= for (var n =3D 0; n < pagenavs.length; n++)=0A= {=0A= if (pagenavs[n].hasChildNodes() && pagenavs[n].firstChild.name && = pagenavs[n].firstChild.name.indexOf('PageNav') !=3D -1)=0A= {=0A= var addr =3D pagenavs[n].title;=0A= pagenavs[n].title =3D '';=0A= pagenavs[n].innerHTML =3D '';=0A= pagenavs[n].id =3D 'pagenav.' + n;=0A= var pn =3D vBmenu.register(pagenavs[n].id);=0A= if (is_saf)=0A= {=0A= pn.controlobj._onclick =3D pn.controlobj.onclick;=0A= pn.controlobj.onclick =3D vBpagenav.prototype.controlobj_onclick;=0A= }=0A= }=0A= }=0A= =0A= // process the pagenavs popup form=0A= if (typeof addr !=3D 'undefined')=0A= {=0A= fetch_object('pagenav_form').addr =3D addr;=0A= fetch_object('pagenav_form').gotopage =3D = vBpagenav.prototype.form_gotopage;=0A= fetch_object('pagenav_ibtn').onclick =3D = vBpagenav.prototype.ibtn_onclick;=0A= fetch_object('pagenav_itxt').onkeypress =3D = vBpagenav.prototype.itxt_onkeypress;=0A= }=0A= =0A= // activate the menu system=0A= vBmenu.activate(true);=0A= }=0A= =0A= return true;=0A= }=0A= =0A= /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*\=0A= || ####################################################################=0A= || # Downloaded: 18:09, Thu Apr 27th 2006=0A= || # CVS: $RCSfile: vbulletin_global.js,v $ - $Revision: 1.151 $=0A= || ####################################################################=0A= \*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ ------=_NextPart_000_0000_01C6BB4E.EF542470 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.thunting.com/geotech/forums/clientscript/vbulletin_md5.js /*=0A= * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message=0A= * Digest Algorithm, as defined in RFC 1321.=0A= * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.=0A= * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet=0A= * Distributed under the BSD License=0A= * See http://pajhome.org.uk/crypt/md5 for more info.=0A= =0A= * vBulletin Usage: md5hash(input,output)=0A= * Recommend: input =3D password input field; output =3D hidden field=0A= =0A= */=0A= =0A= /*=0A= * Configurable variables. You may need to tweak these to be compatible = with=0A= * the server-side, but the defaults work in most cases.=0A= */=0A= var hexcase =3D 0; /* hex output format. 0 - lowercase; 1 - uppercase = */=0A= var b64pad =3D ""; /* base-64 pad character. "=3D" for strict RFC = compliance */=0A= var chrsz =3D 8; /* bits per input character. 8 - ASCII; 16 - Unicode = */=0A= =0A= /*=0A= * These are the functions you'll usually want to call=0A= * They take string arguments and return either hex or base-64 encoded = strings=0A= */=0A= function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * = chrsz));}=0A= function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * = chrsz));}=0A= function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * = chrsz));}=0A= function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, = data)); }=0A= function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, = data)); }=0A= function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, = data)); }=0A= =0A= /*=0A= * Calculate the MD5 of an array of little-endian words, and a bit length=0A= */=0A= function core_md5(x, len)=0A= {=0A= /* append padding */=0A= x[len >> 5] |=3D 0x80 << ((len) % 32);=0A= x[(((len + 64) >>> 9) << 4) + 14] =3D len;=0A= =0A= var a =3D 1732584193;=0A= var b =3D -271733879;=0A= var c =3D -1732584194;=0A= var d =3D 271733878;=0A= =0A= for(var i =3D 0; i < x.length; i +=3D 16)=0A= {=0A= var olda =3D a;=0A= var oldb =3D b;=0A= var oldc =3D c;=0A= var oldd =3D d;=0A= =0A= a =3D md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);=0A= d =3D md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);=0A= c =3D md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);=0A= b =3D md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);=0A= a =3D md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);=0A= d =3D md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);=0A= c =3D md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);=0A= b =3D md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);=0A= a =3D md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);=0A= d =3D md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);=0A= c =3D md5_ff(c, d, a, b, x[i+10], 17, -42063);=0A= b =3D md5_ff(b, c, d, a, x[i+11], 22, -1990404162);=0A= a =3D md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);=0A= d =3D md5_ff(d, a, b, c, x[i+13], 12, -40341101);=0A= c =3D md5_ff(c, d, a, b, x[i+14], 17, -1502002290);=0A= b =3D md5_ff(b, c, d, a, x[i+15], 22, 1236535329);=0A= =0A= a =3D md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);=0A= d =3D md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);=0A= c =3D md5_gg(c, d, a, b, x[i+11], 14, 643717713);=0A= b =3D md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);=0A= a =3D md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);=0A= d =3D md5_gg(d, a, b, c, x[i+10], 9 , 38016083);=0A= c =3D md5_gg(c, d, a, b, x[i+15], 14, -660478335);=0A= b =3D md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);=0A= a =3D md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);=0A= d =3D md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);=0A= c =3D md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);=0A= b =3D md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);=0A= a =3D md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);=0A= d =3D md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);=0A= c =3D md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);=0A= b =3D md5_gg(b, c, d, a, x[i+12], 20, -1926607734);=0A= =0A= a =3D md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);=0A= d =3D md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);=0A= c =3D md5_hh(c, d, a, b, x[i+11], 16, 1839030562);=0A= b =3D md5_hh(b, c, d, a, x[i+14], 23, -35309556);=0A= a =3D md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);=0A= d =3D md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);=0A= c =3D md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);=0A= b =3D md5_hh(b, c, d, a, x[i+10], 23, -1094730640);=0A= a =3D md5_hh(a, b, c, d, x[i+13], 4 , 681279174);=0A= d =3D md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);=0A= c =3D md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);=0A= b =3D md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);=0A= a =3D md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);=0A= d =3D md5_hh(d, a, b, c, x[i+12], 11, -421815835);=0A= c =3D md5_hh(c, d, a, b, x[i+15], 16, 530742520);=0A= b =3D md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);=0A= =0A= a =3D md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);=0A= d =3D md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);=0A= c =3D md5_ii(c, d, a, b, x[i+14], 15, -1416354905);=0A= b =3D md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);=0A= a =3D md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);=0A= d =3D md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);=0A= c =3D md5_ii(c, d, a, b, x[i+10], 15, -1051523);=0A= b =3D md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);=0A= a =3D md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);=0A= d =3D md5_ii(d, a, b, c, x[i+15], 10, -30611744);=0A= c =3D md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);=0A= b =3D md5_ii(b, c, d, a, x[i+13], 21, 1309151649);=0A= a =3D md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);=0A= d =3D md5_ii(d, a, b, c, x[i+11], 10, -1120210379);=0A= c =3D md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);=0A= b =3D md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);=0A= =0A= a =3D safe_add(a, olda);=0A= b =3D safe_add(b, oldb);=0A= c =3D safe_add(c, oldc);=0A= d =3D safe_add(d, oldd);=0A= }=0A= return Array(a, b, c, d);=0A= =0A= }=0A= =0A= /*=0A= * These functions implement the four basic operations the algorithm = uses.=0A= */=0A= function md5_cmn(q, a, b, x, s, t)=0A= {=0A= return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), = s),b);=0A= }=0A= function md5_ff(a, b, c, d, x, s, t)=0A= {=0A= return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);=0A= }=0A= function md5_gg(a, b, c, d, x, s, t)=0A= {=0A= return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);=0A= }=0A= function md5_hh(a, b, c, d, x, s, t)=0A= {=0A= return md5_cmn(b ^ c ^ d, a, b, x, s, t);=0A= }=0A= function md5_ii(a, b, c, d, x, s, t)=0A= {=0A= return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);=0A= }=0A= =0A= /*=0A= * Calculate the HMAC-MD5, of a key and some data=0A= */=0A= function core_hmac_md5(key, data)=0A= {=0A= var bkey =3D str2binl(key);=0A= if(bkey.length > 16) bkey =3D core_md5(bkey, key.length * chrsz);=0A= =0A= var ipad =3D Array(16), opad =3D Array(16);=0A= for(var i =3D 0; i < 16; i++)=0A= {=0A= ipad[i] =3D bkey[i] ^ 0x36363636;=0A= opad[i] =3D bkey[i] ^ 0x5C5C5C5C;=0A= }=0A= =0A= var hash =3D core_md5(ipad.concat(str2binl(data)), 512 + data.length * = chrsz);=0A= return core_md5(opad.concat(hash), 512 + 128);=0A= }=0A= =0A= /*=0A= * Add integers, wrapping at 2^32. This uses 16-bit operations internally=0A= * to work around bugs in some JS interpreters.=0A= */=0A= function safe_add(x, y)=0A= {=0A= var lsw =3D (x & 0xFFFF) + (y & 0xFFFF);=0A= var msw =3D (x >> 16) + (y >> 16) + (lsw >> 16);=0A= return (msw << 16) | (lsw & 0xFFFF);=0A= }=0A= =0A= /*=0A= * Bitwise rotate a 32-bit number to the left.=0A= */=0A= function bit_rol(num, cnt)=0A= {=0A= return (num << cnt) | (num >>> (32 - cnt));=0A= }=0A= =0A= /*=0A= * Convert a string to an array of little-endian words=0A= * If chrsz is ASCII, characters >255 have their hi-byte silently = ignored.=0A= */=0A= function str2binl(str)=0A= {=0A= var bin =3D new Array();=0A= var mask =3D (1 << chrsz) - 1;=0A= for(var i =3D 0; i < str.length * chrsz; i +=3D chrsz)=0A= bin[i>>5] |=3D (str.charCodeAt(i / chrsz) & mask) << (i%32);=0A= return bin;=0A= }=0A= =0A= /*=0A= * Convert an array of little-endian words to a string=0A= */=0A= function binl2str(bin)=0A= {=0A= var str =3D "";=0A= var mask =3D (1 << chrsz) - 1;=0A= for(var i =3D 0; i < bin.length * 32; i +=3D chrsz)=0A= str +=3D String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);=0A= return str;=0A= }=0A= =0A= /*=0A= * Convert an array of little-endian words to a hex string.=0A= */=0A= function binl2hex(binarray)=0A= {=0A= var hex_tab =3D hexcase ? "0123456789ABCDEF" : "0123456789abcdef";=0A= var str =3D "";=0A= for(var i =3D 0; i < binarray.length * 4; i++)=0A= {=0A= str +=3D hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +=0A= hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);=0A= }=0A= return str;=0A= }=0A= =0A= /*=0A= * Convert an array of little-endian words to a base-64 string=0A= */=0A= function binl2b64(binarray)=0A= {=0A= var tab =3D = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";=0A= var str =3D "";=0A= for(var i =3D 0; i < binarray.length * 4; i +=3D 3)=0A= {=0A= var triplet =3D (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << = 16)=0A= | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )=0A= | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);=0A= for(var j =3D 0; j < 4; j++)=0A= {=0A= if(i * 8 + j * 6 > binarray.length * 32) str +=3D b64pad;=0A= else str +=3D tab.charAt((triplet >> 6*(3-j)) & 0x3F);=0A= }=0A= }=0A= return str;=0A= }=0A= =0A= function str_to_ent(str)=0A= {=0A= var result =3D '';=0A= var i;=0A= =0A= for (i =3D 0; i < str.length; i++)=0A= {=0A= var c =3D str.charCodeAt(i);=0A= var tmp =3D '';=0A= =0A= if (c > 255)=0A= {=0A= =0A= while (c >=3D 1)=0A= {=0A= tmp =3D "0123456789" . charAt(c % 10) + tmp;=0A= c =3D c / 10;=0A= }=0A= =0A= if (tmp =3D=3D '')=0A= {=0A= tmp =3D "0";=0A= }=0A= tmp =3D "#" + tmp;=0A= tmp =3D "&" + tmp;=0A= tmp =3D tmp + ";";=0A= =0A= result +=3D tmp;=0A= }=0A= else=0A= {=0A= result +=3D str.charAt(i);=0A= }=0A= }=0A= return result;=0A= }=0A= =0A= function trim(s)=0A= {=0A= while (s.substring(0, 1) =3D=3D ' ')=0A= {=0A= s =3D s.substring(1, s.length);=0A= }=0A= while (s.substring(s.length-1, s.length) =3D=3D ' ')=0A= {=0A= s =3D s.substring(0, s.length-1);=0A= }=0A= return s;=0A= }=0A= =0A= function md5hash(input, output_html, output_utf, skip_empty)=0A= {=0A= =0A= if (navigator.userAgent.indexOf("Mozilla/") =3D=3D 0 && = parseInt(navigator.appVersion) >=3D 4)=0A= {=0A= var md5string =3D hex_md5(str_to_ent(trim(input.value)));=0A= output_html.value =3D md5string;=0A= if (output_utf)=0A= {=0A= md5string =3D hex_md5(trim(input.value));=0A= output_utf.value =3D md5string;=0A= }=0A= if (!skip_empty)=0A= {=0A= // implemented like this to make sure un-updated templates behave as = before=0A= input.value =3D '';=0A= }=0A= }=0A= =0A= return true;=0A= } ------=_NextPart_000_0000_01C6BB4E.EF542470--