From: Subject: It's thumbs up to new way of changing TV channels -News & Media @ UOW Date: Sun, 2 Sep 2007 23:02:38 -0800 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_003E_01C7EDB5.5B998640" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138 This is a multi-part message in MIME format. ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/news/UOW030638.html =EF=BB=BF It's thumbs up to new way of changing TV channels = -News & Media @ UOW
3D""=20
3DUOW=20
3D"Excellence
3D"University 3D""=20
3D""=20
3D"Site
3D""=20
Advanced= =20 Search  
3D""=20
3D""=20
UOW Home > News & = Media >=20 Latest = News=20 > It's thumbs up to ...
3D""=20 3D""=20
News @=20 UOW=20
Opinions=20 & Experts=20
Campus News=20 & Events=20
Contact the=20 Media Unit=20
 
3D""=20    
 


The UK=E2=80=99s Daily Mail graphic = indicating how=20 the hand signal device works
Dr Prashan Premaratne with a computer = image=20 of the UK Daily Mail=E2=80=99s graphic showing = how the hand wave=20 technology will work
 
 =20
Related Info
  • Back to=20 Latest=20 = News
  

It=E2=80=99s thumbs up to new way of changing TV = channels

17 Jul 2007| Bernie Goldie

The days of scrounging around sofas searching for = hand-held=20 remotes will soon be over thanks to a =E2=80=98wave of = the hand=E2=80=99=20 technology developed at the University of = Wollongong.

The all-seeing wave controller is the brainchild of = Australian scientists Dr Prashan Premaratne of = UOW=E2=80=99s School of=20 Electrical, Computer and Telecommunications = Engineering and=20 Australian National University PhD student, Quang = Nguyen.=20 Quang was earlier an undergraduate student working = with Dr=20 Premaratne at UOW.

Story of the technological research broke overseas = this=20 week while Dr Premaratne was on study leave. He has = just=20 returned to Wollongong.

His test results were published in the = Institution of=20 Engineering and Technology=E2=80=99s Computer Vision = Research Journal=20 and then initially carried in the UK=E2=80=99s = Daily=20 Mail.

Dr Premaratne and Quang Nguyen have developed a box = that=20 lets television viewers change channels, switch on the = DVD=20 player or simply switch off an irritating presenter or = program=20 with the wave of a hand.

The controller=E2=80=99s built-in camera can = recognise seven simple=20 hand gestures and work with up to eight different = gadgets=20 around the home.

Dr Premaratne said he believed the device could be = on sale=20 within three years.

He said apart from the frustration of sometimes = mislaying=20 the remote control just when you need it, they do tend = to have=20 different sets of commands which have to be = mastered.

Dr Premaratne said people have tried to replace = remote=20 controls with voice recognition or glove-based devices = but=20 with mixed results.

His device is designed to sit on a shelf or table = which has=20 a clear line of sight to the television and the owner. = Its=20 software recognises simple, deliberate hand gestures = and then=20 sends the appropriate signal to a universal remote = control,=20 designed to work with most makes of television, video=20 recorder, DVD player, hi-fi and digital set-top = box.

The device was able to switch equipment on and off, = alter=20 the volume, change channels, play and stop, Dr = Premaratne=20 said.

He said anyone could learn the gestures within five = minutes.

One is used to tell the device which item you want = to=20 switch on or adjust. A clenched fist means = =E2=80=98start=E2=80=99, an=20 outstretched hand with closed fingers means = =E2=80=98power on=E2=80=99, a=20 thumbs-up sign means =E2=80=98up=E2=80=99 and a = sideways victory sign means=20 =E2=80=98channel=E2=80=99.

Dr Premaratne said that crucially for anyone with = small=20 children, pets or gesticulating family members, the = software=20 can distinguish between real commands and = unintentional=20 gestures.

 
 
 
3D""=20 University of=20 Wollongong
Wollongong NSW 2522 Australia
Telephone = +61 2=20 4221 3555
 

CRICOS Provider No: 00102E
Privacy, = Disclaimer and=20 Copyright Info 2003
Feedback: media@uow.edu.au =

3D""=20
------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/spacer.gif R0lGODlhBQAFAIAAAP///wAAACH5BAEAAAAALAAAAAAFAAUAAAIEhI+pWAA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/uowlogo.gif R0lGODlhIwAjALMAAAAAAJCSaxNaoKa8z/JgSf+ZM3alsv///1JqdfSgZr+uddPg7e06Q//HJTNm mVZ3mCH5BAQUAP8ALAAAAAAjACMAAAT/0MhJq70Y6M27/54BjuQnlih5pmy3boEiz3RdB6EXNE1B FDxeAhhs/Hg4l65HaBaeTSdUmuS8NIFEM5FgFLoE7Y/A4Hqrmytgt20yw0efuIHWqHfgo5FBBuYJ dDkdO0+FPIVPPYiBSh0PDghIDgo8Dw9IAjsNCAh1AGoPAgKcoqMOoqSoCKIPghyhpbGyswKtja+l DroGCwsSCwMGuqesrhuhnQEDB8wHvc0HAwGrtcYaoTvK0M/N0grFt8eo2s3czNKltlYeqwgK5Mzm 0QEBqNYAqwEF8M4L0NL1Rt0DcKrTsnL+ugU45cDEh050BvTqZUDiRG8CB3Z6V2PAgBsIPRo6fChg mK5kJkNmHKiBGC1ZIkeCoPZSVEyZM2s6UAdCDTuXuRCg8PkwJQuiM4W2QNpCRdOnn6A2ZSq1QwQA Ow== ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/leftside.gif R0lGODlhIwCAAeYAAHalsmmEjGiDi2eCimN+hmJ+hmF+hmF9hVx5glx4gVt4gVp4gVp3gVZ0fFZ0 fVZzfFVzfFRzfFRyfFRye0hpckhocUdocUZocUZncEFjbUFjbEFibEBibD9ibD9hazpeaDpeZzpd ZzldZzhcZzhdZzhcZjRZYzRZYjRYYjNYYjJYYjJXYTJXYi1TXi1TXS1SXSxSXStSXStRXStRXCZN WCZNWSZMWCVMWCRMWCRLVyRLWCBIUyBIUiBHUh9HUh5HUh5GUR5GUhlCThlBTRhBTRdBTRdATRdA TBM9ShM9SRM8SRE8SRI8SRE7SRE7SAw4RAw4Qws3Qww3Qwo3Qwo2QwUxPgQxPgMxPgMwPQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAQUAP8ALAAAAAAjAIABAAf/gACCg4SFhoeHVoqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWm RD6miz4CDjuqUSsFAhRJqlOyAhm2prizHz7BwlGhTAoCyMkCqZ6+AsDCwcSczrujsbO1payuqqiq ikwpTOCszKbm5cvqKNHuw5usyvPK55is7e/u05npqv7o1qkSRw6cwYOK5NGjZ+8SExUpIkqcKLEg woubmFi0ssKAgActPpUQAGPRyAcpIggw0WkkS0VNdFWZ6UGAlE1LVjLyUOAmTAE2NsWwuWhKAQ2N BKTYlEIAoxkCeCRdqmkolEUREjSC2mOT0QwzoYZc5ESBgk5QFUBoxUhFgQJC/zwF6QDBRBVGIjb4 xMg3E44UL/YygkGE2oRkBWoUXbFAoCaer5rwhLKEp4AGrzg9W0RFwDFaUjsBtLLW2qfRECDcBYUa gihWXRelfi2Aw0SzKChuvORjwEKGfYN/iuKDHyYiEApHGs3b8SPmlkZHKLnKeXN7ShlBrzQ6e/WG 0Z17T2g9fGxFAlAw+lGeu4DU8D3DT92eEhEJ8/PPVy58EpEUQ6jjGQjnjbIECyoJUMAGNKw2yhQx dDCLABW4IJgoP4zw2QMmGPfaZ+B1UsQIa33U4SdT4CAhMhVeqMkSKlyAzII2uBgPMgoQWMp/Afbn 4z2/AafJQxQVGdFuPyZpBf9xPiDpSWUTzviBEqDM8FYINwRzAwlvjcWJEbq4SAUGBfCyCQYK2GjF FApQ0IkAJ0jCglM3hlgdf0DaSZ6eksAmCXt8LlebkRJxUN8kvQVZj5KMNuroo5BGKumklFZq6aWY TsqkPvvcqGgygUKy6Ts3rEXAiaPIcEwGanIChEoOIEHKEYc9kJkolQmQgJeh+FKAXaQwcYBSHobC ilr65YfnJfclq9+ymZ4SDLSeyCDjPBWieBgE+QSjwloOtEoJmYo9kkMBbuKkUyQrCEBlVURFMoUA LzBFpyTjYYKDu5LkFJQm834gyUjiStLuBy5O4ZInI300UYICf3IgBBMWAMH/Ce9GqzF5nyIT6iNE EjqRk4wSpM7HdZ7MDqfRFOtex4f2mR7L8GiynbExe3KzIkWkQC0lJjuiQwcg9mrthA9gLDGCOFr8 xHAlbHjCEFfMdloBItzQiNU6vydCgVx7MvRnFaCwRNigFMFCiZ7V4CCuMSZTocvNRDgLyo3wiCjJ iOKoYykHJrhgg6VAuCKFFpqS4YaokuJD0aKMWCKHdF+S4uEtShy3ghvUiPOABYaityKo+PAzJ9bS k20z23brw7etFCwJuZCcm+6L60LSbsaYDCXuvPVq0hQl+V6yL++O+OvVZpEQzMnBCS/cEjIoSQQx KBNXfDHyG4MyKs2Vywwz/96MfB9NqQKcGr4mqoZJyqutyDoKrR/dGkquu5LiK7CjCEtsQMhyVmpO J4lmCRA+BOzeo8zHqfVBQiGfIt8iGKglUzUuFO1j1ftgJT9R0M9WpMAfr0Cxv7eBwn8pcKDN5HPA 5GzCgC1MoAJn2A+Y5QwSIRPZkWjIwx768IdADKIQh0jESBFHhY5ADgF3JjM+MVFQ9piOdm74HPFQ ZU8pW0S+nvhAK05RguQpUHrWQ0VHsCI/LIwPGK0AwwPKsIiM2A0TtAYKIDDgXoq4ga7KxQmoJOCC VsiBSkZoOQM44GmQIJPsHjGUuEQiJsHLxPAmUTxL+K5f9FLXSyAxEu5Zwv8l0WMeJxpWvYhcT2Ik 0p7S4FgJCr4DiY2AoKLW6Er0qY8UGVzkJeAXq1nVyn7Yq0n+HiSLX5nwEyiEZXMCKMA3JhE/LXTh DI/4Qml2cY1M5GIVo0gdLK4QO1e0gjbN6MXvZBE94RxnLAUgRvUsAlA3QiMz17LGNjaTlcgch8r+ UcZv7jMga6wEPDVBhAhEs5+MKGg0rdm9oAH0n9tAaJ4gSoqBZkKhLZQo6QwaTWfiU1TFqeYSNSrO mKnzi4yQojn9qcV0krQ7LsVmOb1Zw3aSUabyRGM9oRnDjwKtEXMMhR3xaAU9JoCPm/AjIAUpAEJa YgqGROQjFCkUATgSEpCutBfxwnmJS0YiJ5HERE42+YhOjnIloYzYWR1mPWSotRNLSOWMtucJFd7A o9pRADAZ4YTDrNF/DriqIhSmIEBarl3u40g2zNSJJmAgfSJoTDdGAYNkWEB/iOWAZPeaVI/0shqe tAQTDoMAYE6hJr9S5iqMCQn6/dWBdwUHNQnKUHLK1IkvdY5KaTrRlqKUpej8bQ3BKVwg2fSduc3p fEhqT2fh1afQja50p0tdJQUCADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/uowtext.gif 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 KFBgClRIQwgAADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/groups/webasset/@web/@media/documents/siteelement/uow022131.jpg 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 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowfrag_search/images/title_siteSearch.gif R0lGODlhSAAQAMQAACFzi4KkkuHVmT2BjcbHl2aWkJyylP3jm1iPjy96jLjAlkqIjtTOmO/cmqq5 lXSdkY+rkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAQU AP8ALAAAAABIABAAAAX/ICCOZGmeaKqubOu+sPoohDGIyEHESUAQgUSMNYA8TI6D8tBYABY1wINw XCUYywNDOEzldqSBEpFQHBQlyAHCejATA8Eh0PXqSrmDcPC4QW0EOkcQcgpOJGoMOAVchGeHBYEN BkIGBAgKZA4NWgUAXxANAk4JnAw3I195OmoCkqg4Sg5cIq2vYjqcbJIHCEmuSgN5CmZoUkuUsQQJ SQ4LnJVzJUlMdCLQAAZzU3QFd4F0pXrZczmKX6lYWkLoamxKEBCBbCUPnAcOIvDyayMDSTsCIdB3 QIQwYXfQkQjAKV+7flngnUig7cCRiP0GmFESsBdBPAnvPPF0rMGnO+4AkoxBwBIWjoEAkqBZ2fJZ gwfoBH4EcBAdOjcChHgz+fBdQSlUSMgUoW3m0SkPknjK6VHlUXc+7ySQw8CRQ5RaZpwJdeCQiAVK FBjgdKQYWSj4CmDpCNMtpwVZwSyQw5HdnWc6EgRSYsCEPWQiBCP2xgQgAJ1P+B4onJcEXlolEiA4 JAwzHphhyPgDneJyndOou4QAADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/groups/webasset/@web/@media/documents/siteelement/uow028118.gif R0lGODlhGQE5ALMAADSAlUeRppDQ6nK2zWCmvYTG3lObsTuGm5bV73i702arworL5EGMoFqht02W rGywyCH5BAAHAP8ALAAAAAAZATkAAAT/EMhJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iu73zv /8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHjMDTgY5PQMwUYMLAW20rFoLxwfRRtxuBz2 CihxBRRsgWo/ewJwckgBbQV1CAYeem2UFgaAggiEE4aIiXuYE3EISXECAQAHcQuVbAIIDxd6sgiH JoOFuKE+sWxvFKZIf24TmgirHJYJnRdxzr0nu75DbJFsfaWNRg6gEt8IeMxsBN2859O6z9ZC2OoN w+hE4rnqyxuW4uQT/ODsPLkDgo0BmwTzTh0xeExCKlinAEpQB0AiiWoDRREytQ0AMQoK/0wVkCch QIECaCaYLEAKAIOT+UJiI8lB1isA9iB6RICQgjNCEgMkkCVgQMoKDVIpaNXO4UgLDqQVPZoxBTYA DcxxU+hwTzAJxlqqo+WPTUpTe4RtGMAmwAGiHfXJsVWhTiCAyRTlk8B2z8mmFddJyOpVVVUVV40J /AigmQMHfQlIsEuhr8DGCG5aeuDAgCmaGQgnMLVX7qlk+RhSAvcWgYAGDhrUWdAx2UgHlgAHZbMA tqWbh09cBSDtbLc6PSXoufmTgiSuxHlOBuyKQ+s2oMudMkYzWR9whPO1pumqYwBZlyU6E9BxX3Dh 7ZJJ3qlQHFWGeM4tAgusX5xDEn1TQP9cGDyAXQiWdKWWgZ6AE4dafLXDUHYYBZaLMfNJwFAu740w HADodaWQfhaAYp8EmhTgTC5skFPHZax0cB5vIiQIgIHAxUEWOLJkqFwjhFG1U3rrvIRSBRZ1CMKH fa3yEYOMCMMGJno8oEdPj/DxY0MfMNWGjw0owKEFNhK2DRskgWJMP+GYhRl0XRE55gVJKunBh1nS 8tEgj/XpQDX/dWXAN/tlBZyXCRCogSl0uNZRXxrYqBpOblpIKQIE+OmAOnhUGCcvc4JFAFqh2snB hwDMRp+IXkESYU+yoNEWZsmxYooAPoYGSjJkDRnpcbNgBpyJrXrVKWCffiIYWH1tYmr/CKhaYlIj aBXriaEAPHJTHPLEkWtjtxypgaoSSEOOLLWS2U1zziRHbLFtHAujr8qOaUC4DRhT6rMZoMrQAHsi a0GWB2TVk4FvyMLmBAxIJSQFWdLEAFwb/soVRT3We+nCFXhKrwQSEXaHxvx+gOpOAgQ8b4njsDVf VgPSU4E6K0+kDQWEFYCPxSqhOSvIvfCzqMAVAjRxJ3HVWTIGJxPWRoQ1zyMTOaoJXIG0GNhY2R7A ZY2OTa6B6lKLGhi43zxyTsAWe0guu3S/yBrzNGZn+5PpBAx+zROX4VSgr9cICOml21ejg1bagX2r gAFoqENg0evI0ivJb29wcnRznzgP/3B5XSYNpsiQLfYFyWQ3tlY8T5Abhw7yDUDp2aLZsW7rJKl0 5bzM67RCrXGYk4ZtTJ5bP61dRpjpYBG11wHNIoC86uiIM87otsSVyjYvUnBA9pSHSIE6++IO9Mq3 cBVZHw7ARcEtLUlfOE9oNKA+4AI8MCgBkqA1gKJbtg0nOAwpwCqYBxBLGOV1+RsdAM6XLVKJTwOX W+DcWPGcNhgmIUK6XLUOpIHmpQUrseDfm2YHI4CowysQos8ezKbAo6GQDZN7YNtW5r4JDK4TD1sO I2LICgPZoSWhqSBLVFIAjkEPTgaKYcjKhysLEJA3g7oZ0Dg0Ld50y2oyLMEBHiPCEko8pjQcYMBj HkYDM4BRew444wa2qMYsuvGNcIyjHOdIxzra8Y54zKMe98jHPvrxj4AMpCAHSchCGvKQiEykIhfJ yEY68pGQjGMEAAA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uow_navigation/images/navarrow_down.gif R0lGODlhEgAOALMOAOFtK/PGre6rheBnI/bSvuR6QPfbyuufdOylfeN1OOaGUPG8neWDTN9kH/// /wAAACH5BAEAAA4ALAAAAAASAA4AAAQo0MlJq704650D+yAjaEljmsMWnCbCKSfASecyO0dT3BJA 8A4DcDiLAAA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uow_navigation/images/navarrow.gif R0lGODlhEgAOALMOAOFwMOBnI+ylfeWAR+iPXPPEqu6uiemWaPfbyvK+oeR6QOBpJ/bSvt9kH/// /wAAACH5BAEAAA4ALAAAAAASAA4AAAQl0MlJq704681B4VTTDAjoiOIBouJibGwDJLAYCGtDmI7C 8EBeBAA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/groups/public/@web/@media/documents/web/~export/UOW030638~2~DC_RELATEDIMAGES~DC_NOHEADLAYOUT/64646-1t.gif R0lGODlhgAA+APf/APj07/fj1+De4PHXzNfs+tbi3c3h29Td58Pd8MfY5tDQ0PTxvefkuPzQv/TK uuHdtevFt9rVt9PGusrCuMvFqva+wdy7xcG7wPW3ufSoqum/sOa7q+ClrfOeoPOVmPKOkfGGiOCL kti5tNW1qdqrsdqoqMW7tcS3qs6lssaro9CqnMKznceonNuao9SWoNuHkNODjc2RncmdgceMnM6B i7/g8a7N5r3V07fQz7bH2LXDzKnB2J3C4p7A3rO8xKe70qa4yJ2/4Jm31YWewLGvrrqxn7Smm7al j6CxnKqjmqyhjqGeoLedkrSbi7yFmqebk6aYi6yPhJ6yv5iqt5qkp4yjsYqjppunkZSqj4qihpSd poKavYaZpo+OjqaIc5OIfJ2BbYuCdvB/geF7gNh7gsV5iYB+gPB2efBucfBqbet4fOttcu5kaOxe YeZVWuRMU+tFSt5mb81ufdxQV9pHUdpDTuc8Quo2O+osM+koLecaIegTGugOF944P6l/YJR8dZh6 ZYN7dYJ4aYBuY4dkT4FdSH6ewV2LyHeVu3yUo3GOt2eLtWCDrniKlnmCiGmBlGmCjViDsVWBrXW3 eHagdnuWd3CYb3qEfGaYaFinY0WsVl6PYFGYW0CXUESRTEyLVkKFTTSqTS+rSz+aUDyWSyiLOx+l P0B+wnx9gmV9kWZ4iFN8slh9pEl2qEBuolN3nF5zhU5yl0Npk0FlizZ3uzptoy9qpzplkzdgjCtm my5hjjRdiCJalihXiAVntgdgqAhbohdVlB5RhBBOkBhMgQFKjXNwb3pxXHJpXG1jW3VfYmNeYXpX RGZbV2dTSGpPQFlpc19gZFh0XEdyR1tbYElXZEtHSHdRPXJMOGlVPGtGM2dBLF5CM1dMPFRELklG PEA+QmI8Jls/MF05JEQ+PUM2JTFWfSpReiVLdCRGaz1bRj1HUTxBShJHfx9GbglEfShlOSVSNypS Lx5jLTw9QQ0/bzg2OTU1KjEvMjkvIyYkKSQjGiIeICEaHB8hGhsWGCwAAAAAgAA+AEAI/wDrvRtI cGCvXrfa3SK2EFcvYsJ2ybol7OAuYgcXyrp462AvXAU9epTV651FYrg6Pjw48Z0sWbh2ySTp8uC7 W+9wYby1y+BHjLsegsS58F3QmyYREs3JtCBBawD4uNlDpKoxAMa6EOnSZclVAGCJKJgwShMmTpgC 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 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/groups/public/@web/@media/documents/web/~export/UOW030638~2~DC_RELATEDIMAGES~DC_NOHEADLAYOUT/64646-2t.gif R0lGODlhgABgAPf/AOru7uDf5Nnk5cjl6dzh3tfd4sjb5dTZ2tXRz9XHx8jV2MXRzsbG1sPKy8bB vcu92cO+xdO9u8e3tsCwrcKpp8Ckn8GdoMOWmsCNmMuPjrXh7a/g7rvU47HI4qXa66TA4LXJzZvT 453Q2pnJ2ZvEzY7C0o/Cz7bBvarEuqG+4Lq70ra6xKS61ae7xKOt06euw5C74Ji32Zq1x5mm0pCv 2JarxYy03Ie0yYer1YiqxZOawoKexq+prLmhnKqknLKdorqNpKmdoqePoqeXmJyyu5i1ppmqtZml p4Wzv4mos4mhqJqlmYSok5SdtZiapIiYs4qXp4SMo5SMj8SEfaKBbJmBcMV6hbZ5iaN+kod9g8Z2 ecRrcshQZchaWcJFWcswLaF9Z6B3XqBmV71eW5V5aJRsUpNfUpVYRINbU4ZcQoVPQoxgPYdWNopC HYM+IYQ6G3uwznys2XyhyGqbyUSJ10WIz32ntXqjkXeZuHeSrn+HsHWLpWuWumORq2eKuGWKqXuV nnyTjnmEl32Ei3yEg3SKj3ODjG+RjGeMl2eAhDue0y2B2zeBj2WgeXeBdj2JVXt9pnZ8k3h6hG55 lmx1iWlrkmhohVx5p0l4oFV6k116jUh2nSR80Bt82AthrAxeqHd2eHt2bHZsc3ZoZWt3dW1za2Zn dWdlZndnWnlnTmxiWHBeYGNZYXZYVntaRWhbVWZYSmhNVGdIRVlidl9hZ1xkWVlZeFdWZ0JYcExV ZUtKaFlWV1dVS1dKVVZJRUpSWUtUSEhGV0hHSHdOLXdQHnVJH2pFGlVGNV1AIUtRPkhDOkpELUM9 VUM7RHY+OnU7JGg7MGc4JGMtKHY1GnMtFGg0GmcxC2QtFmUvDVU9MVo3JFUsIUg7Nkg0KEYpIVky HlYqGlwvC04wH0cnGkUfHUEdFTZHUjVBTT1FOzw4Uzg5RzIvQSw6RS0sQDY3Njg0JzEtNjYqJCsx Ji0pNycmJT0yHjkkGjkhDygjGSAdIDQdFSYbFSUWDR0iGxsbJggIBywAAAAAgABgAEAI/wDLCBxI UCCZg2QGJiyTcGHBhxAjSpxIUeKai2vYaNzIsaNHNsNADhtJchjCkyhTqlzJsuVKhgdhVpwZMePH mxpJiiTpkkyVnz99Ah06lMpPo0ipJFXKlAqYp1CjSn2KkqbVgmzSpMHJsSRJomCJksH3r6zZs2jT lu1Gpqnbt0+dTgVD5qnMqzO3cs3p9WvYoe/UCj5rL9q0a9fAgRvHr6yrMmDeSmYaOepBunRj4pWY poxWvR779v07tIw9tfrAXav2TKMZMlvPgFw8jt6/bvoSl5nMWy7UlAw3R/ystavo4yZJix0GLtpp e+CqVQvJRrZGxNM0vsmucZr0MqTBVP9hmfml8ILEXalXj/x4z5XVrGGzBs6evXHR69v3Js2Zs2jj bKMYfttoIwoookgxRA9DDMFDgw8OIYU7ZwlzwIUECKAhABx26OGHIIYoIojpoBUKA7KM9F5KVUjh 4oujcIPPfd9oo8024wT4TYHRRFMSG0EEIeGLD/Jg5IOgoHWEkUc0yQMIPDDxyB08KHDhlRcqAIIC ghzBAA8HaCiAAgOUaaYCChggpgANaGgKWsKsIIuPPb1op4tBCvliEC5K6ESQD1JRRkdlHBnEkYgi +kMQ3JylDAiESHEEKaeAIgUPDSRqZAMtSOELKVC2AEILCsxSFikijDACCamOAMKrWyr/sAKakaBF Dw+x2IjKKKj0igoZLx5054sNFtvnkHYOIaSyxTZ4KKJCRshss0PscpYUTvgiyyvcCsOOE68++SQI DiJKhKhOSPIPKLCCQMQIJdzgzz9FwNoCEa9GkZYUrQxTja+q7OoisMO6mMWd1DZ4bMIKH/tsucsy LEVgZbkjiSBROGHECyuAwIABIKOpZbst8GDEyUYQ4YQTUEBhBBRPNCGDEVcEccUQVmwhwREGgFBD WqA0U9aKRBOt0F3nJT3QXnshV/RJ4x00XlA/lQfUSeX9Vhdm5dVVlUNKT7QGaEwfF/XZU5OGUCrH qHXaWbD41Jtvvs1FFVVIh42eTVwh/6ccUKkMJvhgx0g9N1xznaT3QxqR3VFIfv/9tmD78LOPN9xw k2IaZ1inURtvVFMfeIdLZpnWCC0+UHFZGdfeSH8HxYY1jZV1X46LlcWNK89EAw5317TG0TTRCCWW eFXQ5dRlzLO0OHFaufK6ewhR/RcZw9AHjj77QKfaNNNQNw04NvYoXTU5btMNKJYy3GBTBRecRRaS 1M++JOyLYsr+/J9yy/+32EUvgkFAZqjjgAdcRzvgMY8GOpAe/oigP+ghBRSp6GkqAYUp7LGPDt5H NT3qUX320RzRfWMko3jRwaQABQcN4QdSsNZZFoCHT3gCD6+SgQzm0DMDKIAFc4hVDP/GZIAYxAEE ReQAyFiARJAVMQYG6IASF9EJTgiAQ7dASy0saBKixW9gUkDFMHzHo5L4SCdsIIOhLmWkH2hKCrYx SylA8KIlLeBVJ8hju6CEJRAYoQUy4MEArFQAEHggBHv4hzysdABGHuBVaLIEWtyBKxupZBQI+aIm B4EgYEGIT9j6Ew8ApSmISYsHUkDLCaQgCVPkghJH2mMDZnlHOyThlrAywh53uUdxvUoQ+3qFrny1 K0sZTAorHFazFOS+ZhZLUxFz1igVdhZStMAb9vBGN2ShClWogx3s+AUPQDGKURyBCEZK2RGMsKRX 6VIJMlACEuxwgxEgIhG3FJUfR/X/BKD1wj7cCugrDrJCY6rwoPFrmCaP9cWEkWFwEDXLPuhB0Tiq hR4UMssE6TEPdxxQGMHoxS5GugpfDM0gMUlp0Y6GNLCpTnV8Y9pNjkMMDNr0pjJx6UsJkoaYypQv ormpUF3Sta4BZ6cEuchPN0I9l0TNeGAxylGqgJSiSIV5dssqQsCA1IGsoQw+nelOvII2n1QPqmFh SDfiUZZ9dOMxJymdUuKS1d+Up6te/anZYjeUwO0jomnZByoOFxmnyKVuV01pV3vatLGWhK8JoRhg BzMSuTYlcV6ji0F2ShyctCd2Y5ksWvQxDu6hRRZtsSxiE6uZl3Z2ppFT218H00G0/+xDG3ppQxum QY3E7GMcaVStYRHrNcWp7jOtC83rYjcMtXQPP9UIX1ascwYxDIoN33gufsCRWtVelSpVOe5rHbtc 5tLuLL/NET72gY945Ag/2XlDc8a4GvBNh6pMAQpcKFNco+o0adBj3fTIytcqpGIxp/ntgPCjDR91 pxpuYMMbqPGGjWyneEORW/KmdretvuS/wglwGgY8Gqn9DXuKkYYHoSu86pzhGuBrzTPGAb7DNOes GNQvFajVgx7zYAISkIADEpCAKwVgRAE4wIiWvIIDPIAnLLoaWMpQjdVgwz7bXU1imhONBgMId+Pw xji4AYpTHKxYDEoYHM+iigNk6P+KS46znOOsDrRUMEVdFCqVZdFeLL/3z9BJzH1E12VRCOtIwOpB hDx1lnc4ck1zjnSkg4GWU3BxqHZ6xT70YQ/udfDTm77PNqLRu2iwpgxSACWxECWFUaiSBxnAFAga cIAGMAEFJ3jkrGdJ6yO1qQaUaAAAGqkAEF1RAAVYkwI0ZAu0AENOY3zaF7Pwim+M4z4hzHaPfsSG cqHSRUZ61pFSeS0eLCmWr1IEHA5gBEFI6gDJFkAjG3AEBVxK3hoypAf27QEQhElkywYBsiV5FnTw QBbaQMaKEvosBQ2MDNLzikfO4G1xj7KUbDXLLujIpCNYigcLoAAFjHSCLXFKBoD/eNW5RqWASeTC FEkIQQj+8A98VElkDNhSrCiBFnlUUhsuaegyW30KSWShWZp6EGzUyAMnJOoH3g73EF5xFnqsUlJS AEUszW3uJY3MEIF4UguSAAIZKEALF7iAFV71gy5g4AJXwAAXtGAvNAHzLP2QQq6ADhMy7IpgBFuo 4IlVLItDKwg/gPo0p2XRf6CyW9+UQruM9KoGjAoXmciEJgShS7LvUp+fh9KrEmlnYWqDmH8/aDKT pWZnug+a0XRWsR5qFkLwoBvdyIYvuBUMdfCAEuqAAqyOoASXQWFJLuMBMEH1qhYYgQdEuEFZjmAv fIEACmkhxD/tgfoUrh6ZQne9/+tTHW4jJUxaay7LxrmRo22W8xfmeEU5579OHrTg/vcf1Q/GMEo1 OvxJQ1AGfOIFX4BKJUN6ZxE0ZREwqsAtv3JMdrJ6q+c+zKRmFUgsQaIsylQsjXcW+UBR7tAMzSAM IvUKp3CCJ6gKI7ULvCAMLigMzaAO6cAMwaALumALtmAJlTAJkKAHT6ADNeACLDADaVEKQvMPrwAL sBBQhkZQEBg/gTd402YnsVcs8CBRopWFWmgW2jAM2lAO5VAQqaMZLuUQYxgcYohXeoMRYbVUIEFe F+QSKAUcitMSeaOGeKFUbshUQEUSxVBTQxWIXwNieCgQbahXogGIgriIdliIhv8IVnsIh8OgiIxY iXWoWHioh27YVDc1NdXzVMXVE1wTiqTYWnjoOE0TVDmWYWgVFFwzHpiBNZeROB3WPI4IiTLFiSuR NgU2VfilFFSlX5VhFHU1FcV1iqjoWaooNVDTisrxiUchVW6xYYizWonFVQcRBmrIOmUzGlKGNtcT NcdAFrblDfXwDvhwDL9YOsWYNXQRBoSoNMn4OLHljGGBCtyQDW0zWfHgCt3FG4VljXaVGZnIjbAl Gr34E8uwhWaBD6RjWXXFPHjYjXsFWcrAkGfRDbshXHOFWaYoXsl1kN54YuSIkRLlChxpjR6mWZw1 jzkhicPAV/tokuglEAFJWHX/szWxiInP45IwCTt/AwsMCV2LYVplYRLCpVV35VqDMo/TEzslKVra 0B2HkRj68A/3wAYbCZECGV6u5ZTlpRxRGVizRVH/4A1oUAbWoVvgcw3XxhApuVrHGI94AT3KFZak 0Q2UczvTIRCg4TlsMD4epA1x6RvOI17jRWIx+TdlIBipgR0hsRtgYF2DMgzfYA8N9g2qsQ0buY7r iDjGaFw9aZA/OZJq01xpgTvV0GXY1A2k1h3joA2ysA/xoJmHgZJJaVel+JXI9YaKuZiMWQ3hcBak xUGx6YXZhB8wFpjPoAbD8AzZsVvAiV+/mDzAeDdZc5gAZpd68ZsxaY8ZNgz6/3CV/0BaOdJB3WAP 2XBGq6ER1DANbbARu8Vd4WE1/dWIemOX3ukXkOU74PAPCnY+pNZiVcYd4PM5F2ZWYvGNHtYT+Rlg EeedvYhizwANAJojrLERncMG2MEGYhCY0+AG3iEdUBM14qFnFSGLBDGLTMFjFSByFBBkERABREZk PABl4Fka2vOfChYd3CEbvoM7AiIdikE+CUIFW0NV/kUGEgIhSWckK7ACEJApl9IADMAAWHIhBbCl WwpnHNIAEGBsGrKljXSlDKACK6ACTtAAD4BnOJajZFAMq+EcH4QY0QWd0hEN0DASQXof2LQ/7bMg PJBmzUIF6VcW+NAN3KAMyv/gC77AC5D6Ct1UTqEQCqBgPAgzBD7gA4kiZA7AawmAAFfSIe1gZ5em Erx4NgeRPfJRH7gTHYCWTfyBI7QBDt7ACp00fhmlfhciJpL2q3NWImfhCKeKQWVAEtZwbbdDG9jk DduwDWK2YOBQIL4gBaJwdDxAAWmmaAojDGfBDVjiq8A6riBCaWdRCsWqZ6MgDB70QUVqIw2mH9/g Ow2GWsByKATjQhIiQ4iqADLAB3yQAzJQAzUASDLQAixwf3KgQyAQAyzAAjHQsExEAzFQsTjwsBUb AziwsRobA3RAB3UAZ7qgRel6U/NDC90DarfzXsYZQuBwQiZhJ04AbuN2Cmj/0QBJsAmY8Ad5gAc+ Kwc5gAc69LAQywI4EAM5sAN4IAd+cAk5gLEx8AEpEAMpAAIfULEQGwMwEAM2oGQCkEVnwQsg4KY3 dSenEA/d4w1qax/3IQ44UiDP0DurOQx9QoVRZ61oYSQXgCgLoABF0AgX0gAKMEthwiZQIgCRkAQ8 cAIbsmxrIia9KiaO22xn8WwpUjzSVjCg4AvXFiAhZCMCMq9nNBJpNG54UiSGkgV21nWJAgKMAAjE JrhZqgAtMAkgsAJgIrkasLsboAEc0EgDsCZtIgAEZxYGlyIK50WaRAamlj7bNkbPqxNpcCRNWn6J Qm5mAQorcCnnhik8wAdk/2duz0e48NZIl3JvCpBs+rYH/jAPtFYAV4ImIFAAClC8FXNwCae8CHUn WXCs0fAN89oXHQEGT2p4qNR4p0BHTkB94DZLe9suI/MqrmIvPtRIICBziUQPsosmlqclaMJzjVZJ mBt0BaMs5sdMT5gQH9E50HIkiqcpu/oPwgAClnIEg3DDVcq69aYADFAyqNB8okIqpvIPhyBzeaBI IrBH8ksrPfdzJFzC1IInxEJ+iCIoG1Eoo2RxUddGQ2BSZuEOJzAIkkIIp3BumdK6o/IL/5AMUIIv pGJ57aIqvIQmpKIAtVJ1R7B3Tzws84MQoCAJUjAIgiAJTPpM0OQEW/ykEf8SBLSHqKs0CEdwKeHC S7CSfEfwBClHBApAARZgARcQLlPwdm+3BVNQdyBwd2aRd6aXEpgkBcIihQVjP4DsIn9iwgZsJD3g RjwAdcrCJ3krBcLgDuxwDqYwLu1iebMEAjmQAzdwsKOiS5TMS6IyLqhsFlIgTN8QHH4nMA9Xtwgz eM5yKBFDSoZSLLxceA3SKGYRyQIlDOogebBCeT6DB5rQB33wB4hQCNcXCcEgCfiXQySwKs48KiWT L8E0DMaAeg/4hA7HUM6kagxzKIlsfs3katZ8BPq4e9yiDr/wKpI3Lm7UJOzETn5kCP8wR+0iAzcg ff9Afc1nfdhnZ7Fwbd3/Z1AHM4EMVYEKI37NYsCxl4ENUgUJyAP2kXtL+ArsQArgRH1c93xJl0qn wAMdA0glYAIsDc+iAtP+ZB/dx8fhx9PnJyHiXM7NhL3/kMDpOQ7btCvewg6nMH8ppARNcgTC13wr 4HTni0o4GwNCwANZIAFYAARN90v+9FddPT9SCNYU6KSo60yHunFLIAVA4SKgEAoHEQqUein/bH/2 h7upNgSIzKRGcgV+zQNgcAUUwEbVXBYK+A+90k2qkEIMLYGsp9jIYiwZmMVRfCy+IAy+sAsBxYK8 0NvKIILq0AwE9D+mYAmSEAkZ0wQbw0RN5EROxAHNR7QPu0RFeIQNKFCBe/d9yTTLrKfTyOLQCsVM QqJqC9MgNPkPHAUP7hCCLhhSI8UKJ3gg7JPfKBhAI+WC8U0P+HAKRyhQ3IIQN/19LzLLCA7Lgpcw VNfeEC4YwPUMbsktRy1/J+Ei4j3FYAR+DM6/qyYtxnIWx1Dix7AM6BjhJjkO0OAN+kAOAQA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/footer/spacer.gif R0lGODlhBQAFAIAAAP///wAAACH5BAEAAAAALAAAAAAFAAUAAAIEhI+pWAA7 ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/bg.gif R0lGODlh0AcMAOYAAHWWpXiWoHSVpHeVn3OTonaTnXSRm3GRoHCPnnKPmW2MmnCMlmuJl22Jk2iG k2qGj2eCi2SCj2N9hmF9iV14hF94gVl0f1t0fFVyeFRxd1VvelRwdldvd1RvdlNvdVRveFNud1Nu dlJudFNudVJtdVJtc1FtclRsdFNsdlFrdFBqck9rcVFrclBqcU9ocU9ob05pbyFziyFyikxnbE1m bU1mb0tka0tkbEpkakliakliaEhhZ0dfZ0dfZUZeZEVdY0VdZERcYkNaYENaYkJZYEJZXwIwPwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAAHAP8ALAAAAADQBwwAAAf/gEaCg4SFhoeHMYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWm p6ipqqusrZRHRERAQDk5NTUqKiS7H72+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f 4OHi4+Tl5ufo6err7MaI7/CIrvP09fb3+Pn6+/z9/v8A6R1BocEChQkRHDBQgAABAQIAIkqcSLGi xYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59ANcYbOjSg0aNI kypdyrSp06dQKx05weFCBQkQHjRYkCBBgQIBwoodS7as2bNo06pdy7at27dw/+PKnUu3rt27ePPq 3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkNUSnSwvquXLmDNr3sy5s+dNR4QI8bEDBw4YMEyo3rAB g+vXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869+23K 4Al9Hk++vPnz6NOrZzSw4MGECxs+DEq/vv37+PPr38+/v///AAYo4IAEFmhgT+EluN6CDDbo4IMQ RnhJewYhpBBDDkF04IYcdujhhyCGKOKIJJZo4okokphgeBK26OKLMMYooz9HFFHEDz/ooAMNNLTg 4wgjdCDkkEQWaeSRSCap5NySTDbp5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnm mmy26eabcMa55IrgzWjnnXjmqeeeMVD43oXyaZjioIQWauihiCaq6KKMNuoofXRSxueklFZq6aVQ +WlhfBk+6umnoIYq6qiklmrqqaJGOhmmrLbq6quwklLjjTnu2OOPQcqp66689urrr8AGK+ywxBZr 7LHIJqvsssy2qSpRsUYr7bTUuqopfBjOh+q23Hbr7bfghivuuJ8+W1S16Kar7roPXgtop+TGK++8 9NZr77345hsIADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/navdots.gif R0lGODlhAQAGAIAAAO7y9MyZMyH5BAAAAAAALAAAAAABAAYAAAIDDGwFADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/image/dots_hori.gif R0lGODlhCAABAIAAACFzi8jIoiH5BAQUAP8ALAAAAAAIAAEAAAIDDIxQADs= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/css/default.css BODY { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } TD { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } TH { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } P { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } A { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } OL { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } UL { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H1 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H2 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H3 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H4 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H5 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } H6 { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } SELECT { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } OPTION { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } INPUT { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } TEXTAREA { FONT-FAMILY: Verdana, Helvetica, Arial, sans-serif } TD { FONT-SIZE: 70% } TH { FONT-SIZE: 70% } TH { COLOR: #02303f } .td#contentPrint { COLOR: #000000 } .p#contentPrint { COLOR: #000000 } .li#contentPrint { COLOR: #000000 } #PrintOnly { DISPLAY: none } LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; MARGIN: = 0px; PADDING-TOP: 0px } LI UL { PADDING-TOP: 4px } LI OL { PADDING-TOP: 4px } #contentPrint UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LIST-STYLE-IMAGE: none; = PADDING-BOTTOM: 0px; MARGIN: 20px; PADDING-TOP: 0px; LIST-STYLE-TYPE: = none } #contentPrint UL LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li.gif) = no-repeat left top; MARGIN-LEFT: 0px } #contentPrint UL LI UL LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li1.gif) = no-repeat left top; MARGIN-LEFT: 0px } #contentPrint UL LI UL LI UL LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li2.gif) = no-repeat left top; MARGIN-LEFT: 0px } #contentPrint UL LI UL LI UL LI UL LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li.gif) = no-repeat left top; MARGIN-LEFT: 0px } A { TEXT-DECORATION: none } A:hover { TEXT-DECORATION: underline } .breadcrumb { TEXT-DECORATION: none } .breadcrumb A:link { TEXT-DECORATION: none } .breadcrumb A:visited { TEXT-DECORATION: none } .breadcrumb A:active { TEXT-DECORATION: none } .breadcrumb A:hover { TEXT-DECORATION: none } H1 { FONT-WEIGHT: bold; FONT-SIZE: 190% } H2 { FONT-WEIGHT: bold; FONT-SIZE: 160% } H3 { FONT-WEIGHT: bold; FONT-SIZE: 140% } H4 { FONT-WEIGHT: bold; FONT-SIZE: 125% } H5 { FONT-WEIGHT: bold; FONT-SIZE: 110% } H6 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: 100; FONT-SIZE: = 100%; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } SELECT { FONT-SIZE: 11px } OPTION { FONT-SIZE: 11px } INPUT { FONT-SIZE: 11px } TEXTAREA { FONT-SIZE: 11px } FORM { MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px } HR { BORDER-RIGHT: 0px; BORDER-LEFT: 0px; BORDER-TOP-STYLE: dotted; = BORDER-BOTTOM-STYLE: none; border-top-height: 1px; border-bottom-height: = 0px } .homeNav H1 { FONT-WEIGHT: bold; FONT-SIZE: 14px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: = 0px; FONT-FAMILY: Tahoma } H1.homeNav { FONT-WEIGHT: bold; FONT-SIZE: 14px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: = 0px; FONT-FAMILY: Tahoma } .featuretitle H4 { FONT-WEIGHT: bold; FONT-SIZE: 14px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: = 0px; FONT-FAMILY: Tahoma } .leftNav { FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #02303f; LINE-HEIGHT: 14px } UL.navLinks { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LIST-STYLE-IMAGE: none; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: = none } .featurebody UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LIST-STYLE-IMAGE: none; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: = none } UL.navLinks LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li.gif) = no-repeat left top; MARGIN-LEFT: 0px } .featurebody UL LI { PADDING-LEFT: 10px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/li1.gif) = no-repeat left top; MARGIN-LEFT: 10px } .inputButton { FONT-WEIGHT: bold; TEXT-TRANSFORM: capitalize; COLOR: #ffffff; = BACKGROUND-COLOR: #448fa4 } .textAlert { COLOR: #aa0000 } .textNotes { FONT-SIZE: 85%; COLOR: #a6afb1 } .textCaption { MARGIN-TOP: -12px; FONT-SIZE: 90%; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: = 6px; COLOR: #333333; TEXT-ALIGN: center } #imgcaption { FONT-SIZE: 90%; COLOR: #333333 } PRE { FONT-SIZE: 135%; FONT-FAMILY: Courier New, Courier, mono } TT { FONT-SIZE: 135%; FONT-FAMILY: Courier New, Courier, mono } CODE { FONT-SIZE: 135%; FONT-FAMILY: Courier New, Courier, mono } .featureNav { FONT-SIZE: 13px; COLOR: #ffffff; TEXT-DECORATION: none } .featureNormal { FONT-SIZE: 11px; COLOR: #ffffff; LINE-HEIGHT: 14px } UL.featureNav { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } A.featureNav { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNav:link { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNav:visited { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNormal { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNormal:link { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNormal:visited { DISPLAY: block; COLOR: #ffffff; TEXT-DECORATION: none } A.featureNav:active { COLOR: #fde39b; TEXT-DECORATION: none } A.featureNav:hover { COLOR: #fde39b; TEXT-DECORATION: none } A.featureNormal:active { COLOR: #fde39b; TEXT-DECORATION: none } A.featureNormal:hover { COLOR: #fde39b; TEXT-DECORATION: none } A.featureNav { PADDING-LEFT: 19px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/arrow_off.= gif) no-repeat left top } A.featureNav:hover { BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/arrow_on.g= if) no-repeat left top } #footer A { COLOR: #fde39b } #footer A:hover { COLOR: #fff; TEXT-DECORATION: none } .notes { FONT-SIZE: 10px; COLOR: #fde39b } notes A { FONT-SIZE: 10px; COLOR: #fde39b } .notes A:link { FONT-SIZE: 10px; COLOR: #fde39b } .notes A:visited { FONT-SIZE: 10px; COLOR: #fde39b } .notes A:active { COLOR: #ffffff; TEXT-DECORATION: none } .notes A:hover { COLOR: #ffffff; TEXT-DECORATION: none } .tableList { BORDER-RIGHT: #999999 1px solid; BORDER-TOP: 0px; BACKGROUND: #999999; = BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #999999 1px solid } .tableList TH { BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: = #999999 1px solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: = 4px; MARGIN: 0px; BORDER-LEFT: 0px; COLOR: #02303f; PADDING-TOP: 4px; = BORDER-BOTTOM: 0px } .tableList TD { BORDER-RIGHT: 0px; PADDING-RIGHT: 4px; BORDER-TOP: #999999 1px solid; = PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; MARGIN: 0px; BORDER-LEFT: 0px; = COLOR: #444444; PADDING-TOP: 4px; BORDER-BOTTOM: 0px } DIV.contributor { BORDER-RIGHT: #ffbfbf 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: = #ffbfbf 1px solid; PADDING-LEFT: 5px; BACKGROUND: = url(http://www.uow.edu.au/content/fragments/uowpagesetup/image/contributo= rBG.jpg) #f9f5ec repeat-x 50% top; PADDING-BOTTOM: 5px; MARGIN: 5px; = BORDER-LEFT: #ffbfbf 1px solid; COLOR: #c40000; PADDING-TOP: 5px; = BORDER-BOTTOM: #ffbfbf 1px solid } .side_nav { FLOAT: right; WIDTH: 150px } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/css/print.css BODY { BACKGROUND: url(/images/spacer.gif) #ffffff; COLOR: #000000 } #noPrint { DISPLAY: none } #PrintOnly { DISPLAY: inline } #leftPrint { FONT-SIZE: 6pt; COLOR: #000; TEXT-ALIGN: left } notes { FONT-SIZE: 6pt; COLOR: #000; TEXT-ALIGN: left } A.notes { FONT-SIZE: 6pt; COLOR: #000; TEXT-ALIGN: left } #leftPrint A { FONT-SIZE: 6pt; COLOR: #000; TEXT-ALIGN: left } #leftPrint A.notes { FONT-SIZE: 6pt; COLOR: #000; TEXT-ALIGN: left } #contentPrint { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint A { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H1 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H2 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H3 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H4 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H5 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint H6 { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint HR { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint TD { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint TH { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint P { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint LI { BACKGROUND: #ffffff; COLOR: #000000; FONT-FAMILY: "Times New Roman", = Times, serif } #contentPrint UL { LIST-STYLE-IMAGE: none; LIST-STYLE-TYPE: disc } #contentPrint { FLOAT: none; WIDTH: 560px } #contentPrint { FONT-SIZE: 10pt } #contentPrint TD { FONT-SIZE: 10pt } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/css/pda.css #noPrint { DISPLAY: none } IMG { DISPLAY: none } BODY { BACKGROUND: #358195; PADDING-TOP: 22px } BODY > TABLE { DISPLAY: block } TD { WIDTH: 0px } #contentPrint IMG { DISPLAY: inline } .textNormal TR { DISPLAY: block } .textNormal IMG { DISPLAY: inline } #leftPrint { DISPLAY: none } #contentPrint { DISPLAY: block; WIDTH: 100% } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/groups/webasset/@web/@media/documents/siteelement/uow022132.css .textNormal { BACKGROUND: #ffffff; COLOR: #04313e } A:active { COLOR: #b6484a } #contentPrint A:active { COLOR: #b6484a } A:hover { COLOR: #b6484a } #contentPrint A:hover { COLOR: #b6484a } .breadcrumb { BACKGROUND: #b0393b; COLOR: #ffffff } .breadcrumb A:link { COLOR: #ffffff } .breadcrumb A:visited { COLOR: #ffffff } .breadcrumb A:active { COLOR: #fde39b } .breadcrumb A:hover { COLOR: #fde39b } H1 { COLOR: #b0393b } H2 { COLOR: #b0393b } H3 { COLOR: #b0393b } H4 { COLOR: #b0393b } H5 { COLOR: #b0393b } H6 { COLOR: #b0393b } HR { COLOR: #b0393b } .tableList TH { BACKGROUND-POSITION: left 50%; BACKGROUND-IMAGE: = url(http://media.uow.edu.au/content/groups/webasset/@web/@media/documents= /siteelement/uow028327.jpg); BACKGROUND-REPEAT: repeat-y; = BACKGROUND-COLOR: #d89c9d } .tableList TD { BACKGROUND-POSITION: 50% bottom; BACKGROUND-IMAGE: = url(http://media.uow.edu.au/content/groups/webasset/@web/@media/documents= /siteelement/uow028326.jpg); BACKGROUND-REPEAT: repeat-x; = BACKGROUND-COLOR: #d0dde6 } .caption { BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; FONT-SIZE: = 9px; BACKGROUND: #c6d3dc; MARGIN-LEFT: 4px; BORDER-LEFT: #999 1px solid; = COLOR: #02303f; MARGIN-RIGHT: 4px; BORDER-BOTTOM: #999 1px solid } TD.featuretitle { BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #999 1px = solid; PADDING-LEFT: 5px; BACKGROUND: #c6d3dc; PADDING-BOTTOM: 2px; = BORDER-LEFT: #999 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #999 1px = solid } TD.featuretitle H4 { COLOR: #b0393b } TD.featurebody { BORDER-RIGHT: #999 1px solid; BORDER-TOP: 0px; BACKGROUND: #f9f7f8; = BORDER-LEFT: #999 1px solid; BORDER-BOTTOM: #999 1px solid } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Location: http://media.uow.edu.au/content/fragments/uowpagesetup/css/links.css A:link { COLOR: #2244cc } A:visited { COLOR: #2244cc } .navLinks A:link { COLOR: #006666 } .navLinks A:visited { COLOR: #006666 } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowgallery/css/lightbox.css .imgLink IMG { COLOR: #000000 } .imgLink:visited IMG { COLOR: #000000 } .imgLink:hover IMG { COLOR: #000000 } #lightbox { Z-INDEX: 100; LEFT: 0px; WIDTH: 100%; LINE-HEIGHT: 0; POSITION: = absolute; TEXT-ALIGN: center } #lightbox A IMG { BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium = none; BORDER-BOTTOM: medium none } #outerImageContainer { MARGIN: 0px auto; WIDTH: 250px; POSITION: relative; HEIGHT: 250px; = BACKGROUND-COLOR: #fff } #imageContainer { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px } #loading { LEFT: 0%; WIDTH: 100%; LINE-HEIGHT: 0; POSITION: absolute; TOP: 40%; = HEIGHT: 25%; TEXT-ALIGN: center } #hoverNav { Z-INDEX: 10; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; = HEIGHT: 100% } #imageContainer > #hoverNav { LEFT: 0px } #hoverNav A { outline: none } #prevLink { DISPLAY: block; BACKGROUND: = url(../../../../content/fragments/uowgallery/image/blank.gif) no-repeat; = WIDTH: 49%; HEIGHT: 100% } #nextLink { DISPLAY: block; BACKGROUND: = url(../../../../content/fragments/uowgallery/image/blank.gif) no-repeat; = WIDTH: 49%; HEIGHT: 100% } #prevLink { LEFT: 0px; FLOAT: left } #nextLink { RIGHT: 0px; FLOAT: right } #prevLink:hover { BACKGROUND: = url(../../../../content/fragments/uowgallery/image/prevlabel.gif) = no-repeat left 15% } #prevLink:hover:visited { BACKGROUND: = url(../../../../content/fragments/uowgallery/image/prevlabel.gif) = no-repeat left 15% } #nextLink:hover { BACKGROUND: = url(../../../../content/fragments/uowgallery/image/nextlabel.gif) = no-repeat right 15% } #nextLink:hover:visited { BACKGROUND: = url(../../../../content/fragments/uowgallery/image/nextlabel.gif) = no-repeat right 15% } #imageDataContainer { MARGIN: 0px auto; FONT: 10px/1.4em Verdana, Helvetica, sans-serif; = BACKGROUND-COLOR: #fff } #imageData { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; COLOR: = #666; PADDING-TOP: 0px } #imageData #imageDetails { FLOAT: left; WIDTH: 70%; TEXT-ALIGN: left } #imageData #caption { FONT-WEIGHT: bold } #imageData #numberDisplay { CLEAR: left; DISPLAY: block; PADDING-BOTTOM: 1em } #imageData #bottomNavClose { FLOAT: right; PADDING-BOTTOM: 0.7em; WIDTH: 66px } #overlay { Z-INDEX: 90; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; = HEIGHT: 500px; BACKGROUND-COLOR: #000 } .lbWidth { MIN-WIDTH: 790px; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px } * HTML .lbContent { MARGIN-LEFT: -790px; POSITION: relative } * HTML .lbMinWidth { PADDING-LEFT: 790px } .clearfix:unknown { CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: = "." } .clearfix { DISPLAY: inline-block } * HTML .clearfix { HEIGHT: 1% } .clearfix { DISPLAY: block } ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/websites/newsmedia/contributor.js // This is a modified contributor file that should work when the page is = statically published.=0A= // Ed Bryant - Oct 2006=0A= =0A= // namespace objects=0A= var SSContributorMode =3D new Object();=0A= SSContributorMode.SSCookie =3D new Object();=0A= SSContributorMode.SSQueryString =3D new Object();=0A= SSContributorMode.SSPopup =3D null;=0A= =0A= // environment variables=0A= SSContributorMode.IS_MAC =3D (navigator.userAgent.indexOf("Mac") !=3D = -1);=0A= SSContributorMode.IS_OPERA =3D = (navigator.userAgent.toLowerCase().indexOf("opera") > -1);=0A= SSContributorMode.IS_FIREFOX =3D = (navigator.userAgent.toLowerCase().indexOf("gecko") > -1) && = (navigator.userAgent.toLowerCase().indexOf("firefox") > -1);=0A= SSContributorMode.IS_NETSCAPE =3D = (navigator.userAgent.toLowerCase().indexOf("gecko") > -1) && = (navigator.userAgent.toLowerCase().indexOf("netscape") > -1);=0A= SSContributorMode.IS_SAFARI =3D = ((navigator.userAgent.toLowerCase().indexOf("applewebkit") > -1) || = (navigator.userAgent.toLowerCase().indexOf("apple") > -1));=0A= SSContributorMode.IS_IE =3D = (navigator.userAgent.toLowerCase().indexOf("msie") > -1) && = !SSContributorMode.IS_OPERA;=0A= SSContributorMode.IS_MOZILLA =3D = (navigator.userAgent.toLowerCase().indexOf("mozilla") > -1) && = !SSContributorMode.IS_IE && !SSContributorMode.IS_OPERA && = !SSContributorMode.IS_FIREFOX && !SSContributorMode.IS_NETSCAPE;=0A= SSContributorMode.IS_COMPATIBLE_IE_ENVIRONMENT =3D = (SSContributorMode.IS_IE && !SSContributorMode.IS_MAC);=0A= SSContributorMode.IS_COMPATIBLE_FF_ENVIRONMENT =3D = ((SSContributorMode.IS_MOZILLA || SSContributorMode.IS_FIREFOX) && = !SSContributorMode.IS_MAC);=0A= SSContributorMode.IS_CONTRIBUTOR_MODE =3D (SSContributor && = !SSHideContributorUI && !SSForceContributor && = (SSContributorMode.IS_COMPATIBLE_IE_ENVIRONMENT || = SSContributorMode.IS_COMPATIBLE_FF_ENVIRONMENT));=0A= =0A= // utility methods=0A= SSContributorMode.IsString =3D function(obj) { return (typeof obj =3D=3D = 'string'); }=0A= SSContributorMode.IsNumber =3D function(obj) { return (typeof obj =3D=3D = 'number'); }=0A= SSContributorMode.IsBoolean =3D function(obj) { return (typeof obj = =3D=3D 'boolean'); }=0A= SSContributorMode.IsArray =3D function(obj) { return (obj instanceof = Array); }=0A= SSContributorMode.IsFunction =3D function(obj) { return (typeof obj = =3D=3D 'function'); }=0A= SSContributorMode.IsUndefined =3D function(obj) { return (typeof obj = =3D=3D 'undefined'); }=0A= SSContributorMode.IsNull =3D function(obj) { return (obj =3D=3D null); }=0A= SSContributorMode.IsNotValid =3D function(obj) { return = (SSContributorMode.IsNull(obj) || SSContributorMode.IsUndefined(obj)); }=0A= SSContributorMode.IsValid =3D function(obj) { return = (!SSContributorMode.IsNull(obj) && !SSContributorMode.IsUndefined(obj)); = }=0A= SSContributorMode.Trim =3D function(s) { return = s.replace(/^\s*/,'').replace(/\s*$/,''); }=0A= =0A= if(window.location.href.substring(7).split("/")[0] !=3D = g_HttpServerAddress)=0A= {=0A= SSContributorMode.WasStatic=3Dtrue;=0A= SSContributorMode.UrlBase =3D = "http://"+g_HttpServerAddress+"/"+websiteId;=0A= // temp=3Dwindow.location.href.substring(7); =0A= // Need to capture https:// requests too!=0A= = temp=3Dwindow.location.href.substring(window.location.href.indexOf('://')= +3);=0A= SSContributorMode.UrlBase =3D = SSContributorMode.UrlBase+temp.substring(temp.indexOf("/"));=0A= if (SSContributorMode.UrlBase.indexOf('/index.htm')<=3D0) { = //catch .htm pages!=0A= if (SSContributorMode.UrlBase.indexOf('.htm')>=3D0) {=0A= // Need to strip .html from secondary pages!=0A= SSContributorMode.UrlBase =3D = SSContributorMode.UrlBase.substring(0,SSContributorMode.UrlBase.indexOf('= .htm'));=0A= } else {=0A= // Need to add index.html to primary pages!=0A= SSContributorMode.UrlBase =3D = SSContributorMode.UrlBase+"index.html";=0A= }=0A= }=0A= }=0A= else=0A= {=0A= SSContributorMode.WasStatic=3Dfalse;=0A= SSContributorMode.UrlBase =3D = window.location.href.split("?")[0].split("#")[0];=0A= }=0A= SSContributorMode.Url =3D window.location.href.toString();=0A= =0A= SSContributorMode.QueryString =3D window.location.search;=0A= SSContributorMode.Bookmark =3D = (SSContributorMode.IsString(window.location.href.split("#")[1])) ? = "#"+window.location.href.split("#")[1] : "";=0A= =0A= // site studio specific properties=0A= SSContributorMode.HideContributorUI =3D "SSHideContributorUI";=0A= SSContributorMode.ContributorClientId =3D "ssContributor77";=0A= SSContributorMode.ContributorVarName =3D "SSContributor";=0A= SSContributorMode.ContributorPreviewId =3D "previewId";=0A= SSContributorMode.StellentRenderingEngine =3D "sre";=0A= SSContributorMode.Firefox =3D "ff";=0A= SSContributorMode.InternetExplorer=3D "ie";=0A= =0A= //***********************************************************************= ****=0A= //***********************************************************************= ****=0A= //***********************************************************************= ****=0A= // SSContributorMode=0A= //***********************************************************************= ****=0A= //***********************************************************************= ****=0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.Toggle =3D function()=0A= {=0A= var hash =3D SSContributorMode.Bookmark;=0A= var query =3D SSContributorMode.QueryString;=0A= var contributor =3D = SSContributorMode.SSCookie.GetValue(SSContributorMode.ContributorVarName)= ;=0A= =0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE) // disable=0A= {=0A= // clean up known query string values - some of which are legacy values=0A= if (SSContributorMode.IsValid(query) && query.length > 0)=0A= {=0A= query =3D SSContributorMode.SSQueryString.RemoveValue(query, = SSContributorMode.ContributorPreviewId);=0A= query =3D SSContributorMode.SSQueryString.RemoveValue(query, = SSContributorMode.ContributorVarName);=0A= }=0A= =0A= if = (SSContributorMode.SSCookie.GetValue(SSContributorMode.StellentRenderingE= ngine) =3D=3D SSContributorMode.Firefox)=0A= {=0A= query =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.StellentRenderingEngine, SSContributorMode.Firefox);=0A= }=0A= =0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.ContributorVarName,= "false");=0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.ContributorPreviewI= d, "");=0A= =0A= SSContributorMode.ReleodURL(SSContributorMode.UrlBase + query + hash);=0A= }=0A= else // enable=0A= {=0A= if (SSContributorMode.IS_COMPATIBLE_IE_ENVIRONMENT)=0A= {=0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.ContributorVarName,= "true");=0A= if(SSContributorMode.WasStatic)=0A= {=0A= query =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.ContributorVarName, "true");=0A= }=0A= }=0A= else if (SSContributorMode.IS_COMPATIBLE_FF_ENVIRONMENT)=0A= {=0A= query =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.StellentRenderingEngine, = SSContributorMode.InternetExplorer);=0A= query =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.ContributorVarName, "true");=0A= }=0A= if (SSContributorMode.WasStatic) alert("*** ENTERING CONTRIBUTION MODE = ***\n\nYou are being re-directed from a static site to\nthe dynamic = content contribution site. When you exit\nContribution Mode you will = remain on the dynamic site.");=0A= SSContributorMode.ReleodURL(SSContributorMode.UrlBase + query + hash);=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.InstallStellentTab =3D function()=0A= {=0A= window.location =3D = "/content/idcplg?IdcService=3DSS_SHOW_BROWSER_INSTALL_PAGE&showUrl=3D" + = escape(SSContributorMode.Url);=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.ReleodURL =3D function(url)=0A= {=0A= if (SSContributorMode.IsValid(url))=0A= {=0A= if (SSContributorMode.Url !=3D url)=0A= window.location =3D url;=0A= else=0A= window.location.reload(true);=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.ContributorIconContextMenu =3D function(dataId)=0A= {=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE)=0A= {=0A= var oNodeListActions =3D = document.getElementById(dataId).XMLDocument.selectNodes("actions/action")= ;=0A= var numNodes =3D oNodeListActions.length;=0A= var divTagStyle =3D "STYLE=3D'white-space:nowrap; background:#cccccc; = border:1px solid black; border-top:1px solid white; border-left:1px = solid white; height:20px; color:black; font-family:verdana; = font-weight:bold; padding:2px; padding-left:10px; font-size:8pt; = cursor:hand' ";=0A= var divTagActions =3D = "onmouseover=3D'this.style.background=3D\"#ffffff\"' = onmouseout=3D'this.style.background=3D\"#cccccc\"'";=0A= var menu =3D "";=0A= =0A= if (SSContributorMode.SSPopup =3D=3D null)=0A= {=0A= SSContributorMode.SSPopup =3D window.createPopup();=0A= }=0A= =0A= for (n =3D 0; n < numNodes; n++)=0A= {=0A= var oNodeAction =3D oNodeListActions.item(n);=0A= =0A= menu =3D menu + "
";=0A= menu =3D menu + oNodeAction.xml;=0A= menu =3D menu + "
";=0A= }=0A= SSContributorMode.SSPopup.document.body.innerHTML =3D menu;=0A= =0A= var popupBody =3D SSContributorMode.SSPopup.document.body;=0A= =0A= // The following popup object is used only to detect what height the=0A= // displayed popup object should be using the scrollHeight property.=0A= // This is important because the size of the popup object varies=0A= // depending on the length of the definition text. This first=0A= // popup object is not seen by the user.=0A= SSContributorMode.SSPopup.show(0, 0, 100, 0);=0A= var realHeight =3D popupBody.scrollHeight;=0A= var realWidth =3D popupBody.scrollWidth + 10;=0A= =0A= // Hides the dimension detector popup object.=0A= SSContributorMode.SSPopup.hide();=0A= =0A= // Shows the actual popup object with correct height.=0A= SSContributorMode.SSPopup.show(0, 15, realWidth, realHeight, = event.srcElement);=0A= return false;=0A= }=0A= else=0A= return false;=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.ContributorIconToggle =3D function()=0A= {=0A= =0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE && = SSContributorMode.IsValid(event) && = SSContributorMode.IsValid(event.srcElement) && = SSContributorMode.IsValid(event.srcElement.src))=0A= {=0A= var o =3D event.srcElement;=0A= if (o.src.search(/StellentDot_edit.gif/gi) >=3D 0) o.src =3D = o.src.replace(/StellentDot_edit.gif/gi, "StellentDot_edit_over.gif");=0A= else if (o.src.search(/StellentDot_edit_over.gif/gi) >=3D 0) o.src =3D = o.src.replace(/StellentDot_edit_over.gif/gi, "StellentDot_edit.gif");=0A= else if (o.src.search(/StellentDot_locked.gif/gi) >=3D 0) o.src =3D = o.src.replace(/StellentDot_locked.gif/gi, "StellentDot_locked_over.gif");=0A= else if (o.src.search(/StellentDot_locked_over.gif/gi) >=3D 0) o.src = =3D o.src.replace(/StellentDot_locked_over.gif/gi, = "StellentDot_locked.gif");=0A= else if (o.src.search(/StellentDot_workflow.gif/gi) >=3D 0) o.src =3D = o.src.replace(/StellentDot_workflow.gif/gi, = "StellentDot_workflow_over.gif");=0A= else if (o.src.search(/StellentDot_workflow_over.gif/gi) >=3D 0) o.src = =3D o.src.replace(/StellentDot_workflow_over.gif/gi, = "StellentDot_workflow.gif");=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.LaunchContributorClient =3D function()=0A= {=0A= var app =3D = document.getElementById(SSContributorMode.ContributorClientId);=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE && = SSContributorMode.IsValid(app))=0A= {=0A= app.EditContributorFile(document);=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.SwitchContributionRegionFile =3D function(siteId, = nodeId, regionId, useSecondary, docName)=0A= {=0A= var app =3D = document.getElementById(SSContributorMode.ContributorClientId);=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE && = SSContributorMode.IsValid(app))=0A= {=0A= app.SwitchContributorFile(document, siteId, nodeId, regionId, = useSecondary, docName);=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.ShowContributorModeDiff =3D function(currentUrl)=0A= {=0A= var app =3D = document.getElementById(SSContributorMode.ContributorClientId);=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE && = SSContributorMode.IsValid(app))=0A= {=0A= var hash =3D SSContributorMode.Bookmark;=0A= var query =3D SSContributorMode.QueryString;=0A= =0A= // clean up known query string values - some of which are legacy values=0A= if (SSContributorMode.IsValid(query) && query.length > 0)=0A= {=0A= query =3D SSContributorMode.SSQueryString.RemoveValue(query, = SSContributorMode.ContributorPreviewId);=0A= query =3D SSContributorMode.SSQueryString.RemoveValue(query, = SSContributorMode.ContributorVarName);=0A= }=0A= =0A= var query1 =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.ContributorVarName, "false");=0A= var query2 =3D SSContributorMode.SSQueryString.SetValue(query, = SSContributorMode.ContributorVarName, "true");=0A= query2 =3D SSContributorMode.SSQueryString.SetValue(query2, = SSContributorMode.HideContributorUI, "1");=0A= =0A= var url1 =3D SSContributorMode.UrlBase + query1 + hash;=0A= var url2 =3D SSContributorMode.UrlBase + query2 + hash;=0A= =0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.ContributorVarName,= "false");=0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.ContributorPreviewI= d, "");=0A= =0A= app.CompareFiles(url1, url2, true, false);=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.DragEventHandler =3D function()=0A= {=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE)=0A= {=0A= this.style.left =3D event.clientX-this.X + document.body.scrollLeft;=0A= this.style.top =3D event.clientY-this.Y + document.body.scrollTop;=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.MouseDownEventHandler =3D function()=0A= {=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE)=0A= {=0A= this.X =3D event.offsetX;=0A= this.Y =3D event.offsetY;=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.InsertContributorModeGraphic =3D function()=0A= {=0A= SSContributorMode.LanguageId =3D = (SSContributorMode.IsString(g_strLanguageId)) ? g_strLanguageId : "en";=0A= SSContributorMode.RelativeWebRoot =3D g_HttpRelativeWebRoot;=0A= SSContributorMode.ContributorModeImageName =3D "contributorMode.jpg";=0A= SSContributorMode.ContributorModeImageSrc =3D = SSContributorMode.RelativeWebRoot + "images/sitestudio/" + = SSContributorMode.LanguageId + "/" + = SSContributorMode.ContributorModeImageName;=0A= =0A= if (document.readyState =3D=3D "complete")=0A= {=0A= var img =3D document.createElement("IMG");=0A= img.style.border =3D "solid black 1px";=0A= img.style.padding =3D 20;=0A= img.style.position =3D "absolute";=0A= img.style.cursor =3D "move";=0A= img.style.top =3D 15;=0A= img.style.left =3D document.body.clientWidth - 225;=0A= img.ondrag =3D SSContributorMode.DragEventHandler;=0A= img.onmousedown =3D SSContributorMode.MouseDownEventHandler;=0A= img.src =3D SSContributorMode.ContributorModeImageSrc;=0A= document.body.insertBefore(img);=0A= document.body.focus();=0A= }=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.EnableContributionMode =3D function()=0A= {=0A= var query =3D SSContributorMode.QueryString;=0A= if (SSContributorMode.SSQueryString.GetValue(query, = SSContributorMode.StellentRenderingEngine) =3D=3D = SSContributorMode.InternetExplorer)=0A= {=0A= = SSContributorMode.SSCookie.SetValue(SSContributorMode.StellentRenderingEn= gine, SSContributorMode.Firefox);=0A= }=0A= document.attachEvent('onreadystatechange', = SSContributorMode.InsertContributorModeGraphic);=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.Initialize =3D function()=0A= {=0A= if (SSContributorMode.IS_COMPATIBLE_IE_ENVIRONMENT)=0A= {=0A= document.attachEvent('onkeydown', SSContributorMode.KeyCommandHandler);=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE)=0A= SSContributorMode.EnableContributionMode();=0A= }=0A= else if (SSContributorMode.IS_COMPATIBLE_FF_ENVIRONMENT)=0A= {=0A= document.addEventListener('keypress', = SSContributorMode.KeyCommandHandler, false);=0A= if (SSContributorMode.IS_CONTRIBUTOR_MODE)=0A= SSContributorMode.InstallStellentTab();=0A= }=0A= }=0A= =0A= // = *************************************************************************= **=0A= //=0A= // The following function uses virtual key codes to determine=0A= // what key or key combination has been pressed by the user.=0A= // The default value is CTRL + SHIFT + F5. The F5 key has a=0A= // Virtual-Key Code of 116 (or 0x74 in hexadecimal). The codes=0A= // for the other typical Function keys, F1 through F12 are=0A= // 112 (0x70) through 123 (0x7B) respectively. For a complete=0A= // list of virtual-key codes please refer to the following URL:=0A= // = http://msdn.microsoft.com/library/default.asp?url=3D/library/en-us/winui/= WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp=0A= // Alternatively, do a Google search on the term "Virtual-Key Codes"=0A= // and you should find some useful information.=0A= //=0A= // You may also use the HTML code below to create a test page that=0A= // you can use to capture the values of the keys being pressed.=0A= //=0A= // = *************************************************************************= **=0A= // Alter the KeyCommandHandler method to change the key command that=0A= // enables Contributor Mode. Utilize the following HTML source code to=0A= // identify the key codes you wish to use for your key commands.=0A= //=0A= // =0A= //
=0A= // Press a key to reveal its Key Code:

=0A= //
=0A= //
=0A= // =0A= // =0A= // = *************************************************************************= **=0A= =0A= SSContributorMode.KeyCommandHandler =3D function(e)=0A= {=0A= var eventObject =3D (SSContributorMode.IsValid(e)) ? e : event;=0A= if (eventObject.ctrlKey && eventObject.shiftKey && = SSContributorMode.IsValid(eventObject.keyCode) && eventObject.keyCode = =3D=3D 116)=0A= {=0A= SSContributorMode.Toggle();=0A= return false;=0A= }=0A= }=0A= =0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= // SSCookie=0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= =0A= SSContributorMode.SSCookie.GetValue =3D function(name)=0A= {=0A= =0A= var arr =3D document.cookie.split(";");=0A= for (var i =3D 0; i < arr.length; i++)=0A= {=0A= var crumbs =3D arr[i].split("=3D");=0A= if (name =3D=3D SSContributorMode.Trim(crumbs[0]))=0A= return unescape(SSContributorMode.Trim(crumbs[1]));=0A= }=0A= return null;=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.SSCookie.SetValue =3D function(name, value)=0A= {=0A= if (SSContributorMode.IsValid(name) && SSContributorMode.IsValid(value))=0A= {=0A= document.cookie =3D name + "=3D" + escape(value) + "; path=3D/";=0A= }=0A= }=0A= =0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= // SSQueryString=0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= =0A= SSContributorMode.SSQueryString.GetValue =3D function(query, name)=0A= {=0A= if (query.indexOf(name) >=3D 0)=0A= {=0A= var q =3D query.replace(/\?/, '');=0A= =0A= if (SSContributorMode.IsValid(q) && q.length > 0)=0A= {=0A= var pairs =3D q.split("&");=0A= for (var i =3D 0; i < pairs.length; i++)=0A= {=0A= var p =3D pairs[0].split("=3D");=0A= if (name =3D=3D p[0])=0A= return p[1];=0A= }=0A= }=0A= }=0A= return null;=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.SSQueryString.SetValue =3D function(query, name, value)=0A= {=0A= var q =3D SSContributorMode.SSQueryString.RemoveValue(query, name);=0A= var con =3D (q.length =3D=3D 0) ? "?" : (q[q.length-1] =3D=3D "&") ? "" = : "&";=0A= return q + con + name + "=3D" + value;=0A= }=0A= =0A= //***********************************************************************= ****=0A= =0A= SSContributorMode.SSQueryString.RemoveValue =3D function(query, name)=0A= {=0A= if (query.indexOf(name) >=3D 0)=0A= {=0A= var q =3D query.replace(/\?/,'');=0A= =0A= if (SSContributorMode.IsValid(q) && q.length > 0)=0A= {=0A= var tmp =3D "";=0A= var pairs =3D q.split("&");=0A= for (var i =3D 0; i < pairs.length; i++)=0A= {=0A= var p =3D pairs[i].split("=3D");=0A= if (name !=3D p[0])=0A= tmp +=3D "&" + p[0] + "=3D" + p[1];=0A= }=0A= return tmp.replace(/\&/,'?');=0A= }=0A= }=0A= return query;=0A= }=0A= =0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= =0A= SSContributorMode.Initialize();=0A= =0A= //***************************************************************=0A= //***************************************************************=0A= //***************************************************************=0A= =0A= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowgallery/js/prototype.js /* Prototype JavaScript framework, version 1.4.0=0A= * (c) 2005 Sam Stephenson =0A= *=0A= * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please = diff=0A= * against the source tree, available from the Prototype darcs = repository.=0A= *=0A= * Prototype is freely distributable under the terms of an MIT-style = license.=0A= *=0A= * For details, see the Prototype web site: http://prototype.conio.net/=0A= *=0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Prototype =3D {=0A= Version: '1.4.0',=0A= ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)',=0A= =0A= emptyFunction: function() {},=0A= K: function(x) {return x}=0A= }=0A= =0A= var Class =3D {=0A= create: function() {=0A= return function() {=0A= this.initialize.apply(this, arguments);=0A= }=0A= }=0A= }=0A= =0A= var Abstract =3D new Object();=0A= =0A= Object.extend =3D function(destination, source) {=0A= for (property in source) {=0A= destination[property] =3D source[property];=0A= }=0A= return destination;=0A= }=0A= =0A= Object.inspect =3D function(object) {=0A= try {=0A= if (object =3D=3D undefined) return 'undefined';=0A= if (object =3D=3D null) return 'null';=0A= return object.inspect ? object.inspect() : object.toString();=0A= } catch (e) {=0A= if (e instanceof RangeError) return '...';=0A= throw e;=0A= }=0A= }=0A= =0A= Function.prototype.bind =3D function() {=0A= var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A= return function() {=0A= return __method.apply(object, args.concat($A(arguments)));=0A= }=0A= }=0A= =0A= Function.prototype.bindAsEventListener =3D function(object) {=0A= var __method =3D this;=0A= return function(event) {=0A= return __method.call(object, event || window.event);=0A= }=0A= }=0A= =0A= Object.extend(Number.prototype, {=0A= toColorPart: function() {=0A= var digits =3D this.toString(16);=0A= if (this < 16) return '0' + digits;=0A= return digits;=0A= },=0A= =0A= succ: function() {=0A= return this + 1;=0A= },=0A= =0A= times: function(iterator) {=0A= $R(0, this, true).each(iterator);=0A= return this;=0A= }=0A= });=0A= =0A= var Try =3D {=0A= these: function() {=0A= var returnValue;=0A= =0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var lambda =3D arguments[i];=0A= try {=0A= returnValue =3D lambda();=0A= break;=0A= } catch (e) {}=0A= }=0A= =0A= return returnValue;=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var PeriodicalExecuter =3D Class.create();=0A= PeriodicalExecuter.prototype =3D {=0A= initialize: function(callback, frequency) {=0A= this.callback =3D callback;=0A= this.frequency =3D frequency;=0A= this.currentlyExecuting =3D false;=0A= =0A= this.registerCallback();=0A= },=0A= =0A= registerCallback: function() {=0A= setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: function() {=0A= if (!this.currentlyExecuting) {=0A= try {=0A= this.currentlyExecuting =3D true;=0A= this.callback();=0A= } finally {=0A= this.currentlyExecuting =3D false;=0A= }=0A= }=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= function $() {=0A= var elements =3D new Array();=0A= =0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D arguments[i];=0A= if (typeof element =3D=3D 'string')=0A= element =3D document.getElementById(element);=0A= =0A= if (arguments.length =3D=3D 1)=0A= return element;=0A= =0A= elements.push(element);=0A= }=0A= =0A= return elements;=0A= }=0A= Object.extend(String.prototype, {=0A= stripTags: function() {=0A= return this.replace(/<\/?[^>]+>/gi, '');=0A= },=0A= =0A= stripScripts: function() {=0A= return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A= },=0A= =0A= extractScripts: function() {=0A= var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A= var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A= return (this.match(matchAll) || []).map(function(scriptTag) {=0A= return (scriptTag.match(matchOne) || ['', ''])[1];=0A= });=0A= },=0A= =0A= evalScripts: function() {=0A= return this.extractScripts().map(eval);=0A= },=0A= =0A= escapeHTML: function() {=0A= var div =3D document.createElement('div');=0A= var text =3D document.createTextNode(this);=0A= div.appendChild(text);=0A= return div.innerHTML;=0A= },=0A= =0A= unescapeHTML: function() {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D this.stripTags();=0A= return div.childNodes[0] ? div.childNodes[0].nodeValue : '';=0A= },=0A= =0A= toQueryParams: function() {=0A= var pairs =3D this.match(/^\??(.*)$/)[1].split('&');=0A= return pairs.inject({}, function(params, pairString) {=0A= var pair =3D pairString.split('=3D');=0A= params[pair[0]] =3D pair[1];=0A= return params;=0A= });=0A= },=0A= =0A= toArray: function() {=0A= return this.split('');=0A= },=0A= =0A= camelize: function() {=0A= var oStringList =3D this.split('-');=0A= if (oStringList.length =3D=3D 1) return oStringList[0];=0A= =0A= var camelizedString =3D this.indexOf('-') =3D=3D 0=0A= ? oStringList[0].charAt(0).toUpperCase() + = oStringList[0].substring(1)=0A= : oStringList[0];=0A= =0A= for (var i =3D 1, len =3D oStringList.length; i < len; i++) {=0A= var s =3D oStringList[i];=0A= camelizedString +=3D s.charAt(0).toUpperCase() + s.substring(1);=0A= }=0A= =0A= return camelizedString;=0A= },=0A= =0A= inspect: function() {=0A= return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";=0A= }=0A= });=0A= =0A= String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A= =0A= var $break =3D new Object();=0A= var $continue =3D new Object();=0A= =0A= var Enumerable =3D {=0A= each: function(iterator) {=0A= var index =3D 0;=0A= try {=0A= this._each(function(value) {=0A= try {=0A= iterator(value, index++);=0A= } catch (e) {=0A= if (e !=3D $continue) throw e;=0A= }=0A= });=0A= } catch (e) {=0A= if (e !=3D $break) throw e;=0A= }=0A= },=0A= =0A= all: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= result =3D result && !!(iterator || Prototype.K)(value, index);=0A= if (!result) throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= any: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= if (result =3D !!(iterator || Prototype.K)(value, index))=0A= throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= collect: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(iterator(value, index));=0A= });=0A= return results;=0A= },=0A= =0A= detect: function (iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= if (iterator(value, index)) {=0A= result =3D value;=0A= throw $break;=0A= }=0A= });=0A= return result;=0A= },=0A= =0A= findAll: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= grep: function(pattern, iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= var stringValue =3D value.toString();=0A= if (stringValue.match(pattern))=0A= results.push((iterator || Prototype.K)(value, index));=0A= })=0A= return results;=0A= },=0A= =0A= include: function(object) {=0A= var found =3D false;=0A= this.each(function(value) {=0A= if (value =3D=3D object) {=0A= found =3D true;=0A= throw $break;=0A= }=0A= });=0A= return found;=0A= },=0A= =0A= inject: function(memo, iterator) {=0A= this.each(function(value, index) {=0A= memo =3D iterator(memo, value, index);=0A= });=0A= return memo;=0A= },=0A= =0A= invoke: function(method) {=0A= var args =3D $A(arguments).slice(1);=0A= return this.collect(function(value) {=0A= return value[method].apply(value, args);=0A= });=0A= },=0A= =0A= max: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (value >=3D (result || value))=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= min: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (value <=3D (result || value))=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= partition: function(iterator) {=0A= var trues =3D [], falses =3D [];=0A= this.each(function(value, index) {=0A= ((iterator || Prototype.K)(value, index) ?=0A= trues : falses).push(value);=0A= });=0A= return [trues, falses];=0A= },=0A= =0A= pluck: function(property) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(value[property]);=0A= });=0A= return results;=0A= },=0A= =0A= reject: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (!iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= sortBy: function(iterator) {=0A= return this.collect(function(value, index) {=0A= return {value: value, criteria: iterator(value, index)};=0A= }).sort(function(left, right) {=0A= var a =3D left.criteria, b =3D right.criteria;=0A= return a < b ? -1 : a > b ? 1 : 0;=0A= }).pluck('value');=0A= },=0A= =0A= toArray: function() {=0A= return this.collect(Prototype.K);=0A= },=0A= =0A= zip: function() {=0A= var iterator =3D Prototype.K, args =3D $A(arguments);=0A= if (typeof args.last() =3D=3D 'function')=0A= iterator =3D args.pop();=0A= =0A= var collections =3D [this].concat(args).map($A);=0A= return this.map(function(value, index) {=0A= iterator(value =3D collections.pluck(index));=0A= return value;=0A= });=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= Object.extend(Enumerable, {=0A= map: Enumerable.collect,=0A= find: Enumerable.detect,=0A= select: Enumerable.findAll,=0A= member: Enumerable.include,=0A= entries: Enumerable.toArray=0A= });=0A= var $A =3D Array.from =3D function(iterable) {=0A= if (!iterable) return [];=0A= if (iterable.toArray) {=0A= return iterable.toArray();=0A= } else {=0A= var results =3D [];=0A= for (var i =3D 0; i < iterable.length; i++)=0A= results.push(iterable[i]);=0A= return results;=0A= }=0A= }=0A= =0A= Object.extend(Array.prototype, Enumerable);=0A= =0A= Array.prototype._reverse =3D Array.prototype.reverse;=0A= =0A= Object.extend(Array.prototype, {=0A= _each: function(iterator) {=0A= for (var i =3D 0; i < this.length; i++)=0A= iterator(this[i]);=0A= },=0A= =0A= clear: function() {=0A= this.length =3D 0;=0A= return this;=0A= },=0A= =0A= first: function() {=0A= return this[0];=0A= },=0A= =0A= last: function() {=0A= return this[this.length - 1];=0A= },=0A= =0A= compact: function() {=0A= return this.select(function(value) {=0A= return value !=3D undefined || value !=3D null;=0A= });=0A= },=0A= =0A= flatten: function() {=0A= return this.inject([], function(array, value) {=0A= return array.concat(value.constructor =3D=3D Array ?=0A= value.flatten() : [value]);=0A= });=0A= },=0A= =0A= without: function() {=0A= var values =3D $A(arguments);=0A= return this.select(function(value) {=0A= return !values.include(value);=0A= });=0A= },=0A= =0A= indexOf: function(object) {=0A= for (var i =3D 0; i < this.length; i++)=0A= if (this[i] =3D=3D object) return i;=0A= return -1;=0A= },=0A= =0A= reverse: function(inline) {=0A= return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A= },=0A= =0A= shift: function() {=0A= var result =3D this[0];=0A= for (var i =3D 0; i < this.length - 1; i++)=0A= this[i] =3D this[i + 1];=0A= this.length--;=0A= return result;=0A= },=0A= =0A= inspect: function() {=0A= return '[' + this.map(Object.inspect).join(', ') + ']';=0A= }=0A= });=0A= var Hash =3D {=0A= _each: function(iterator) {=0A= for (key in this) {=0A= var value =3D this[key];=0A= if (typeof value =3D=3D 'function') continue;=0A= =0A= var pair =3D [key, value];=0A= pair.key =3D key;=0A= pair.value =3D value;=0A= iterator(pair);=0A= }=0A= },=0A= =0A= keys: function() {=0A= return this.pluck('key');=0A= },=0A= =0A= values: function() {=0A= return this.pluck('value');=0A= },=0A= =0A= merge: function(hash) {=0A= return $H(hash).inject($H(this), function(mergedHash, pair) {=0A= mergedHash[pair.key] =3D pair.value;=0A= return mergedHash;=0A= });=0A= },=0A= =0A= toQueryString: function() {=0A= return this.map(function(pair) {=0A= return pair.map(encodeURIComponent).join('=3D');=0A= }).join('&');=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= function $H(object) {=0A= var hash =3D Object.extend({}, object || {});=0A= Object.extend(hash, Enumerable);=0A= Object.extend(hash, Hash);=0A= return hash;=0A= }=0A= ObjectRange =3D Class.create();=0A= Object.extend(ObjectRange.prototype, Enumerable);=0A= Object.extend(ObjectRange.prototype, {=0A= initialize: function(start, end, exclusive) {=0A= this.start =3D start;=0A= this.end =3D end;=0A= this.exclusive =3D exclusive;=0A= },=0A= =0A= _each: function(iterator) {=0A= var value =3D this.start;=0A= do {=0A= iterator(value);=0A= value =3D value.succ();=0A= } while (this.include(value));=0A= },=0A= =0A= include: function(value) {=0A= if (value < this.start)=0A= return false;=0A= if (this.exclusive)=0A= return value < this.end;=0A= return value <=3D this.end;=0A= }=0A= });=0A= =0A= var $R =3D function(start, end, exclusive) {=0A= return new ObjectRange(start, end, exclusive);=0A= }=0A= =0A= var Ajax =3D {=0A= getTransport: function() {=0A= return Try.these(=0A= function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A= function() {return new ActiveXObject('Microsoft.XMLHTTP')},=0A= function() {return new XMLHttpRequest()}=0A= ) || false;=0A= },=0A= =0A= activeRequestCount: 0=0A= }=0A= =0A= Ajax.Responders =3D {=0A= responders: [],=0A= =0A= _each: function(iterator) {=0A= this.responders._each(iterator);=0A= },=0A= =0A= register: function(responderToAdd) {=0A= if (!this.include(responderToAdd))=0A= this.responders.push(responderToAdd);=0A= },=0A= =0A= unregister: function(responderToRemove) {=0A= this.responders =3D this.responders.without(responderToRemove);=0A= },=0A= =0A= dispatch: function(callback, request, transport, json) {=0A= this.each(function(responder) {=0A= if (responder[callback] && typeof responder[callback] =3D=3D = 'function') {=0A= try {=0A= responder[callback].apply(responder, [request, transport, = json]);=0A= } catch (e) {}=0A= }=0A= });=0A= }=0A= };=0A= =0A= Object.extend(Ajax.Responders, Enumerable);=0A= =0A= Ajax.Responders.register({=0A= onCreate: function() {=0A= Ajax.activeRequestCount++;=0A= },=0A= =0A= onComplete: function() {=0A= Ajax.activeRequestCount--;=0A= }=0A= });=0A= =0A= Ajax.Base =3D function() {};=0A= Ajax.Base.prototype =3D {=0A= setOptions: function(options) {=0A= this.options =3D {=0A= method: 'post',=0A= asynchronous: true,=0A= parameters: ''=0A= }=0A= Object.extend(this.options, options || {});=0A= },=0A= =0A= responseIsSuccess: function() {=0A= return this.transport.status =3D=3D undefined=0A= || this.transport.status =3D=3D 0=0A= || (this.transport.status >=3D 200 && this.transport.status < = 300);=0A= },=0A= =0A= responseIsFailure: function() {=0A= return !this.responseIsSuccess();=0A= }=0A= }=0A= =0A= Ajax.Request =3D Class.create();=0A= Ajax.Request.Events =3D=0A= ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A= =0A= Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A= initialize: function(url, options) {=0A= this.transport =3D Ajax.getTransport();=0A= this.setOptions(options);=0A= this.request(url);=0A= },=0A= =0A= request: function(url) {=0A= var parameters =3D this.options.parameters || '';=0A= if (parameters.length > 0) parameters +=3D '&_=3D';=0A= =0A= try {=0A= this.url =3D url;=0A= if (this.options.method =3D=3D 'get' && parameters.length > 0)=0A= this.url +=3D (this.url.match(/\?/) ? '&' : '?') + parameters;=0A= =0A= Ajax.Responders.dispatch('onCreate', this, this.transport);=0A= =0A= this.transport.open(this.options.method, this.url,=0A= this.options.asynchronous);=0A= =0A= if (this.options.asynchronous) {=0A= this.transport.onreadystatechange =3D = this.onStateChange.bind(this);=0A= setTimeout((function() = {this.respondToReadyState(1)}).bind(this), 10);=0A= }=0A= =0A= this.setRequestHeaders();=0A= =0A= var body =3D this.options.postBody ? this.options.postBody : = parameters;=0A= this.transport.send(this.options.method =3D=3D 'post' ? body : = null);=0A= =0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= setRequestHeaders: function() {=0A= var requestHeaders =3D=0A= ['X-Requested-With', 'XMLHttpRequest',=0A= 'X-Prototype-Version', Prototype.Version];=0A= =0A= if (this.options.method =3D=3D 'post') {=0A= requestHeaders.push('Content-type',=0A= 'application/x-www-form-urlencoded');=0A= =0A= /* Force "Connection: close" for Mozilla browsers to work around=0A= * a bug where XMLHttpReqeuest sends an incorrect Content-length=0A= * header. See Mozilla Bugzilla #246651.=0A= */=0A= if (this.transport.overrideMimeType)=0A= requestHeaders.push('Connection', 'close');=0A= }=0A= =0A= if (this.options.requestHeaders)=0A= requestHeaders.push.apply(requestHeaders, = this.options.requestHeaders);=0A= =0A= for (var i =3D 0; i < requestHeaders.length; i +=3D 2)=0A= this.transport.setRequestHeader(requestHeaders[i], = requestHeaders[i+1]);=0A= },=0A= =0A= onStateChange: function() {=0A= var readyState =3D this.transport.readyState;=0A= if (readyState !=3D 1)=0A= this.respondToReadyState(this.transport.readyState);=0A= },=0A= =0A= header: function(name) {=0A= try {=0A= return this.transport.getResponseHeader(name);=0A= } catch (e) {}=0A= },=0A= =0A= evalJSON: function() {=0A= try {=0A= return eval(this.header('X-JSON'));=0A= } catch (e) {}=0A= },=0A= =0A= evalResponse: function() {=0A= try {=0A= return eval(this.transport.responseText);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= respondToReadyState: function(readyState) {=0A= var event =3D Ajax.Request.Events[readyState];=0A= var transport =3D this.transport, json =3D this.evalJSON();=0A= =0A= if (event =3D=3D 'Complete') {=0A= try {=0A= (this.options['on' + this.transport.status]=0A= || this.options['on' + (this.responseIsSuccess() ? 'Success' : = 'Failure')]=0A= || Prototype.emptyFunction)(transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= if ((this.header('Content-type') || = '').match(/^text\/javascript/i))=0A= this.evalResponse();=0A= }=0A= =0A= try {=0A= (this.options['on' + event] || Prototype.emptyFunction)(transport, = json);=0A= Ajax.Responders.dispatch('on' + event, this, transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= /* Avoid memory leak in MSIE: clean up the oncomplete event handler = */=0A= if (event =3D=3D 'Complete')=0A= this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A= },=0A= =0A= dispatchException: function(exception) {=0A= (this.options.onException || Prototype.emptyFunction)(this, = exception);=0A= Ajax.Responders.dispatch('onException', this, exception);=0A= }=0A= });=0A= =0A= Ajax.Updater =3D Class.create();=0A= =0A= Object.extend(Object.extend(Ajax.Updater.prototype, = Ajax.Request.prototype), {=0A= initialize: function(container, url, options) {=0A= this.containers =3D {=0A= success: container.success ? $(container.success) : $(container),=0A= failure: container.failure ? $(container.failure) :=0A= (container.success ? null : $(container))=0A= }=0A= =0A= this.transport =3D Ajax.getTransport();=0A= this.setOptions(options);=0A= =0A= var onComplete =3D this.options.onComplete || = Prototype.emptyFunction;=0A= this.options.onComplete =3D (function(transport, object) {=0A= this.updateContent();=0A= onComplete(transport, object);=0A= }).bind(this);=0A= =0A= this.request(url);=0A= },=0A= =0A= updateContent: function() {=0A= var receiver =3D this.responseIsSuccess() ?=0A= this.containers.success : this.containers.failure;=0A= var response =3D this.transport.responseText;=0A= =0A= if (!this.options.evalScripts)=0A= response =3D response.stripScripts();=0A= =0A= if (receiver) {=0A= if (this.options.insertion) {=0A= new this.options.insertion(receiver, response);=0A= } else {=0A= Element.update(receiver, response);=0A= }=0A= }=0A= =0A= if (this.responseIsSuccess()) {=0A= if (this.onComplete)=0A= setTimeout(this.onComplete.bind(this), 10);=0A= }=0A= }=0A= });=0A= =0A= Ajax.PeriodicalUpdater =3D Class.create();=0A= Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A= initialize: function(container, url, options) {=0A= this.setOptions(options);=0A= this.onComplete =3D this.options.onComplete;=0A= =0A= this.frequency =3D (this.options.frequency || 2);=0A= this.decay =3D (this.options.decay || 1);=0A= =0A= this.updater =3D {};=0A= this.container =3D container;=0A= this.url =3D url;=0A= =0A= this.start();=0A= },=0A= =0A= start: function() {=0A= this.options.onComplete =3D this.updateComplete.bind(this);=0A= this.onTimerEvent();=0A= },=0A= =0A= stop: function() {=0A= this.updater.onComplete =3D undefined;=0A= clearTimeout(this.timer);=0A= (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A= },=0A= =0A= updateComplete: function(request) {=0A= if (this.options.decay) {=0A= this.decay =3D (request.responseText =3D=3D this.lastText ?=0A= this.decay * this.options.decay : 1);=0A= =0A= this.lastText =3D request.responseText;=0A= }=0A= this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A= this.decay * this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: function() {=0A= this.updater =3D new Ajax.Updater(this.container, this.url, = this.options);=0A= }=0A= });=0A= document.getElementsByClassName =3D function(className, parentElement) {=0A= var children =3D ($(parentElement) || = document.body).getElementsByTagName('*');=0A= return $A(children).inject([], function(elements, child) {=0A= if (child.className.match(new RegExp("(^|\\s)" + className + = "(\\s|$)")))=0A= elements.push(child);=0A= return elements;=0A= });=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= if (!window.Element) {=0A= var Element =3D new Object();=0A= }=0A= =0A= Object.extend(Element, {=0A= visible: function(element) {=0A= return $(element).style.display !=3D 'none';=0A= },=0A= =0A= toggle: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= Element[Element.visible(element) ? 'hide' : 'show'](element);=0A= }=0A= },=0A= =0A= hide: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= element.style.display =3D 'none';=0A= }=0A= },=0A= =0A= show: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= element.style.display =3D '';=0A= }=0A= },=0A= =0A= remove: function(element) {=0A= element =3D $(element);=0A= element.parentNode.removeChild(element);=0A= },=0A= =0A= update: function(element, html) {=0A= $(element).innerHTML =3D html.stripScripts();=0A= setTimeout(function() {html.evalScripts()}, 10);=0A= },=0A= =0A= getHeight: function(element) {=0A= element =3D $(element);=0A= return element.offsetHeight;=0A= },=0A= =0A= classNames: function(element) {=0A= return new Element.ClassNames(element);=0A= },=0A= =0A= hasClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).include(className);=0A= },=0A= =0A= addClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).add(className);=0A= },=0A= =0A= removeClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).remove(className);=0A= },=0A= =0A= // removes whitespace-only text node children=0A= cleanWhitespace: function(element) {=0A= element =3D $(element);=0A= for (var i =3D 0; i < element.childNodes.length; i++) {=0A= var node =3D element.childNodes[i];=0A= if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A= Element.remove(node);=0A= }=0A= },=0A= =0A= empty: function(element) {=0A= return $(element).innerHTML.match(/^\s*$/);=0A= },=0A= =0A= scrollTo: function(element) {=0A= element =3D $(element);=0A= var x =3D element.x ? element.x : element.offsetLeft,=0A= y =3D element.y ? element.y : element.offsetTop;=0A= window.scrollTo(x, y);=0A= },=0A= =0A= getStyle: function(element, style) {=0A= element =3D $(element);=0A= var value =3D element.style[style.camelize()];=0A= if (!value) {=0A= if (document.defaultView && document.defaultView.getComputedStyle) = {=0A= var css =3D document.defaultView.getComputedStyle(element, null);=0A= value =3D css ? css.getPropertyValue(style) : null;=0A= } else if (element.currentStyle) {=0A= value =3D element.currentStyle[style.camelize()];=0A= }=0A= }=0A= =0A= if (window.opera && ['left', 'top', 'right', = 'bottom'].include(style))=0A= if (Element.getStyle(element, 'position') =3D=3D 'static') value = =3D 'auto';=0A= =0A= return value =3D=3D 'auto' ? null : value;=0A= },=0A= =0A= setStyle: function(element, style) {=0A= element =3D $(element);=0A= for (name in style)=0A= element.style[name.camelize()] =3D style[name];=0A= },=0A= =0A= getDimensions: function(element) {=0A= element =3D $(element);=0A= if (Element.getStyle(element, 'display') !=3D 'none')=0A= return {width: element.offsetWidth, height: element.offsetHeight};=0A= =0A= // All *Width and *Height properties give 0 on elements with display = none,=0A= // so enable the element temporarily=0A= var els =3D element.style;=0A= var originalVisibility =3D els.visibility;=0A= var originalPosition =3D els.position;=0A= els.visibility =3D 'hidden';=0A= els.position =3D 'absolute';=0A= els.display =3D '';=0A= var originalWidth =3D element.clientWidth;=0A= var originalHeight =3D element.clientHeight;=0A= els.display =3D 'none';=0A= els.position =3D originalPosition;=0A= els.visibility =3D originalVisibility;=0A= return {width: originalWidth, height: originalHeight};=0A= },=0A= =0A= makePositioned: function(element) {=0A= element =3D $(element);=0A= var pos =3D Element.getStyle(element, 'position');=0A= if (pos =3D=3D 'static' || !pos) {=0A= element._madePositioned =3D true;=0A= element.style.position =3D 'relative';=0A= // Opera returns the offset relative to the positioning context, = when an=0A= // element is position relative but top and left have not been = defined=0A= if (window.opera) {=0A= element.style.top =3D 0;=0A= element.style.left =3D 0;=0A= }=0A= }=0A= },=0A= =0A= undoPositioned: function(element) {=0A= element =3D $(element);=0A= if (element._madePositioned) {=0A= element._madePositioned =3D undefined;=0A= element.style.position =3D=0A= element.style.top =3D=0A= element.style.left =3D=0A= element.style.bottom =3D=0A= element.style.right =3D '';=0A= }=0A= },=0A= =0A= makeClipping: function(element) {=0A= element =3D $(element);=0A= if (element._overflow) return;=0A= element._overflow =3D element.style.overflow;=0A= if ((Element.getStyle(element, 'overflow') || 'visible') !=3D = 'hidden')=0A= element.style.overflow =3D 'hidden';=0A= },=0A= =0A= undoClipping: function(element) {=0A= element =3D $(element);=0A= if (element._overflow) return;=0A= element.style.overflow =3D element._overflow;=0A= element._overflow =3D undefined;=0A= }=0A= });=0A= =0A= var Toggle =3D new Object();=0A= Toggle.display =3D Element.toggle;=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.Insertion =3D function(adjacency) {=0A= this.adjacency =3D adjacency;=0A= }=0A= =0A= Abstract.Insertion.prototype =3D {=0A= initialize: function(element, content) {=0A= this.element =3D $(element);=0A= this.content =3D content.stripScripts();=0A= =0A= if (this.adjacency && this.element.insertAdjacentHTML) {=0A= try {=0A= this.element.insertAdjacentHTML(this.adjacency, this.content);=0A= } catch (e) {=0A= if (this.element.tagName.toLowerCase() =3D=3D 'tbody') {=0A= this.insertContent(this.contentFromAnonymousTable());=0A= } else {=0A= throw e;=0A= }=0A= }=0A= } else {=0A= this.range =3D this.element.ownerDocument.createRange();=0A= if (this.initializeRange) this.initializeRange();=0A= = this.insertContent([this.range.createContextualFragment(this.content)]);=0A= }=0A= =0A= setTimeout(function() {content.evalScripts()}, 10);=0A= },=0A= =0A= contentFromAnonymousTable: function() {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D '' + this.content + = '
';=0A= return $A(div.childNodes[0].childNodes[0].childNodes);=0A= }=0A= }=0A= =0A= var Insertion =3D new Object();=0A= =0A= Insertion.Before =3D Class.create();=0A= Insertion.Before.prototype =3D Object.extend(new = Abstract.Insertion('beforeBegin'), {=0A= initializeRange: function() {=0A= this.range.setStartBefore(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.parentNode.insertBefore(fragment, this.element);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.Top =3D Class.create();=0A= Insertion.Top.prototype =3D Object.extend(new = Abstract.Insertion('afterBegin'), {=0A= initializeRange: function() {=0A= this.range.selectNodeContents(this.element);=0A= this.range.collapse(true);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.reverse(false).each((function(fragment) {=0A= this.element.insertBefore(fragment, this.element.firstChild);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.Bottom =3D Class.create();=0A= Insertion.Bottom.prototype =3D Object.extend(new = Abstract.Insertion('beforeEnd'), {=0A= initializeRange: function() {=0A= this.range.selectNodeContents(this.element);=0A= this.range.collapse(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.appendChild(fragment);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.After =3D Class.create();=0A= Insertion.After.prototype =3D Object.extend(new = Abstract.Insertion('afterEnd'), {=0A= initializeRange: function() {=0A= this.range.setStartAfter(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.parentNode.insertBefore(fragment,=0A= this.element.nextSibling);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Element.ClassNames =3D Class.create();=0A= Element.ClassNames.prototype =3D {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= },=0A= =0A= _each: function(iterator) {=0A= this.element.className.split(/\s+/).select(function(name) {=0A= return name.length > 0;=0A= })._each(iterator);=0A= },=0A= =0A= set: function(className) {=0A= this.element.className =3D className;=0A= },=0A= =0A= add: function(classNameToAdd) {=0A= if (this.include(classNameToAdd)) return;=0A= this.set(this.toArray().concat(classNameToAdd).join(' '));=0A= },=0A= =0A= remove: function(classNameToRemove) {=0A= if (!this.include(classNameToRemove)) return;=0A= this.set(this.select(function(className) {=0A= return className !=3D classNameToRemove;=0A= }).join(' '));=0A= },=0A= =0A= toString: function() {=0A= return this.toArray().join(' ');=0A= }=0A= }=0A= =0A= Object.extend(Element.ClassNames.prototype, Enumerable);=0A= var Field =3D {=0A= clear: function() {=0A= for (var i =3D 0; i < arguments.length; i++)=0A= $(arguments[i]).value =3D '';=0A= },=0A= =0A= focus: function(element) {=0A= $(element).focus();=0A= },=0A= =0A= present: function() {=0A= for (var i =3D 0; i < arguments.length; i++)=0A= if ($(arguments[i]).value =3D=3D '') return false;=0A= return true;=0A= },=0A= =0A= select: function(element) {=0A= $(element).select();=0A= },=0A= =0A= activate: function(element) {=0A= element =3D $(element);=0A= element.focus();=0A= if (element.select)=0A= element.select();=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Form =3D {=0A= serialize: function(form) {=0A= var elements =3D Form.getElements($(form));=0A= var queryComponents =3D new Array();=0A= =0A= for (var i =3D 0; i < elements.length; i++) {=0A= var queryComponent =3D Form.Element.serialize(elements[i]);=0A= if (queryComponent)=0A= queryComponents.push(queryComponent);=0A= }=0A= =0A= return queryComponents.join('&');=0A= },=0A= =0A= getElements: function(form) {=0A= form =3D $(form);=0A= var elements =3D new Array();=0A= =0A= for (tagName in Form.Element.Serializers) {=0A= var tagElements =3D form.getElementsByTagName(tagName);=0A= for (var j =3D 0; j < tagElements.length; j++)=0A= elements.push(tagElements[j]);=0A= }=0A= return elements;=0A= },=0A= =0A= getInputs: function(form, typeName, name) {=0A= form =3D $(form);=0A= var inputs =3D form.getElementsByTagName('input');=0A= =0A= if (!typeName && !name)=0A= return inputs;=0A= =0A= var matchingInputs =3D new Array();=0A= for (var i =3D 0; i < inputs.length; i++) {=0A= var input =3D inputs[i];=0A= if ((typeName && input.type !=3D typeName) ||=0A= (name && input.name !=3D name))=0A= continue;=0A= matchingInputs.push(input);=0A= }=0A= =0A= return matchingInputs;=0A= },=0A= =0A= disable: function(form) {=0A= var elements =3D Form.getElements(form);=0A= for (var i =3D 0; i < elements.length; i++) {=0A= var element =3D elements[i];=0A= element.blur();=0A= element.disabled =3D 'true';=0A= }=0A= },=0A= =0A= enable: function(form) {=0A= var elements =3D Form.getElements(form);=0A= for (var i =3D 0; i < elements.length; i++) {=0A= var element =3D elements[i];=0A= element.disabled =3D '';=0A= }=0A= },=0A= =0A= findFirstElement: function(form) {=0A= return Form.getElements(form).find(function(element) {=0A= return element.type !=3D 'hidden' && !element.disabled &&=0A= ['input', 'select', = 'textarea'].include(element.tagName.toLowerCase());=0A= });=0A= },=0A= =0A= focusFirstElement: function(form) {=0A= Field.activate(Form.findFirstElement(form));=0A= },=0A= =0A= reset: function(form) {=0A= $(form).reset();=0A= }=0A= }=0A= =0A= Form.Element =3D {=0A= serialize: function(element) {=0A= element =3D $(element);=0A= var method =3D element.tagName.toLowerCase();=0A= var parameter =3D Form.Element.Serializers[method](element);=0A= =0A= if (parameter) {=0A= var key =3D encodeURIComponent(parameter[0]);=0A= if (key.length =3D=3D 0) return;=0A= =0A= if (parameter[1].constructor !=3D Array)=0A= parameter[1] =3D [parameter[1]];=0A= =0A= return parameter[1].map(function(value) {=0A= return key + '=3D' + encodeURIComponent(value);=0A= }).join('&');=0A= }=0A= },=0A= =0A= getValue: function(element) {=0A= element =3D $(element);=0A= var method =3D element.tagName.toLowerCase();=0A= var parameter =3D Form.Element.Serializers[method](element);=0A= =0A= if (parameter)=0A= return parameter[1];=0A= }=0A= }=0A= =0A= Form.Element.Serializers =3D {=0A= input: function(element) {=0A= switch (element.type.toLowerCase()) {=0A= case 'submit':=0A= case 'hidden':=0A= case 'password':=0A= case 'text':=0A= return Form.Element.Serializers.textarea(element);=0A= case 'checkbox':=0A= case 'radio':=0A= return Form.Element.Serializers.inputSelector(element);=0A= }=0A= return false;=0A= },=0A= =0A= inputSelector: function(element) {=0A= if (element.checked)=0A= return [element.name, element.value];=0A= },=0A= =0A= textarea: function(element) {=0A= return [element.name, element.value];=0A= },=0A= =0A= select: function(element) {=0A= return Form.Element.Serializers[element.type =3D=3D 'select-one' ?=0A= 'selectOne' : 'selectMany'](element);=0A= },=0A= =0A= selectOne: function(element) {=0A= var value =3D '', opt, index =3D element.selectedIndex;=0A= if (index >=3D 0) {=0A= opt =3D element.options[index];=0A= value =3D opt.value;=0A= if (!value && !('value' in opt))=0A= value =3D opt.text;=0A= }=0A= return [element.name, value];=0A= },=0A= =0A= selectMany: function(element) {=0A= var value =3D new Array();=0A= for (var i =3D 0; i < element.length; i++) {=0A= var opt =3D element.options[i];=0A= if (opt.selected) {=0A= var optValue =3D opt.value;=0A= if (!optValue && !('value' in opt))=0A= optValue =3D opt.text;=0A= value.push(optValue);=0A= }=0A= }=0A= return [element.name, value];=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var $F =3D Form.Element.getValue;=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.TimedObserver =3D function() {}=0A= Abstract.TimedObserver.prototype =3D {=0A= initialize: function(element, frequency, callback) {=0A= this.frequency =3D frequency;=0A= this.element =3D $(element);=0A= this.callback =3D callback;=0A= =0A= this.lastValue =3D this.getValue();=0A= this.registerCallback();=0A= },=0A= =0A= registerCallback: function() {=0A= setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: function() {=0A= var value =3D this.getValue();=0A= if (this.lastValue !=3D value) {=0A= this.callback(this.element, value);=0A= this.lastValue =3D value;=0A= }=0A= }=0A= }=0A= =0A= Form.Element.Observer =3D Class.create();=0A= Form.Element.Observer.prototype =3D Object.extend(new = Abstract.TimedObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.Observer =3D Class.create();=0A= Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A= getValue: function() {=0A= return Form.serialize(this.element);=0A= }=0A= });=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.EventObserver =3D function() {}=0A= Abstract.EventObserver.prototype =3D {=0A= initialize: function(element, callback) {=0A= this.element =3D $(element);=0A= this.callback =3D callback;=0A= =0A= this.lastValue =3D this.getValue();=0A= if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A= this.registerFormCallbacks();=0A= else=0A= this.registerCallback(this.element);=0A= },=0A= =0A= onElementEvent: function() {=0A= var value =3D this.getValue();=0A= if (this.lastValue !=3D value) {=0A= this.callback(this.element, value);=0A= this.lastValue =3D value;=0A= }=0A= },=0A= =0A= registerFormCallbacks: function() {=0A= var elements =3D Form.getElements(this.element);=0A= for (var i =3D 0; i < elements.length; i++)=0A= this.registerCallback(elements[i]);=0A= },=0A= =0A= registerCallback: function(element) {=0A= if (element.type) {=0A= switch (element.type.toLowerCase()) {=0A= case 'checkbox':=0A= case 'radio':=0A= Event.observe(element, 'click', = this.onElementEvent.bind(this));=0A= break;=0A= case 'password':=0A= case 'text':=0A= case 'textarea':=0A= case 'select-one':=0A= case 'select-multiple':=0A= Event.observe(element, 'change', = this.onElementEvent.bind(this));=0A= break;=0A= }=0A= }=0A= }=0A= }=0A= =0A= Form.Element.EventObserver =3D Class.create();=0A= Form.Element.EventObserver.prototype =3D Object.extend(new = Abstract.EventObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.EventObserver =3D Class.create();=0A= Form.EventObserver.prototype =3D Object.extend(new = Abstract.EventObserver(), {=0A= getValue: function() {=0A= return Form.serialize(this.element);=0A= }=0A= });=0A= if (!window.Event) {=0A= var Event =3D new Object();=0A= }=0A= =0A= Object.extend(Event, {=0A= KEY_BACKSPACE: 8,=0A= KEY_TAB: 9,=0A= KEY_RETURN: 13,=0A= KEY_ESC: 27,=0A= KEY_LEFT: 37,=0A= KEY_UP: 38,=0A= KEY_RIGHT: 39,=0A= KEY_DOWN: 40,=0A= KEY_DELETE: 46,=0A= =0A= element: function(event) {=0A= return event.target || event.srcElement;=0A= },=0A= =0A= isLeftClick: function(event) {=0A= return (((event.which) && (event.which =3D=3D 1)) ||=0A= ((event.button) && (event.button =3D=3D 1)));=0A= },=0A= =0A= pointerX: function(event) {=0A= return event.pageX || (event.clientX +=0A= (document.documentElement.scrollLeft || document.body.scrollLeft));=0A= },=0A= =0A= pointerY: function(event) {=0A= return event.pageY || (event.clientY +=0A= (document.documentElement.scrollTop || document.body.scrollTop));=0A= },=0A= =0A= stop: function(event) {=0A= if (event.preventDefault) {=0A= event.preventDefault();=0A= event.stopPropagation();=0A= } else {=0A= event.returnValue =3D false;=0A= event.cancelBubble =3D true;=0A= }=0A= },=0A= =0A= // find the first node with the given tagName, starting from the=0A= // node the event was triggered on; traverses the DOM upwards=0A= findElement: function(event, tagName) {=0A= var element =3D Event.element(event);=0A= while (element.parentNode && (!element.tagName ||=0A= (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A= element =3D element.parentNode;=0A= return element;=0A= },=0A= =0A= observers: false,=0A= =0A= _observeAndCache: function(element, name, observer, useCapture) {=0A= if (!this.observers) this.observers =3D [];=0A= if (element.addEventListener) {=0A= this.observers.push([element, name, observer, useCapture]);=0A= element.addEventListener(name, observer, useCapture);=0A= } else if (element.attachEvent) {=0A= this.observers.push([element, name, observer, useCapture]);=0A= element.attachEvent('on' + name, observer);=0A= }=0A= },=0A= =0A= unloadCache: function() {=0A= if (!Event.observers) return;=0A= for (var i =3D 0; i < Event.observers.length; i++) {=0A= Event.stopObserving.apply(this, Event.observers[i]);=0A= Event.observers[i][0] =3D null;=0A= }=0A= Event.observers =3D false;=0A= },=0A= =0A= observe: function(element, name, observer, useCapture) {=0A= var element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A= || element.attachEvent))=0A= name =3D 'keydown';=0A= =0A= this._observeAndCache(element, name, observer, useCapture);=0A= },=0A= =0A= stopObserving: function(element, name, observer, useCapture) {=0A= var element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A= || element.detachEvent))=0A= name =3D 'keydown';=0A= =0A= if (element.removeEventListener) {=0A= element.removeEventListener(name, observer, useCapture);=0A= } else if (element.detachEvent) {=0A= element.detachEvent('on' + name, observer);=0A= }=0A= }=0A= });=0A= =0A= /* prevent memory leaks in IE */=0A= Event.observe(window, 'unload', Event.unloadCache, false);=0A= var Position =3D {=0A= // set to true if needed, warning: firefox performance problems=0A= // NOT neeeded for page scrolling, only if draggable contained in=0A= // scrollable elements=0A= includeScrollOffsets: false,=0A= =0A= // must be called before calling withinIncludingScrolloffset, every = time the=0A= // page is scrolled=0A= prepare: function() {=0A= this.deltaX =3D window.pageXOffset=0A= || document.documentElement.scrollLeft=0A= || document.body.scrollLeft=0A= || 0;=0A= this.deltaY =3D window.pageYOffset=0A= || document.documentElement.scrollTop=0A= || document.body.scrollTop=0A= || 0;=0A= },=0A= =0A= realOffset: function(element) {=0A= var valueT =3D 0, valueL =3D 0;=0A= do {=0A= valueT +=3D element.scrollTop || 0;=0A= valueL +=3D element.scrollLeft || 0;=0A= element =3D element.parentNode;=0A= } while (element);=0A= return [valueL, valueT];=0A= },=0A= =0A= cumulativeOffset: function(element) {=0A= var valueT =3D 0, valueL =3D 0;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= element =3D element.offsetParent;=0A= } while (element);=0A= return [valueL, valueT];=0A= },=0A= =0A= positionedOffset: function(element) {=0A= var valueT =3D 0, valueL =3D 0;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= element =3D element.offsetParent;=0A= if (element) {=0A= p =3D Element.getStyle(element, 'position');=0A= if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A= }=0A= } while (element);=0A= return [valueL, valueT];=0A= },=0A= =0A= offsetParent: function(element) {=0A= if (element.offsetParent) return element.offsetParent;=0A= if (element =3D=3D document.body) return element;=0A= =0A= while ((element =3D element.parentNode) && element !=3D = document.body)=0A= if (Element.getStyle(element, 'position') !=3D 'static')=0A= return element;=0A= =0A= return document.body;=0A= },=0A= =0A= // caches x/y coordinate pair to use with overlap=0A= within: function(element, x, y) {=0A= if (this.includeScrollOffsets)=0A= return this.withinIncludingScrolloffsets(element, x, y);=0A= this.xcomp =3D x;=0A= this.ycomp =3D y;=0A= this.offset =3D this.cumulativeOffset(element);=0A= =0A= return (y >=3D this.offset[1] &&=0A= y < this.offset[1] + element.offsetHeight &&=0A= x >=3D this.offset[0] &&=0A= x < this.offset[0] + element.offsetWidth);=0A= },=0A= =0A= withinIncludingScrolloffsets: function(element, x, y) {=0A= var offsetcache =3D this.realOffset(element);=0A= =0A= this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A= this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A= this.offset =3D this.cumulativeOffset(element);=0A= =0A= return (this.ycomp >=3D this.offset[1] &&=0A= this.ycomp < this.offset[1] + element.offsetHeight &&=0A= this.xcomp >=3D this.offset[0] &&=0A= this.xcomp < this.offset[0] + element.offsetWidth);=0A= },=0A= =0A= // within must be called directly before=0A= overlap: function(mode, element) {=0A= if (!mode) return 0;=0A= if (mode =3D=3D 'vertical')=0A= return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A= element.offsetHeight;=0A= if (mode =3D=3D 'horizontal')=0A= return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A= element.offsetWidth;=0A= },=0A= =0A= clone: function(source, target) {=0A= source =3D $(source);=0A= target =3D $(target);=0A= target.style.position =3D 'absolute';=0A= var offsets =3D this.cumulativeOffset(source);=0A= target.style.top =3D offsets[1] + 'px';=0A= target.style.left =3D offsets[0] + 'px';=0A= target.style.width =3D source.offsetWidth + 'px';=0A= target.style.height =3D source.offsetHeight + 'px';=0A= },=0A= =0A= page: function(forElement) {=0A= var valueT =3D 0, valueL =3D 0;=0A= =0A= var element =3D forElement;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= =0A= // Safari fix=0A= if (element.offsetParent=3D=3Ddocument.body)=0A= if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A= =0A= } while (element =3D element.offsetParent);=0A= =0A= element =3D forElement;=0A= do {=0A= valueT -=3D element.scrollTop || 0;=0A= valueL -=3D element.scrollLeft || 0;=0A= } while (element =3D element.parentNode);=0A= =0A= return [valueL, valueT];=0A= },=0A= =0A= clone: function(source, target) {=0A= var options =3D Object.extend({=0A= setLeft: true,=0A= setTop: true,=0A= setWidth: true,=0A= setHeight: true,=0A= offsetTop: 0,=0A= offsetLeft: 0=0A= }, arguments[2] || {})=0A= =0A= // find page position of source=0A= source =3D $(source);=0A= var p =3D Position.page(source);=0A= =0A= // find coordinate system to use=0A= target =3D $(target);=0A= var delta =3D [0, 0];=0A= var parent =3D null;=0A= // delta [0,0] will do fine with position: fixed elements,=0A= // position:absolute needs offsetParent deltas=0A= if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A= parent =3D Position.offsetParent(target);=0A= delta =3D Position.page(parent);=0A= }=0A= =0A= // correct by body offsets (fixes Safari)=0A= if (parent =3D=3D document.body) {=0A= delta[0] -=3D document.body.offsetLeft;=0A= delta[1] -=3D document.body.offsetTop;=0A= }=0A= =0A= // set position=0A= if(options.setLeft) target.style.left =3D (p[0] - delta[0] + = options.offsetLeft) + 'px';=0A= if(options.setTop) target.style.top =3D (p[1] - delta[1] + = options.offsetTop) + 'px';=0A= if(options.setWidth) target.style.width =3D source.offsetWidth + = 'px';=0A= if(options.setHeight) target.style.height =3D source.offsetHeight + = 'px';=0A= },=0A= =0A= absolutize: function(element) {=0A= element =3D $(element);=0A= if (element.style.position =3D=3D 'absolute') return;=0A= Position.prepare();=0A= =0A= var offsets =3D Position.positionedOffset(element);=0A= var top =3D offsets[1];=0A= var left =3D offsets[0];=0A= var width =3D element.clientWidth;=0A= var height =3D element.clientHeight;=0A= =0A= element._originalLeft =3D left - parseFloat(element.style.left || = 0);=0A= element._originalTop =3D top - parseFloat(element.style.top || = 0);=0A= element._originalWidth =3D element.style.width;=0A= element._originalHeight =3D element.style.height;=0A= =0A= element.style.position =3D 'absolute';=0A= element.style.top =3D top + 'px';;=0A= element.style.left =3D left + 'px';;=0A= element.style.width =3D width + 'px';;=0A= element.style.height =3D height + 'px';;=0A= },=0A= =0A= relativize: function(element) {=0A= element =3D $(element);=0A= if (element.style.position =3D=3D 'relative') return;=0A= Position.prepare();=0A= =0A= element.style.position =3D 'relative';=0A= var top =3D parseFloat(element.style.top || 0) - = (element._originalTop || 0);=0A= var left =3D parseFloat(element.style.left || 0) - = (element._originalLeft || 0);=0A= =0A= element.style.top =3D top + 'px';=0A= element.style.left =3D left + 'px';=0A= element.style.height =3D element._originalHeight;=0A= element.style.width =3D element._originalWidth;=0A= }=0A= }=0A= =0A= // Safari returns margins on body which is incorrect if the child is = absolutely=0A= // positioned. For performance reasons, redefine = Position.cumulativeOffset for=0A= // KHTML/WebKit only.=0A= if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A= Position.cumulativeOffset =3D function(element) {=0A= var valueT =3D 0, valueL =3D 0;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= if (element.offsetParent =3D=3D document.body)=0A= if (Element.getStyle(element, 'position') =3D=3D 'absolute') = break;=0A= =0A= element =3D element.offsetParent;=0A= } while (element);=0A= =0A= return [valueL, valueT];=0A= }=0A= }=0A= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowgallery/js/scriptaculous.js // Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, = http://mir.aculo.us)=0A= // =0A= // Permission is hereby granted, free of charge, to any person obtaining=0A= // a copy of this software and associated documentation files (the=0A= // "Software"), to deal in the Software without restriction, including=0A= // without limitation the rights to use, copy, modify, merge, publish,=0A= // distribute, sublicense, and/or sell copies of the Software, and to=0A= // permit persons to whom the Software is furnished to do so, subject to=0A= // the following conditions:=0A= // =0A= // The above copyright notice and this permission notice shall be=0A= // included in all copies or substantial portions of the Software.=0A= //=0A= // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A= // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A= // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A= // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A= // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A= // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A= // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A= =0A= var Scriptaculous =3D {=0A= Version: '1.5.1',=0A= require: function(libraryName) {=0A= // inserting via DOM fails in Safari 2.0, so brute force approach=0A= document.write('');=0A= },=0A= load: function() {=0A= if((typeof Prototype=3D=3D'undefined') ||=0A= parseFloat(Prototype.Version.split(".")[0] + "." +=0A= Prototype.Version.split(".")[1]) < 1.4)=0A= throw("script.aculo.us requires the Prototype JavaScript framework = >=3D 1.4.0");=0A= =0A= $A(document.getElementsByTagName("script")).findAll( function(s) {=0A= return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A= }).each( function(s) {=0A= var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A= var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A= (includes ? includes[1] : = 'builder,effects,dragdrop,controls,slider').split(',').each(=0A= function(include) { Scriptaculous.require(path+include+'.js') });=0A= });=0A= }=0A= }=0A= =0A= Scriptaculous.load();=0A= ------=_NextPart_000_003E_01C7EDB5.5B998640 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://media.uow.edu.au/content/fragments/uowgallery/js/lightbox.js // = -------------------------------------------------------------------------= ----------=0A= //=0A= // Lightbox v2.03=0A= // by Lokesh Dhakar - http://www.huddletogether.com=0A= // 4/9/06=0A= //=0A= // For more information on this script, visit:=0A= // http://huddletogether.com/projects/lightbox2/=0A= //=0A= // Licensed under the Creative Commons Attribution 2.5 License - = http://creativecommons.org/licenses/by/2.5/=0A= // =0A= // Credit also due to those who have helped, inspired, and made their = code available to the public.=0A= // Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), = Thomas Fuchs(mir.aculo.us), and others.=0A= //=0A= //=0A= // = -------------------------------------------------------------------------= ----------=0A= /*=0A= =0A= Table of Contents=0A= -----------------=0A= Configuration=0A= Global Variables=0A= =0A= Extending Built-in Objects =0A= - Object.extend(Element)=0A= - Array.prototype.removeDuplicates()=0A= - Array.prototype.empty()=0A= =0A= Lightbox Class Declaration=0A= - initialize()=0A= - start()=0A= - changeImage()=0A= - resizeImageContainer()=0A= - showImage()=0A= - updateDetails()=0A= - updateNav()=0A= - enableKeyboardNav()=0A= - disableKeyboardNav()=0A= - keyboardAction()=0A= - preloadNeighborImages()=0A= - end()=0A= =0A= Miscellaneous Functions=0A= - getPageScroll()=0A= - getPageSize()=0A= - getKey()=0A= - listenKey()=0A= - showSelectBoxes()=0A= - hideSelectBoxes()=0A= - showFlash()=0A= - hideFlash()=0A= - pause()=0A= - initLightbox()=0A= =0A= Function Calls=0A= - addLoadEvent(initLightbox)=0A= =0A= */=0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // Configuration=0A= //=0A= var fileLoadingImage =3D = "/content/fragments/uowgallery/image/loading.gif"; =0A= var fileBottomNavCloseImage =3D = "/content/fragments/uowgallery/image/closelabel.gif";=0A= =0A= var animate =3D true; // toggles resizing animations=0A= var resizeSpeed =3D 7; // controls the speed of the image resizing = animations (1=3Dslowest and 10=3Dfastest)=0A= =0A= var borderSize =3D 10; //if you adjust the padding in the CSS, you will = need to update this variable=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // Global Variables=0A= //=0A= var imageArray =3D new Array;=0A= var activeImage;=0A= =0A= if(animate =3D=3D true){=0A= overlayDuration =3D 0.2; // shadow fade in/out duration=0A= if(resizeSpeed > 10){ resizeSpeed =3D 10;}=0A= if(resizeSpeed < 1){ resizeSpeed =3D 1;}=0A= resizeDuration =3D (11 - resizeSpeed) * 0.15;=0A= } else { =0A= overlayDuration =3D 0;=0A= resizeDuration =3D 0;=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // Additional methods for Element added by SU, Couloir=0A= // - further additions by Lokesh Dhakar (huddletogether.com)=0A= //=0A= Object.extend(Element, {=0A= getWidth: function(element) {=0A= element =3D $(element);=0A= return element.offsetWidth; =0A= },=0A= setWidth: function(element,w) {=0A= element =3D $(element);=0A= element.style.width =3D w +"px";=0A= },=0A= setHeight: function(element,h) {=0A= element =3D $(element);=0A= element.style.height =3D h +"px";=0A= },=0A= setTop: function(element,t) {=0A= element =3D $(element);=0A= element.style.top =3D t +"px";=0A= },=0A= setSrc: function(element,src) {=0A= element =3D $(element);=0A= element.src =3D src; =0A= },=0A= setHref: function(element,href) {=0A= element =3D $(element);=0A= element.href =3D href; =0A= },=0A= setInnerHTML: function(element,content) {=0A= element =3D $(element);=0A= element.innerHTML =3D content;=0A= }=0A= });=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // Extending built-in Array object=0A= // - array.removeDuplicates()=0A= // - array.empty()=0A= //=0A= Array.prototype.removeDuplicates =3D function () {=0A= for(i =3D 0; i < this.length; i++){=0A= for(j =3D this.length-1; j>i; j--){ =0A= if(this[i][0] =3D=3D this[j][0]){=0A= this.splice(j,1);=0A= }=0A= }=0A= }=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= Array.prototype.empty =3D function () {=0A= for(i =3D 0; i <=3D this.length; i++){=0A= this.shift();=0A= }=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // Lightbox Class Declaration=0A= // - initialize()=0A= // - start()=0A= // - changeImage()=0A= // - resizeImageContainer()=0A= // - showImage()=0A= // - updateDetails()=0A= // - updateNav()=0A= // - enableKeyboardNav()=0A= // - disableKeyboardNav()=0A= // - keyboardNavAction()=0A= // - preloadNeighborImages()=0A= // - end()=0A= //=0A= // Structuring of code inspired by Scott Upton (http://www.uptonic.com/)=0A= //=0A= var Lightbox =3D Class.create();=0A= =0A= Lightbox.prototype =3D {=0A= =0A= // initialize()=0A= // Constructor runs on completion of the DOM loading. Loops through = anchor tags looking for =0A= // 'lightbox' references and applies onclick events to appropriate = links. The 2nd section of=0A= // the function inserts html at the bottom of the page which is used to = display the shadow =0A= // overlay and the image container.=0A= //=0A= initialize: function() { =0A= if (!document.getElementsByTagName){ return; }=0A= var anchors =3D document.getElementsByTagName('a');=0A= var areas =3D document.getElementsByTagName('area');=0A= =0A= // loop through all anchor tags=0A= for (var i=3D0; i=0A= //
=0A= //
=0A= //
=0A= // =0A= //
=0A= // =0A= // =0A= //
=0A= //
=0A= // =0A= // =0A= // =0A= //
=0A= //
=0A= //
=0A= //
=0A= //
=0A= //
=0A= // =0A= // =0A= //
=0A= //
=0A= // =0A= // =0A= // =0A= //
=0A= //
=0A= //
=0A= //
=0A= =0A= =0A= var objBody =3D document.getElementsByTagName("body").item(0);=0A= =0A= var objOverlay =3D document.createElement("div");=0A= objOverlay.setAttribute('id','overlay');=0A= objOverlay.style.display =3D 'none';=0A= objOverlay.onclick =3D function() { myLightbox.end(); }=0A= objBody.appendChild(objOverlay);=0A= =0A= var objLightbox =3D document.createElement("div");=0A= objLightbox.setAttribute('id','lightbox');=0A= objLightbox.style.display =3D 'none';=0A= objLightbox.onclick =3D function(e) { var clickObj =3D = Event.element(e).id; if ( clickObj =3D=3D 'lightbox') { = myLightbox.end(); } };=0A= objBody.appendChild(objLightbox);=0A= =0A= var objOuterImageContainer =3D document.createElement("div");=0A= objOuterImageContainer.setAttribute('id','outerImageContainer');=0A= objLightbox.appendChild(objOuterImageContainer);=0A= =0A= // When Lightbox starts it will resize itself from 250 by 250 to the = current image dimension.=0A= // If animations are turned off, it will be hidden as to prevent a = flicker of a=0A= // white 250 by 250 box.=0A= if(animate){=0A= Element.setWidth('outerImageContainer', 250);=0A= Element.setHeight('outerImageContainer', 250); =0A= } else {=0A= Element.setWidth('outerImageContainer', 1);=0A= Element.setHeight('outerImageContainer', 1); =0A= }=0A= =0A= var objImageContainer =3D document.createElement("div");=0A= objImageContainer.setAttribute('id','imageContainer');=0A= objOuterImageContainer.appendChild(objImageContainer);=0A= =0A= var objLightboxImage =3D document.createElement("img");=0A= objLightboxImage.setAttribute('id','lightboxImage');=0A= objImageContainer.appendChild(objLightboxImage);=0A= =0A= var objHoverNav =3D document.createElement("div");=0A= objHoverNav.setAttribute('id','hoverNav');=0A= objImageContainer.appendChild(objHoverNav);=0A= =0A= var objPrevLink =3D document.createElement("a");=0A= objPrevLink.setAttribute('id','prevLink');=0A= objPrevLink.setAttribute('href','#');=0A= objHoverNav.appendChild(objPrevLink);=0A= =0A= var objNextLink =3D document.createElement("a");=0A= objNextLink.setAttribute('id','nextLink');=0A= objNextLink.setAttribute('href','#');=0A= objHoverNav.appendChild(objNextLink);=0A= =0A= var objLoading =3D document.createElement("div");=0A= objLoading.setAttribute('id','loading');=0A= objImageContainer.appendChild(objLoading);=0A= =0A= var objLoadingLink =3D document.createElement("a");=0A= objLoadingLink.setAttribute('id','loadingLink');=0A= objLoadingLink.setAttribute('href','#');=0A= objLoadingLink.onclick =3D function() { myLightbox.end(); return = false; }=0A= objLoading.appendChild(objLoadingLink);=0A= =0A= var objLoadingImage =3D document.createElement("img");=0A= objLoadingImage.setAttribute('src', fileLoadingImage);=0A= objLoadingLink.appendChild(objLoadingImage);=0A= =0A= var objImageDataContainer =3D document.createElement("div");=0A= objImageDataContainer.setAttribute('id','imageDataContainer');=0A= objImageDataContainer.className =3D 'clearfix';=0A= objLightbox.appendChild(objImageDataContainer);=0A= =0A= var objImageData =3D document.createElement("div");=0A= objImageData.setAttribute('id','imageData');=0A= objImageDataContainer.appendChild(objImageData);=0A= =0A= var objImageDetails =3D document.createElement("div");=0A= objImageDetails.setAttribute('id','imageDetails');=0A= objImageData.appendChild(objImageDetails);=0A= =0A= var objCaption =3D document.createElement("span");=0A= objCaption.setAttribute('id','caption');=0A= objImageDetails.appendChild(objCaption);=0A= =0A= var objNumberDisplay =3D document.createElement("span");=0A= objNumberDisplay.setAttribute('id','numberDisplay');=0A= objImageDetails.appendChild(objNumberDisplay);=0A= =0A= var objBottomNav =3D document.createElement("div");=0A= objBottomNav.setAttribute('id','bottomNav');=0A= objImageData.appendChild(objBottomNav);=0A= =0A= var objBottomNavCloseLink =3D document.createElement("a");=0A= objBottomNavCloseLink.setAttribute('id','bottomNavClose');=0A= objBottomNavCloseLink.setAttribute('href','#');=0A= objBottomNavCloseLink.onclick =3D function() { myLightbox.end(); = return false; }=0A= objBottomNav.appendChild(objBottomNavCloseLink);=0A= =0A= var objBottomNavCloseImage =3D document.createElement("img");=0A= objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);=0A= objBottomNavCloseLink.appendChild(objBottomNavCloseImage);=0A= },=0A= =0A= //=0A= // start()=0A= // Display overlay and lightbox. If image is part of a set, add = siblings to imageArray.=0A= //=0A= start: function(imageLink) { =0A= =0A= hideSelectBoxes();=0A= hideFlash();=0A= =0A= // stretch overlay to fill page and fade in=0A= var arrayPageSize =3D getPageSize();=0A= Element.setHeight('overlay', arrayPageSize[1]);=0A= =0A= new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, = to: 0.8 });=0A= =0A= imageArray =3D [];=0A= imageNum =3D 0; =0A= =0A= if (!document.getElementsByTagName){ return; }=0A= var anchors =3D document.getElementsByTagName('a');=0A= =0A= // if image is NOT part of a set..=0A= if((imageLink.getAttribute('rel') =3D=3D 'lightbox')){=0A= // add single image to imageArray=0A= imageArray.push(new Array(imageLink.getAttribute('href'), = imageLink.getAttribute('title'))); =0A= } else {=0A= // if image is part of a set..=0A= =0A= // loop through anchors, find other images in set, and add them to = imageArray=0A= for (var i=3D0; i 1){=0A= Element.show('numberDisplay');=0A= Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + = 1) + " of " + imageArray.length);=0A= }=0A= =0A= new Effect.Parallel(=0A= [ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: = resizeDuration, from: 0.0, to: 1.0 }), =0A= new Effect.Appear('imageDataContainer', { sync: true, duration: = resizeDuration }) ], =0A= { duration: resizeDuration, afterFinish: function() {=0A= // update overlay size and update nav=0A= var arrayPageSize =3D getPageSize();=0A= Element.setHeight('overlay', arrayPageSize[1]);=0A= myLightbox.updateNav();=0A= }=0A= } =0A= );=0A= },=0A= =0A= //=0A= // updateNav()=0A= // Display appropriate previous and next hover navigation.=0A= //=0A= updateNav: function() {=0A= =0A= Element.show('hoverNav'); =0A= =0A= // if not first image in set, display prev image button=0A= if(activeImage !=3D 0){=0A= Element.show('prevLink');=0A= document.getElementById('prevLink').onclick =3D function() {=0A= myLightbox.changeImage(activeImage - 1); return false;=0A= }=0A= }=0A= =0A= // if not last image in set, display next image button=0A= if(activeImage !=3D (imageArray.length - 1)){=0A= Element.show('nextLink');=0A= document.getElementById('nextLink').onclick =3D function() {=0A= myLightbox.changeImage(activeImage + 1); return false;=0A= }=0A= }=0A= =0A= this.enableKeyboardNav();=0A= },=0A= =0A= //=0A= // enableKeyboardNav()=0A= //=0A= enableKeyboardNav: function() {=0A= document.onkeydown =3D this.keyboardAction; =0A= },=0A= =0A= //=0A= // disableKeyboardNav()=0A= //=0A= disableKeyboardNav: function() {=0A= document.onkeydown =3D '';=0A= },=0A= =0A= //=0A= // keyboardAction()=0A= //=0A= keyboardAction: function(e) {=0A= if (e =3D=3D null) { // ie=0A= keycode =3D event.keyCode;=0A= escapeKey =3D 27;=0A= } else { // mozilla=0A= keycode =3D e.keyCode;=0A= escapeKey =3D e.DOM_VK_ESCAPE;=0A= }=0A= =0A= key =3D String.fromCharCode(keycode).toLowerCase();=0A= =0A= if((key =3D=3D 'x') || (key =3D=3D 'o') || (key =3D=3D 'c') || = (keycode =3D=3D escapeKey)){ // close lightbox=0A= myLightbox.end();=0A= } else if((key =3D=3D 'p') || (keycode =3D=3D 37)){ // display = previous image=0A= if(activeImage !=3D 0){=0A= myLightbox.disableKeyboardNav();=0A= myLightbox.changeImage(activeImage - 1);=0A= }=0A= } else if((key =3D=3D 'n') || (keycode =3D=3D 39)){ // display next = image=0A= if(activeImage !=3D (imageArray.length - 1)){=0A= myLightbox.disableKeyboardNav();=0A= myLightbox.changeImage(activeImage + 1);=0A= }=0A= }=0A= =0A= },=0A= =0A= //=0A= // preloadNeighborImages()=0A= // Preload previous and next images.=0A= //=0A= preloadNeighborImages: function(){=0A= =0A= if((imageArray.length - 1) > activeImage){=0A= preloadNextImage =3D new Image();=0A= preloadNextImage.src =3D imageArray[activeImage + 1][0];=0A= }=0A= if(activeImage > 0){=0A= preloadPrevImage =3D new Image();=0A= preloadPrevImage.src =3D imageArray[activeImage - 1][0];=0A= }=0A= =0A= },=0A= =0A= //=0A= // end()=0A= //=0A= end: function() {=0A= this.disableKeyboardNav();=0A= Element.hide('lightbox');=0A= new Effect.Fade('overlay', { duration: overlayDuration});=0A= showSelectBoxes();=0A= showFlash();=0A= }=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // getPageScroll()=0A= // Returns array with x,y page scroll values.=0A= // Core code from - quirksmode.org=0A= //=0A= function getPageScroll(){=0A= =0A= var yScroll;=0A= =0A= if (self.pageYOffset) {=0A= yScroll =3D self.pageYOffset;=0A= } else if (document.documentElement && = document.documentElement.scrollTop){ // Explorer 6 Strict=0A= yScroll =3D document.documentElement.scrollTop;=0A= } else if (document.body) {// all other Explorers=0A= yScroll =3D document.body.scrollTop;=0A= }=0A= =0A= arrayPageScroll =3D new Array('',yScroll) =0A= return arrayPageScroll;=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // getPageSize()=0A= // Returns array with page width, height and window width, height=0A= // Core code from - quirksmode.org=0A= // Edit for Firefox by pHaez=0A= //=0A= function getPageSize(){=0A= =0A= var xScroll, yScroll;=0A= =0A= if (window.innerHeight && window.scrollMaxY) { =0A= xScroll =3D document.body.scrollWidth;=0A= yScroll =3D window.innerHeight + window.scrollMaxY;=0A= } else if (document.body.scrollHeight > document.body.offsetHeight){ // = all but Explorer Mac=0A= xScroll =3D document.body.scrollWidth;=0A= yScroll =3D document.body.scrollHeight;=0A= } else { // Explorer Mac...would also work in Explorer 6 Strict, = Mozilla and Safari=0A= xScroll =3D document.body.offsetWidth;=0A= yScroll =3D document.body.offsetHeight;=0A= }=0A= =0A= var windowWidth, windowHeight;=0A= if (self.innerHeight) { // all except Explorer=0A= windowWidth =3D self.innerWidth;=0A= windowHeight =3D self.innerHeight;=0A= } else if (document.documentElement && = document.documentElement.clientHeight) { // Explorer 6 Strict Mode=0A= windowWidth =3D document.documentElement.clientWidth;=0A= windowHeight =3D document.documentElement.clientHeight;=0A= } else if (document.body) { // other Explorers=0A= windowWidth =3D document.body.clientWidth;=0A= windowHeight =3D document.body.clientHeight;=0A= } =0A= =0A= // for small pages with total height less then height of the viewport=0A= if(yScroll < windowHeight){=0A= pageHeight =3D windowHeight;=0A= } else { =0A= pageHeight =3D yScroll;=0A= }=0A= =0A= // for small pages with total width less then width of the viewport=0A= if(xScroll < windowWidth){ =0A= pageWidth =3D windowWidth;=0A= } else {=0A= pageWidth =3D xScroll;=0A= }=0A= =0A= arrayPageSize =3D new = Array(pageWidth,pageHeight,windowWidth,windowHeight) =0A= return arrayPageSize;=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // getKey(key)=0A= // Gets keycode. If 'x' is pressed then it hides the lightbox.=0A= //=0A= function getKey(e){=0A= if (e =3D=3D null) { // ie=0A= keycode =3D event.keyCode;=0A= } else { // mozilla=0A= keycode =3D e.which;=0A= }=0A= key =3D String.fromCharCode(keycode).toLowerCase();=0A= =0A= if(key =3D=3D 'x'){=0A= }=0A= }=0A= =0A= // = -------------------------------------------------------------------------= ----------=0A= =0A= //=0A= // listenKey()=0A= //=0A= function listenKey () { document.onkeypress =3D getKey; }=0A= =0A= // ---------------------------------------------------=0A= =0A= function showSelectBoxes(){=0A= var selects =3D document.getElementsByTagName("select");=0A= for (i =3D 0; i !=3D selects.length; i++) {=0A= selects[i].style.visibility =3D "visible";=0A= }=0A= }=0A= =0A= // ---------------------------------------------------=0A= =0A= function hideSelectBoxes(){=0A= var selects =3D document.getElementsByTagName("select");=0A= for (i =3D 0; i !=3D selects.length; i++) {=0A= selects[i].style.visibility =3D "hidden";=0A= }=0A= }=0A= =0A= // ---------------------------------------------------=0A= =0A= function showFlash(){=0A= var flashObjects =3D document.getElementsByTagName("object");=0A= for (i =3D 0; i !=3D flashObjects.length; i++) {=0A= flashObjects[i].style.visibility =3D "visible";=0A= }=0A= =0A= var flashEmbeds =3D document.getElementsByTagName("embeds");=0A= for (i =3D 0; i !=3D flashEmbeds.length; i++) {=0A= flashEmbeds[i].style.visibility =3D "visible";=0A= }=0A= }=0A= =0A= // ---------------------------------------------------=0A= =0A= function hideFlash(){=0A= var flashObjects =3D document.getElementsByTagName("object");=0A= for (i =3D 0; i !=3D flashObjects.length; i++) {=0A= flashObjects[i].style.visibility =3D "hidden";=0A= }=0A= =0A= var flashEmbeds =3D document.getElementsByTagName("embeds");=0A= for (i =3D 0; i !=3D flashEmbeds.length; i++) {=0A= flashEmbeds[i].style.visibility =3D "hidden";=0A= }=0A= =0A= }=0A= =0A= =0A= // ---------------------------------------------------=0A= =0A= //=0A= // pause(numberMillis)=0A= // Pauses code execution for specified time. Uses busy code, not good.=0A= // Help from Ran Bar-On [ran2103@gmail.com]=0A= //=0A= =0A= function pause(ms){=0A= var date =3D new Date();=0A= curDate =3D null;=0A= do{var curDate =3D new Date();}=0A= while( curDate - date < ms);=0A= }=0A= /*=0A= function pause(numberMillis) {=0A= var curently =3D new Date().getTime() + sender;=0A= while (new Date().getTime(); =0A= }=0A= */=0A= // ---------------------------------------------------=0A= =0A= =0A= =0A= function initLightbox() { myLightbox =3D new Lightbox(); }=0A= Event.observe(window, 'load', initLightbox, false);=0A= ------=_NextPart_000_003E_01C7EDB5.5B998640--