From: "Saved by Windows Internet Explorer 7" Subject: Museums & Heritage Live Date: Wed, 16 Apr 2008 00:15:13 +0100 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C89F56.F0921B10" X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/?pid=4508&lsid=4747&edname=25858.htm&ped=25858 =EF=BB=BF Museums & = Heritage Live
  • Home
  • Subscribe=20
  • M & H=20 Magazine=20
  • News
  • Recruitment=20
  • Tenders=20 Service=20
  • Suppliers Guide=20
  • Arts TV=20
  • Media = Pack=20
  • Partners=20
  • Useful=20 Links

TIME TRAVEL IN A CLIMATE OF CHANGE

Norway: Sarner join forces with Sir David Attenborough to educate on = the=20 damaging effects of climate change.

Sarner, renowned for=20 creating visitor attractions and engineering AV systems around the = globe, has=20 just completed another major commission in Norway.  =E2=80=98Our Fragile = Climate=E2=80=99 is a new and=20 exciting visitor attraction at the Norwegian Glacier Museum in Fjaerland and Sarner = was=20 delighted to be working on this prestigious project following a = competitive=20 tender.

Sarner = inspired the=20 client with a powerful design concept for this challenging subject and = embarked=20 upon the immense task of visually communicating the effects of climate = change on=20 us and our environment.  = Michael=20 Bennett, lead designer and creative director at Sarner, commented on the = scale=20 of the project, =E2=80=9COur = brief was to provide=20 a unique experience to the visitor, highlighting the current issues of = global=20 warming. We have delivered a highly creative solution, supported by the = latest=20 technological advances, to portray the full story of how our climate has = changed=20 - from the creation of earth through to the potential hazards we may be = facing=20 in the future.=E2=80=9D =20

Sarner=E2=80=99s educational=20 showpiece delivers a highly interactive experience as visitors travel in = time=20 and journey through six zones that demonstrate the past, present and = future=20 effects of climate change on our world. =20 The exhibit culminates with an evocative narration by Sir David Attenborough in a = powerful=20 video production in which he concludes, =E2=80=9CWe still have time to act to make = changes=20 that will secure the life of this planet. =20 This is the only home we = have.=E2=80=9D

The = exhibition,=20 which has been created within a new extension to the museum designed by = the=20 acclaimed Norwegian Architect Sverre Fehn, begins in the past with EARTH = CREATION.  Here visitors = witness the=20 dramatic creation of the earth four billion years ago with meteors = crashing=20 above their heads and molten lava flowing beneath their feet.  The ground shakes as an = earthquake=20 tremor is felt, and the audience see the earth forming. From this, = visitors move=20 forward in time to 40 million years ago when great mammals roamed the = earth -=20 this is TERTIARY JUNGLE where visitors get to experience the greenhouse = effect=20 in a hot, humid jungle surrounded by strange animal sounds.  Flat screen monitors continue = the story=20 using cgi animation sequences enhanced by dramatic lighting = effects.  Then the earth grows colder, = as it did=20 20,000 years ago, and visitors walk through an air curtain to THE LAST = ICE=20 AGE.  In this room = lighting is key=20 to create a shimmering luminosity that depicts ice and freezing cold=20 temperatures, while cgi animation communicates the physics of how the = orbit and=20 tilt of the Earth created the ice age. Visitors even get to experience a = real=20 piece of glacier ice.

The = doors then open=20 onto THE PRESENT, an architecturally theatrical room of glass and = mirrors that=20 looks directly out onto the spectacular Fjaerland scenery and actually = places=20 the visitors within nature.  = This is=20 a true juxtaposition of the previous rooms where visitors were engrossed = in the=20 theatre of the story and it provides a moment of reflection before = seeing what=20 the future has in store. =20

The = last room prior=20 to Sir David Attenborough=E2=80=99s narration is THE FUTURE, = MAN=E2=80=99S INFLUENCE, which is=20 split into three areas.  = The first,=20 set in 2040, shows the potential impact that man could have on Earth = with a=20 futuristic style news studio for the climate channel.  The second part, a disaster = scenario set=20 in 2100, portrays what will happen if nothing is done to change the = future and=20 features a dramatic sculpture of a family of climate refugees as its = centre=20 piece.  The final part of = THE FUTURE=20 depicts an uplifting scenario of how things could be in 2100 if we = change for=20 the better with an interactive floor projection of a desert changing to = water =E2=80=93=20 a real hit with younger visitors.

This = unique visitor=20 attraction took nine months to create and build and was officially = opened by the=20 former U.S. Vice President Walter F. Mondale.  Since the exhibition opened, = the=20 Glacier=20 Museum has seen a = 40%=20 increase in visitor numbers, the majority of which are tourists to the=20 area.  =E2=80=98Our = Fragile Climate=E2=80=99 was=20 originally produced in just 3 languages but the museum has recognised = the need=20 to increase this and has recently commissioned Sarner to produce the = exhibition=20 in another 6 languages.

<= PARAM NAME=3D"quality" VALUE=3D"high">
------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.mandhlive.com/news/internationalnews/images/logo.gif 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 LwjQANmBUiziUAOgABIEG/5hgioQAgA7 ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.activenewmedia.co.uk/adimages/1000555.gif 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 ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.mandhlive.com/news/internationalnews/images/bullet1.gif R0lGODlhEgAXANUAAP///6kRgcpssfjq9KwahtyezLpAmrxGnfTi771Jn/z2+v78/frw99mVx9SG v8Vdqui+3cRaqOKw1fDW6aYIfbIojstvs811trk9mcJUpa8fif35/NGBvOrE4LQukdePxOCq0t+n 0LAii+e726cLfrc3laoUg6UFewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAASABcAAAZjQIUg cCoaj0XTZWNBOpEc4nOqmVpN1ik269xyj95v0jm8OieMhucZNh5AC0iEArYaBoAOwdguZkYAEglI fQgDDiJsTg8kZmJ8j5CRJ31clVkme5EVH5MFAAUYJaOkpaMGIQBBADs= ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.activenewmedia.co.uk/adimages/generic/tenalpsmtd.gif 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 y5cwY8qcSbOmzZs4c+rcCTIgADs= ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.activenewmedia.co.uk/adimages/generic/tenalpsdigital.gif R0lGODlheAA8APf/APn6/NLV3neCnT1Lc4So0nKbysvO2I2WrRQmVpGasObt9g4gUVBdgebp7qGp vJ2luVRhhHR+m3igzfr9/gweUPHy9ezu8V1qi/j4+nGayrLI4nyizsjM13Ocy9bZ4YGn0Ky9y567 29Th79bi7/f5/HyGoEZUevH09rvAzt7o84SNpmFsjbXL5AocT/z8/dvd5ZGy1vT198LG04mSqq3F 4MbW6RMkVZmhtsnZ67W5ySo6ZqG93KnC3+Tu+cLU6PX3+qbA3tja4s3P2fX2+CU2Yt3n87TK473Q 59zf5Yyu1A8hUoms0/b3+cfL1nSdzPL2+rvJ1dbe5h4uXZScsi09aPD0+dnk8TVEbhgpWXuVrfr7 ++rq7uDi6I+Yr+Lk6mZykeju9khWe9He7k1af6euwGt2lN3g5+Pt+LjG01pniBEiU7jN5e71+7O5 yOvx+Lm+zfz9/uvs8Zm32d/h6MTI1MbR287R3G6ZyXSeywYZTHWezPz+/yExX/T1+ICJpCIyYIut 1MLO2drl8bTD0L3C0Ieq0gIVSa2zxLbL5Onw93qizn6HohcoWK+1xTFAa6yyw6qwwuvv893k6v// /9rm8tjj8Huhzs/Z4YKMpczW3/T3+3egzXifzc3d7L/E0Za12DJBbObv+uTs9eXn7H2jz9TX38HT 6IeQqMnU3rDH4dri6LG2xo6v1W55lnuizXuhze7x9EBOddHa4/n5+xorWi8/aRwtXOjs8RYoV2eF oHaezHefzAE0YXafzHefzaO2xvH1+v7+/o+muv7+/+Dm7Ofs8IigtXeezHGNppCYr8XK1UVqi5mu wIuUrICl0Nnc40NReHmhzdvm8czb7IWesyNPdhJCbNPc5Cc3Y+Tm63eezcXK1ig3ZJiftTRdgVZ4 lnWdzOnr77fM5DhHcLG3yDRDbdjb41djhvv7/OPr9cDS54uTq4CJo4ir0/n4+Sc4Y5aes3+j0HB7 mPL1+vT5/sbK1SMzYO/z+TNEbf7//+7v84On0ba8yqa4x8fT3f///yH/C05FVFNDQVBFMi4wAwEA AAAh+QQFCgD/ACwAAAAAeAA8AAAI/wBxCRxIsKDBgwgTKlzIsKHDhyomSZxIsaLFixgzatzIsaPH jgkifhxJsqTJkxxDolzJsqXLiSpfypxJ82LMmjhzsryZEYC5Nw9u3HiA4oULnUhp8rRopssYe4xs qFFjAxcRCFO4aDST7ECXr2C7rCvFb0bYrwdujHLQrFmAiXO6NEswyuKcdV1myKDoacaBKRYoBltl Fm2yVVolznqzaMWKCA9eUFw60cIMHRSU2JC6QPPmBRRqNTuBMYeaFgtSp6awII+DL4YosJbdmogy UHnyxAon8Y2aPFjqWfRjqHWYWRPlGcpjywNFF+eKy5atRseDSXEu2EANmgK2EkMkUv+e1CRWZlw2 KOD6U4vKHwQUbCBQQsGEkIumUVfFhSC16zItoEdBCwTmYY8yAyiBSwtfaDEJIbYswAcHFVUwwALo 2dLERAK0YAMR5jx3AQVRDbgAfLRwUEIeCKTHmg15pIGBeCJRdMgfGCqhxBUltGGHGS/YcUgEjnSG CwVEEGKRHY6toIN8RDh2gSdfeAhKCYssUkIEp5QyjoL93fAgLRJSSNEbtMi3oB8cUqAGiCIuYAMo Zq2ABQJqpHGFEmpA000CF+DCDRIw1ShRG7YouIAj3QR2UTjwYMYIBfYoedEQDLAWBhMSaZEGaxAM wUQM6EjUAD5qCKQGHx40QeaEFA3/E0ELjEiBywID6CORAG7COZELF6TGgEQW8jkOFTYsAMEznNbT xmSGBqCDghSkYUZFZDhHkQeZ9lfLtRYxwUBqm0qEzqcI/BGGCbHAYyqq6MEHQQ58LPCHmRLFUUtV rTxpwxu79hriryMqMQZypVChxgIMfMmIGvaYIIAnFd0UwxgtwFfGjBQ1oEMEFlXwKSMtXIBcRZhq Gt4knqq3XQuGgDzJqUrQ8g4jCDASxh9KwDoRGXLaYwcD9LUS8JsDSwSseledg2yYNxi5cHwQSEbj RA5gSAEDFViUQB46gEuRBdDIicAhFvUxrhJhrNwyLrTYYw8tbM6Mj5wqQOAyej5P/xJMsAuMoQ+v alARxyS8fpj0JMAugDNtrUFjARwPDICLGvHhkgcEXU8SUwyxnOgrRRXsScEiFxnAR3pjcEpRygu0 3emnSphQigcB1DVzOUos8IAHtuxnw70TPaMDVdyEAQoCLZIxDOFEWC0RHMHigoUUUhAxjjyJMe5J Aue8ZwMtpVw9SQ4CnnLRA2q0yI3YFPHK34avZ8p2DLOzdo5FDfC+QAKTOIASEIAe4kmkGxiaTwso QEAKXAAOJfAQETzgAgxgYBYACJYaYkGHJgSANxJBQhoggb9gCGCACLCD+eThJh08wyIWCB0uJoU6 i5RCCv2p4URSxja3fcoG2DjHOf8gMMQVeCJBC0jGJDBwDlrZwGezGIN6sKCDd+jAVh/yggqmGIt1 sWsdX2DNsCqihTIYAgFXSMMKlvcmQnkuIjEIA2vScJRYZY0/uFBC2CyCgUwxDAAU6QPGWmACt50j D1KRTYGw0IgBEOgAEnkGFTIjBfoZ4HIl88DtmiGnFjhABYhM1nTy8IUv5IECx6kIIbYzldRMJQ8R KNUbJ8EFhS1gBhY5QYIQYAtGHIkdF1lEZvDRgEBCgIBh6INEMmgD7DlTCrTQQRuggZ4uTOQQfGAE NsyECQTg8Fkh5AYtsAABAXjzmVJghDzKkLMxcKwy8AiDPdIjugjo6mpBkIJUyGD/EfZtphlj0Mw7 ujeRBySLCgSFQxAMYIAXTsQDMtiGMpoghIo2gQMWsIMMOLAFimi0CaSZBBLqoQwhuIMipWBoAF5A B2UoYxscqKgBzPAMGdAhAMG4SAzsQIYETOER2irUJISgIDU0oiL6uBCuYtAIBbVAhxNpAxYWUAsv VIQNPQjFGQRhBVE8oSKhCEUPJkAReojAFD4QAzAmQgKupmAPkwhFEaxAV2lkVav0oMgesjpWigBA GpWoRCI+opJS3MmoFXmA1qYwiRiYoIXwm8QhGEFVgk4CCHoghWY38AFWsEATEhkBKV6hixos0wgE AEcBCsCJduBAIlZwRjRK+wRF/5BiA7fNLSl8sQaK0EACpNhFbyeiAAJwQhdGIGxEXkAEqTxgGBMp lg2oUMxJQGIzFAAmRZKho6pWBAgZ2MUm8KCHXnSgAJ9Y6wiioYcC1CAfEwBvLyTgBF1IoAMSEMEk rKAIJ7gXGB0ABzh6wYld7AIceMhAciUCjHY4YRdOAAQgJaKADzihAwsGSUTioFSZSYR98FnHDk0g J2wQFEALgAb+KAIE/JICBqyIxi6iUQANTKISljiGE0yLAzwY2BkhgMEmenEHGLhAGhswbw1+sIQk JOEDEpCAK5rcDnVMZBr2lYAvLDEC4hJAF+DIcEoiAocVoCYWnUtqZ0CRDYpAwv+pOozDFRZWBou0 WA+AAIYWxPABX/SiECSwgiV84QQcDEMOHdhFPEQwDBLsQAJyqMEwBJFkJ/hgEj/4AQBS4YQ/JwIA mpDlMHbQgWhE4740gO4kigtmFij3gJrBRQ4+rB4KqC+QYVhA4dwICQwtABJ2LoAuAPHVSdDACRLQ AxgofYwO4IAEH4BwCCbyhBRMxAqk0EUHLj0RFjjBF0uYR0US8QFtANkVemjHWldNAD04QcwbiQkX sJEsBrggBl8qXHUp0gbmtUAASySxGhwBQhZ3QA9LWLcp8OsEQUjDFRDGQRVm3AEeTMINiFjDEcSh ATcg2bzcloi3e7GEKlTEB/X/ZQUlnEHfaVD4y2F+9a4CpIQbBMOULRCxRQAwyBJMgpPwMdRE7pxw iaA8Gk6oxMN1LPH54oEGN85ABjrQgTuIIAUb0HbIJ2EEPOiiHSafSDA+4QQnAMEFcgCHE3bwcne7 2iM3mQMV+CQFJZXhCm3GjxIikI82pGkBeL8IEAoAjqJPQhzIBocCHr4LZz9hA/QFwiQE4QxnWALp V8/2tinCAjz0AuwUKQIperEJGKSCFb7YxT4Gy+qYw91QD9CMErCBAjgE1SIxQEEwyPEHqtjgERhp MTgA8YNJgCEJulC9JgThCl84ew8wAMfX3QAHMEzDFfdNQQp2u/mJGCHRJafI/xpKLQFwdCDLerg0 GL7sBETIfCIRUM8CaNENjnSzfRQQusE34Qwa8IAA2mAJBSB5lQBxOzYJ45dsMFAD0yAHu6ALhfAD RZB13ScRRlBf4ScRJAADehANBXYMBhYNHSAHwbB+yWd6NJCCGnAPGbEUMRBGp+EHOdUT0OAh/3Yy glcAUdYBnaYLBVAICjAJI+AKOmZawMAKOqgLF6YLvVAAR7Bfmrd1F/h1YbdfvlB+PDACYjACaecL ryAKbvBlEqBtPFgA0ZAOLah/s4AJC0AFeacR/FAzuKQRO3AHenCHAgZkaDgJItB4d8BtouCA4KAH eOAEG2AEpVIJnFB1VjYRGv+QAQVAAFUIXh3gC9YmEWJAeHcgDongDISHh+bnCntoE/onEVPQDB1R ARfATxvRCRqACCwQiz7wVhORCOJgBBpwiZNAAjUQAp/wCTRQCbV4ixpQBBQxAhpgBEdAAtNjCkag jBM2CU8QixqAA5pwBEYQi7GICEawButGihkxgxwhSzoRDC4AByiRDzoxHknRju4oVO8Yj/LIjvJY j0pRivaYjy9Bj/rYjyfBj/4YkO8nkARZEgBZkAjpNfiYkAxZMQvZkBB5kBCJkBLJkJlwkZlQDJNQ DJlgERw5CZGgkRWRkRLBkRiZCZcgCRIhCZcQbw85kSQZCZkQUhlxDSJJESTpOREfOQnE0JKTcAnE 4JITqRE5eQkN8JEceQ1AyZEmGQmqcJFBmZMl2ZGTAAuZkGmZAAtCOZQYkZPXQAwcCQcZ+QOZAJYd aZMSkQ8N0JFSuZFU+ZPFUAw+qREVmZBFeZQzOZOT8JUfiZbFEAUXOQttuZM8KQmSEJRbyZUWQZJW eQJhOZZl2ZfFcAKZEAlrKZg36ZYTAQuXcAk0mYaKeREnqZFImQlKaZaTIAkZeQ2ZAJhkmZmE+ZNz SZcvGZo42QBwcAmZiRR1GZomGQU4mBS9aZv1OJzEGY/GeZzumAAP0ZzO+ZzQGZ0PERAAIfkEBQoA /wAsQwAvACkACQAACLcAcwnMhWYSmlyTEio8OClQQYUJCSY8ODAXMmYJmSGTGChXFIggE2Z5CFHi QoSTfiFLiOyXSWQgGB7M0vIgxUDCBP6aZHIiyky5iBHLBfRhll8HfxAcihThSIUgEPY0iHISMjRo Vr6M6dHjpKMMn6KhJjDSVIYJfzFjtlMi0ChJl+Zq+hVNlFyBopolSVVhJmTIPlYsKDMXTbrMCGbJ RXYoX7QsV4YsCeLH1cmYM2v2yTjS5s8QAwIAIfkEBWQA/wAsQwAvACoACQAACL0AeQnkZeyfMV7/ Eio8+I9ZQYUJCSY8OJCXtW8Jv1n7J5EZLygQQyas9hCixIUI/+Xa+M9aLo4PrWVheLCay4MUmS0T +PLkxJQgeGXKxAvEsJPVch2ERZCoUoQkEwbLgtCnwZQtjRljeVLmQSgf/yVlGNWYN4GSrDJMmOvb t5cwhwWFsrQpr6dijYFlRjVtyasJ5VqzBpLjwII0ednE+41gNV5nif5dm3CwSJG8ssCy9vey58+f KXqTBLr05YAAIfkEBQoA/wAsQwAvACoACQAACLoAcwnMhWYSmlyTEio8OClQQYUJCSY8ODAXMmYJ mSGbJDFQrigQQybM8hCixIUIJ/3aOAnZL44PkYFgeDCLy4MUAwkT+PLkxJSZchEjlisTzJG/Dv4g SDQpQpIKQSD0aTBlSzRoWJ6UeTDKx0lZnIItiIaawEhUGSb8xYzZy6NBoyhlmkssSa+BpKItWVVh JmTIQHIcSBZhzZsImRHMksssUb5qEwIWKTIXiB/I+FLezJkzRWqROoumHBAAIfkEBQoA/wAsPQAv ADAACQAACP8AT2Q6MalgpoODVE0qlqmgw4UNIxV7WDBhQVW/MmbsN6igv34/BBI0WGwWlEAjKT68 NvHhrF8KHWIkeAnkpEFoJolUdS3TryiqMvWTVOfXJVVQ+oGAUqcflF9QIj3tdw0jmlkyfxGM9EvS j35RdA7kGaxfnVmZ/GVCU4cY2DpQiH0MBqIOw1mo+r2MeVFrRX+SbO5UWBdtHX9ofgWCeZBYHRA3 26IBkREWzIczC14ahLjg4El1AZxUxRZOpih12j6OjLFBg4GXs46MpDTmZxAgUIFAA2txJllJUTmG DAVEg0G/dp9wmjJzRZsqozvM1ADOpZbSs2vf7pDhaazcwxcCDAgAIfkEBQoA/wAsPQAvADAACQAA CL8Ao+SKMqmgwV8EDSpcyHASwoICc0nMhQxZQTS5iAlMaDDSwIYgFXrkOGnjpEAZJzHLUnKgsCwS AwmTGGkmsigokVF7GXOSzSgzc0UyaPJHLjSTkIFoCTTLjyzCRmKM9CsLykA+nUKdWnWkQpMqmRFL uVGYMJ9RB/6aeDSlWbRrJ44lCTYQMjQsmb41K1VoQZRD9wqbWtAr0Y+TjGZBqves2ae5MlGTiAYw WrQ/Jh+FzBGsypQhQ4seTbq0adIBAQAh+QQFZAD/ACw9AC8AMAAHAAAIuQCh8ILyr6DBXAQNKlzI 8B/CggJ5SeRlzVpBY7wyCUxoUNLAhiAVeuT4b+M/Zhn/fatWcuCyahKZLZMoaaY1KCiteXsZ859N KDN5STJoEhYvY/+sZQm28SWsastGYpSUqxpKZj6rPV02tepIhSZVfsuUsukyn1EH5pp4NOWys2/X TiRLMiwza8ZYtgQKNy2UqQVRDn2LFvC/r0Q//jNaDelewm+f8gLhTaIxwWjRwqp8VDLHsCpT/gsI ACH5BAUKAP8ALD0ALwAwAAcAAAi3AKPkijKpoMFfBA0qXMhwEsKCAnNJzIUMWUE0uYgJTGgw0sCG IBV65Dhp46RAGScxy1JyoLAsEgMJkxhpJrIoKJFRexlzks0oM3NFMmjyRy40k5CBaAk0y48swkZi jPQrC8pAPp1CnVp1pEKTKpkRS7lRmDCfUQf+mng0pVm0ayeOJQk2EDI0LJm+NStVaEGUQ/cKm1rQ K9GPk4xmQar3rNmnuTJRk4gGMFq0PyYfhcwRrMqUkwICACH5BAUKAP8ALD0ALwAwAAcAAAj/AE9k OvGvoKQo/2QFgvUviqSCEK+pgkjx34lBDX4QE5ipY6ZLlwoWy/RDIEGRJAcFagAnU7GKEitCnDWQ 2ESLA/9FIvlP0jWcJ1RdywQFyqV+/TLJ+rUSyq9BUQaB+PVL0o9Bv/pJusTUX6aNgX6FlPSrYaYG +UwKhSMLhKpft/4N8icJxKU6UCKhAaFl0KCl/4j9/NXA5r9L1+oE2gnFKk+1E1Wh8QfihFMQdcr+ qtNgEJR/ddxO/YXmFmGbNMOuLAalX6BMBSH/UwXFH5oTXBGCzDRL7iA4UAaNnLX13+mJiHP+g1On n6zYA1VFroOqzlkQaDJFcXpplt9Mdm+NEo4Cy7WqTKoihUX1I0omqScDAgAh+QQFCgD/ACw9AC8A MAAHAAAItgAnCRzIjNqkTLkyTaLGbKDALMIcOoySKwqxXxIzapyEJtePX7lA/MiFRiLEjQN/RUSJ EmEUZFmQEUtIMVfEmLkqEsuSMxDFmr9qRgSZi9qPjSNBzgT5A9mvSLkCZcnyQxiyjlEE/lQ5ySnU QDZZCqRWdGFRqDlDnuwYiSzJrcLQ5gTRMVeWSCiZhZwEIldDpwOnVs1CEBncrhgdziy5saPCxZPA nsVZUXLUnx2FSaZGzK1RgQEBACH5BAVkAP8ALEMALwAoAAcAAAixAL95+weCF4hh3r79W7iw2jKG EP9B4QUlU66IGI3xgpWLVxZYvIxFdIgxYq6HJRkWhGKtmrVMBifyeuiSF8VM1Wwymygzl8yHHXl5 gwWyI8yOsKzlksSLWbVqsJZZ0whlIc+T/5QyZTYTojeh/756Y2rTI0mNkr6GvLqMrM0sGnlVk/Tv m8dgWXgpVMrwadRqDL9ZY5v1IkSYIjUeRPyPq1BJNSk6bspT4zLH3jKpHRoQACH5BAUKAP8ALEMA LwAoAAcAAAivAJlRm5QpV6ZJ1JhNWrgwizCGECdFyRWF2K+IGNHk+vErF4gfudBEdIgx4q+HJRkW jIIsCzJiBifmeugyF0ViWWwGmijzl8yHHXNR+wGyI8yOP5D9ipQrUJYsP4Qh0xhlIc+Tk5QyDTQT IjWhCIUytemRpMZIX0NeFTbWJgiNubJEmsTM4yQQuRQqZfg0ahaGzJCtzXoRIkyRGg8ensRVbE2K jZvy1CisMTViaYcGBAAh+QQFCgD/ACxDAC8AKAAHAAAIrwAlRfkHKxOsf1Ek/Vu48JoqhhD/nch0 4gexiBiLZYJDLFMDOJmKRXSIMSKxhyUZFjxx6dqlHwYnZnroMhPFH9dsRpook5jMhx0zRYEDsiPM jnAuEZuVKdK1a3BUXdJ4YiHPk/+UMo00E2IUoQiFMrXpkaTGWV9DXlU11mYDjZmuzfonyWO+BpkU KmX4NOo1hpIurc16ESJMkRoPHv7HVWxNio2b8tSoqnGUH2mHBgQAOw== ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/styles/style.css?here BODY { BACKGROUND-POSITION: 50% top; FONT-SIZE: 12px; BACKGROUND-IMAGE: = url(../images/wrapper_bg.gif); MARGIN: 0px; LINE-HEIGHT: 1.5; = BACKGROUND-REPEAT: repeat-y; FONT-FAMILY: Arial,verdana,sans-serif } #wrapper { MARGIN: 0px auto; WIDTH: 779px; COLOR: #000000; TEXT-ALIGN: left } #document { MARGIN-TOP: 10px; FLOAT: right; WIDTH: 612px } #main_nav { CLEAR: both; MARGIN-TOP: 10px; DISPLAY: inline; FLOAT: left; = MARGIN-LEFT: 13px; WIDTH: 150px } #content { FLOAT: left; PADDING-BOTTOM: 40px; WIDTH: 472px } #inner_content { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px } #right_column { DISPLAY: inline; FLOAT: right; WIDTH: 125px; MARGIN-RIGHT: 10px } A { COLOR: #bc479d; TEXT-DECORATION: none } A:hover { COLOR: #390a3e; TEXT-DECORATION: none } H1 { MARGIN-TOP: 0px; DISPLAY: block; FONT-SIZE: 20px; WIDTH: 100%; COLOR: = #390a3e; LINE-HEIGHT: 1 } H2 { FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #000000 } H3 { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #390a3e } A IMG { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } .label { FLOAT: left; WIDTH: 100px } .text_box { WIDTH: 200px } .button { BACKGROUND-COLOR: #ffffff } #header { BACKGROUND-IMAGE: url(../images/header_bg.gif); MARGIN-LEFT: 7px; = COLOR: #000000; MARGIN-RIGHT: 9px; BACKGROUND-REPEAT: repeat-x; = BACKGROUND-COLOR: #999999 } #inner_header { BACKGROUND-POSITION: right 50%; BACKGROUND-IMAGE: = url(../images/watermark.gif); WIDTH: 763px; BORDER-BOTTOM: #ffffff 2px = solid; BACKGROUND-REPEAT: no-repeat; HEIGHT: 120px } #logo { DISPLAY: inline; FLOAT: left; MARGIN: 15px 0px 0px 15px } #header UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #header LI { BORDER-RIGHT: #ffffff 2px solid; DISPLAY: inline; FLOAT: left; = TEXT-ALIGN: center } #header LI A { PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 3px; PADDING-BOTTOM: = 3px; WIDTH: 100px; COLOR: #ffffff; PADDING-TOP: 3px } #header LI A:hover { BACKGROUND-COLOR: #cccccc; TEXT-DECORATION: underline } #banner { FLOAT: right; MARGIN: 30px 10px 0px 0px } #homepage_search { PADDING-LEFT: 10px; FLOAT: right; PADDING-BOTTOM: 0px; BORDER-LEFT: = #ffffff 2px solid; WIDTH: 300px; PADDING-TOP: 3px } #query { BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; = DISPLAY: inline; PADDING-LEFT: 5px; FONT-SIZE: 10px; FLOAT: left; = BORDER-LEFT: #000000 1px solid; WIDTH: 200px; MARGIN-RIGHT: 10px; = BORDER-BOTTOM: #000000 1px solid } #srchbtn { DISPLAY: inline; FONT-SIZE: 10px; FLOAT: left; WIDTH: 60px; HEIGHT: = 18px; BACKGROUND-COLOR: #ffffff } #main_nav UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; BACKGROUND-COLOR: #ffffff } #main_nav LI { PADDING-RIGHT: 0px; BACKGROUND-POSITION: left top; BORDER-TOP: #999999 = 1px dashed; PADDING-LEFT: 0px; BACKGROUND-IMAGE: = url(../images/menu_bg.gif); PADDING-BOTTOM: 3px; PADDING-TOP: 4px; = BACKGROUND-REPEAT: repeat-x } #main_nav LI A { PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 3px; FONT-WEIGHT: = bold; FONT-SIZE: 12px; PADDING-BOTTOM: 3px; COLOR: #bc479d; PADDING-TOP: = 3px } #main_nav LI A:hover { COLOR: #390a3e } .bullet1 { FLOAT: left; MARGIN-RIGHT: 5px } .sub_nav { PADDING-LEFT: 10px! important } .sub_nav LI { PADDING-LEFT: 20px! important; BACKGROUND-IMAGE: none! important; = BORDER-TOP-STYLE: none! important } .sub_nav LI A { PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; = PADDING-BOTTOM: 0px! important; PADDING-TOP: 0px! important } #multiple_editorials A { FONT-WEIGHT: bold; FONT-SIZE: 14px } .editorial { BORDER-BOTTOM: #bc479d 1px dashed } #homepage_header { BACKGROUND-POSITION: center top; BACKGROUND-IMAGE: = url(../images/home.jpg); MARGIN-BOTTOM: 10px; BACKGROUND-REPEAT: = no-repeat; HEIGHT: 220px } #homepage_header_padding { PADDING-LEFT: 10px; PADDING-TOP: 5px } #homepage_header A { BACKGROUND-POSITION: left center; PADDING-LEFT: 35px; FONT-WEIGHT: = bold; FONT-SIZE: 22px; BACKGROUND-IMAGE: = url(../images/homepagebullet.gif); MARGIN: 0px; COLOR: #6f1b57; = BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: Trebuchet MS } #homepage_header P { DISPLAY: block; FONT-WEIGHT: bold; FONT-SIZE: 13px; MARGIN-LEFT: 5px; = COLOR: #ffffff; FONT-FAMILY: Trebuchet MS; POSITION: absolute; TOP: = 330px; TEXT-ALIGN: center } #video_of_the_day { FLOAT: right; HEIGHT: 135px; TEXT-ALIGN: center } #homepage_recruitment { FLOAT: left; HEIGHT: 135px } #homepage_recruitment H1 { MARGIN-BOTTOM: 5px } .homepage_box { BACKGROUND-POSITION: left top; BACKGROUND-IMAGE: = url(../images/header_bg.gif); WIDTH: 225px; BACKGROUND-REPEAT: repeat-x; = BACKGROUND-COLOR: #a5057b } .homepage_box P { MARGIN: 0px; COLOR: #ffffff } .homepage_box A { COLOR: #ffffff } .homepage_box A:hover { COLOR: #b9449c } .inner_homepage_box { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px } #homepage_latestnews H1 { FONT-WEIGHT: bold; FONT-SIZE: 14px; TEXT-DECORATION: underline } #homepage_latestnews P { COLOR: #000000; BORDER-BOTTOM: #bc479d 1px dashed } #homepage_latestnews IMG { FLOAT: right } #homepage_tender H1 { FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; COLOR: = #ffffff; BORDER-BOTTOM: #ffffff 1px dashed; TEXT-ALIGN: left } .homepage_box H1 { FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; COLOR: = #ffffff; BORDER-BOTTOM: #ffffff 1px dashed; TEXT-ALIGN: left } #homepage_tender H1 IMG { FLOAT: right } .homepage_box H1 IMG { FLOAT: right } #homepage_tender { CLEAR: both; BACKGROUND-POSITION: left top; MARGIN-TOP: 10px; FLOAT: = left; BACKGROUND-IMAGE: url(../images/tender_bg.gif); WIDTH: 462px; = COLOR: #ffffff; BACKGROUND-REPEAT: repeat-x; BACKGROUND-COLOR: #555555 } #homepage_tender A { FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #ffffff } #subscribe_form LABEL { FLOAT: left; WIDTH: 150px } #removeform LABEL { FLOAT: left; WIDTH: 150px } #subscribe_form INPUT { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; = BORDER-LEFT: #390a3e 1px solid; WIDTH: 308px; BORDER-BOTTOM: #390a3e 1px = solid } #removeform INPUT { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; = BORDER-LEFT: #390a3e 1px solid; WIDTH: 308px; BORDER-BOTTOM: #390a3e 1px = solid } #subscribe_form .submit { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; FLOAT: = right; MARGIN-LEFT: 150px; BORDER-LEFT: #390a3e 1px solid; WIDTH: 150px; = BORDER-BOTTOM: #390a3e 1px solid } #removeform .submit { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; FLOAT: = right; MARGIN-LEFT: 150px; BORDER-LEFT: #390a3e 1px solid; WIDTH: 150px; = BORDER-BOTTOM: #390a3e 1px solid } #removeform { MARGIN-BOTTOM: 20px } #barbour_login { WIDTH: 200px } #barbour_login LEGEND { FONT-SIZE: 14px } .barbour_text_box { WIDTH: 110px } .ad { MARGIN-BOTTOM: 10px } #footer { CLEAR: both; TEXT-ALIGN: center } #footer IMG { MARGIN: 10px } #buyers_guide .search_button { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; FLOAT: = left; MARGIN-LEFT: 10px; BORDER-LEFT: #390a3e 1px solid; BORDER-BOTTOM: = #390a3e 1px solid } #buyers_guide .input { WIDTH: 220px } #country_field { FLOAT: left } #category_field { FLOAT: left } #buyers_guide #listing { WIDTH: 100%; TEXT-ALIGN: center } #buyers_guide #listing { FONT-SIZE: 10px } #listing .entry { BORDER-RIGHT: #a5057b 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: = #a5057b 1px solid; MARGIN-TOP: 10px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; BORDER-LEFT: #a5057b 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: = #a5057b 1px solid; TEXT-ALIGN: left } #listing .entry IMG { FLOAT: right; MARGIN-BOTTOM: 5px } #listing .company_name { DISPLAY: block; FONT-WEIGHT: bold; FONT-SIZE: 13px; COLOR: #ffffff; = BACKGROUND-COLOR: #a5057b } #listing P.address { DISPLAY: block; FLOAT: left; MARGIN: 0px 0px 5px 5px; WIDTH: 40% } #listing P.enhanced { DISPLAY: block; FONT-SIZE: 12px; FLOAT: right; MARGIN: 0px 5px 5px 0px; = WIDTH: 50%; TEXT-ALIGN: right } #listing P.company_description { CLEAR: both; MARGIN: 5px 5px 0px } .cleardiv { CLEAR: both } .search_button { BORDER-RIGHT: #390a3e 1px solid; BORDER-TOP: #390a3e 1px solid; FLOAT: = right; BORDER-LEFT: #390a3e 1px solid; BORDER-BOTTOM: #390a3e 1px solid } .mag_btn { BORDER-RIGHT: #2d123f 2px solid; BORDER-TOP: #2d123f 2px solid; = BORDER-LEFT: #2d123f 2px solid; WIDTH: 130px; BORDER-BOTTOM: #2d123f 2px = solid } .expander A { COLOR: #002f66 } .expander A:hover { COLOR: #779fcd } .toggler { BORDER-BOTTOM: #bc479d 1px dashed } .expander { MARGIN-BOTTOM: 10px } .date { FONT-WEIGHT: bold; FONT-SIZE: 16px; FLOAT: left; WIDTH: 100px; COLOR: = #002f66 } .event_text { FLOAT: left; MARGIN-BOTTOM: 5px; PADDING-BOTTOM: 5px; WIDTH: 350px; = BORDER-BOTTOM: #002f66 1px dashed } .editor { FLOAT: left; MARGIN: 0px 5px 0px 0px } .sub_heading { FONT-SIZE: 14px } .partner { BORDER-BOTTOM: #bc479d 1px dashed } .partner IMG { FLOAT: right; MARGIN: 0px 0px 10px 10px } OL LI { MARGIN-BOTTOM: 10px; BORDER-BOTTOM: #bc479d 1px dashed } OL LI A { DISPLAY: block } ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/styles/sIFR-screen.css .sIFR-flash { VISIBILITY: visible! important; MARGIN: 0px } .sIFR-replaced { VISIBILITY: visible! important } SPAN.sIFR-alternate { DISPLAY: block; LEFT: 0px; OVERFLOW: hidden; WIDTH: 0px; POSITION: = absolute; TOP: 0px; HEIGHT: 0px } .sIFR-hasFlash H1 { VISIBILITY: hidden } .sIFR-hasFlash H2 { FONT-SIZE: 55px; VISIBILITY: hidden; LETTER-SPACING: -9px } .sIFR-hasFlash H3 { FONT-SIZE: 25px; VISIBILITY: hidden; LETTER-SPACING: -6px } .sIFR-hasFlash H4 { FONT-SIZE: 21px; VISIBILITY: hidden; LETTER-SPACING: -5px } .sIFR-hasFlash H5#pullquote { FONT-SIZE: 24px; VISIBILITY: hidden; LETTER-SPACING: -4px } ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/js_scripts/AC_RunActiveContent.js //v1.0 //Copyright 2006 Adobe Systems, Inc. All rights reserved. function AC_AddExtension(src, ext) { if (src.indexOf('?') !=3D -1) return src.replace(/\?/, ext+'?');=20 else return src + ext; } function AC_Generateobj(objAttrs, params, embedAttrs)=20 {=20 var str =3D ''; for (var i in params) str +=3D ' = '; str +=3D ''; document.write(str); } function AC_FL_RunContent(){ var ret =3D=20 AC_GetArgs ( arguments, ".swf", "movie", = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" , "application/x-shockwave-flash" ); AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); } function AC_SW_RunContent(){ var ret =3D=20 AC_GetArgs ( arguments, ".dcr", "src", = "clsid:166B1BCA-3F9C-11CF-8075-444553540000" , null ); AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); } function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ var ret =3D new Object(); ret.embedAttrs =3D new Object(); ret.params =3D new Object(); ret.objAttrs =3D new Object(); for (var i=3D0; i < args.length; i=3Di+2){ var currArg =3D args[i].toLowerCase(); =20 switch (currArg){=09 case "classid": break; case "pluginspage": ret.embedAttrs[args[i]] =3D args[i+1]; break; case "src": case "movie":=09 args[i+1] =3D AC_AddExtension(args[i+1], ext); ret.embedAttrs["src"] =3D args[i+1]; ret.params[srcParamName] =3D args[i+1]; break; case "onafterupdate": case "onbeforeupdate": case "onblur": case "oncellchange": case "onclick": case "ondblClick": case "ondrag": case "ondragend": case "ondragenter": case "ondragleave": case "ondragover": case "ondrop": case "onfinish": case "onfocus": case "onhelp": case "onmousedown": case "onmouseup": case "onmouseover": case "onmousemove": case "onmouseout": case "onkeypress": case "onkeydown": case "onkeyup": case "onload": case "onlosecapture": case "onpropertychange": case "onreadystatechange": case "onrowsdelete": case "onrowenter": case "onrowexit": case "onrowsinserted": case "onstart": case "onscroll": case "onbeforeeditfocus": case "onactivate": case "onbeforedeactivate": case "ondeactivate": case "type": case "codebase": ret.objAttrs[args[i]] =3D args[i+1]; break; case "width": case "height": case "align": case "vspace":=20 case "hspace": case "class": case "title": case "accesskey": case "name": case "id": case "tabindex": ret.embedAttrs[args[i]] =3D ret.objAttrs[args[i]] =3D args[i+1]; break; default: ret.embedAttrs[args[i]] =3D ret.params[args[i]] =3D args[i+1]; } } ret.objAttrs["classid"] =3D classid; if (mimeType) ret.embedAttrs["type"] =3D mimeType; return ret; } ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/js_scripts/ufo.js /* Unobtrusive Flash Objects (UFO) v3.21 = =0A= Copyright 2005, 2006 Bobby van der Sluis=0A= This software is licensed under the CC-GNU LGPL = =0A= */=0A= =0A= var UFO =3D {=0A= req: ["movie", "width", "height", "majorversion", "build"],=0A= opt: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", = "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess", = "seamlesstabbing", "allowfullscreen"],=0A= optAtt: ["id", "name", "align"],=0A= optExc: ["swliveconnect"],=0A= ximovie: "ufo.swf",=0A= xiwidth: "215",=0A= xiheight: "138",=0A= ua: navigator.userAgent.toLowerCase(),=0A= pluginType: "",=0A= fv: [0,0],=0A= foList: [],=0A= =0A= create: function(FO, id) {=0A= if (!UFO.uaHas("w3cdom") || UFO.uaHas("ieMac")) return;=0A= UFO.getFlashVersion();=0A= UFO.foList[id] =3D UFO.updateFO(FO);=0A= UFO.createCSS("#" + id, "visibility:hidden;");=0A= UFO.domLoad(id);=0A= },=0A= =0A= updateFO: function(FO) {=0A= if (typeof FO.xi !=3D "undefined" && FO.xi =3D=3D "true") {=0A= if (typeof FO.ximovie =3D=3D "undefined") FO.ximovie =3D UFO.ximovie;=0A= if (typeof FO.xiwidth =3D=3D "undefined") FO.xiwidth =3D UFO.xiwidth;=0A= if (typeof FO.xiheight =3D=3D "undefined") FO.xiheight =3D = UFO.xiheight;=0A= }=0A= FO.mainCalled =3D false;=0A= return FO;=0A= },=0A= =0A= domLoad: function(id) {=0A= var _t =3D setInterval(function() {=0A= if ((document.getElementsByTagName("body")[0] !=3D null || = document.body !=3D null) && document.getElementById(id) !=3D null) {=0A= UFO.main(id);=0A= clearInterval(_t);=0A= }=0A= }, 250);=0A= if (typeof document.addEventListener !=3D "undefined") {=0A= document.addEventListener("DOMContentLoaded", function() { = UFO.main(id); clearInterval(_t); } , null); // Gecko, Opera 9+=0A= }=0A= },=0A= =0A= main: function(id) {=0A= var _fo =3D UFO.foList[id];=0A= if (_fo.mainCalled) return;=0A= UFO.foList[id].mainCalled =3D true;=0A= document.getElementById(id).style.visibility =3D "hidden";=0A= if (UFO.hasRequired(id)) {=0A= if (UFO.hasFlashVersion(parseInt(_fo.majorversion, 10), = parseInt(_fo.build, 10))) {=0A= if (typeof _fo.setcontainercss !=3D "undefined" && = _fo.setcontainercss =3D=3D "true") UFO.setContainerCSS(id);=0A= UFO.writeSWF(id);=0A= }=0A= else if (_fo.xi =3D=3D "true" && UFO.hasFlashVersion(6, 65)) {=0A= UFO.createDialog(id);=0A= }=0A= }=0A= document.getElementById(id).style.visibility =3D "visible";=0A= },=0A= =0A= createCSS: function(selector, declaration) {=0A= var _h =3D document.getElementsByTagName("head")[0]; =0A= var _s =3D UFO.createElement("style");=0A= if (!UFO.uaHas("ieWin")) = _s.appendChild(document.createTextNode(selector + " {" + declaration + = "}")); // bugs in IE/Win=0A= _s.setAttribute("type", "text/css");=0A= _s.setAttribute("media", "screen"); =0A= _h.appendChild(_s);=0A= if (UFO.uaHas("ieWin") && document.styleSheets && = document.styleSheets.length > 0) {=0A= var _ls =3D document.styleSheets[document.styleSheets.length - 1];=0A= if (typeof _ls.addRule =3D=3D "object") _ls.addRule(selector, = declaration);=0A= }=0A= },=0A= =0A= setContainerCSS: function(id) {=0A= var _fo =3D UFO.foList[id];=0A= var _w =3D /%/.test(_fo.width) ? "" : "px";=0A= var _h =3D /%/.test(_fo.height) ? "" : "px";=0A= UFO.createCSS("#" + id, "width:" + _fo.width + _w +"; height:" + = _fo.height + _h +";");=0A= if (_fo.width =3D=3D "100%") {=0A= UFO.createCSS("body", "margin-left:0; margin-right:0; padding-left:0; = padding-right:0;");=0A= }=0A= if (_fo.height =3D=3D "100%") {=0A= UFO.createCSS("html", "height:100%; overflow:hidden;");=0A= UFO.createCSS("body", "margin-top:0; margin-bottom:0; padding-top:0; = padding-bottom:0; height:100%;");=0A= }=0A= },=0A= =0A= createElement: function(el) {=0A= return (UFO.uaHas("xml") && typeof document.createElementNS !=3D = "undefined") ? document.createElementNS("http://www.w3.org/1999/xhtml", = el) : document.createElement(el);=0A= },=0A= =0A= createObjParam: function(el, aName, aValue) {=0A= var _p =3D UFO.createElement("param");=0A= _p.setAttribute("name", aName); =0A= _p.setAttribute("value", aValue);=0A= el.appendChild(_p);=0A= },=0A= =0A= uaHas: function(ft) {=0A= var _u =3D UFO.ua;=0A= switch(ft) {=0A= case "w3cdom":=0A= return (typeof document.getElementById !=3D "undefined" && typeof = document.getElementsByTagName !=3D "undefined" && (typeof = document.createElement !=3D "undefined" || typeof = document.createElementNS !=3D "undefined"));=0A= case "xml":=0A= var _m =3D document.getElementsByTagName("meta");=0A= var _l =3D _m.length;=0A= for (var i =3D 0; i < _l; i++) {=0A= if (/content-type/i.test(_m[i].getAttribute("http-equiv")) && = /xml/i.test(_m[i].getAttribute("content"))) return true;=0A= }=0A= return false;=0A= case "ieMac":=0A= return /msie/.test(_u) && !/opera/.test(_u) && /mac/.test(_u);=0A= case "ieWin":=0A= return /msie/.test(_u) && !/opera/.test(_u) && /win/.test(_u);=0A= case "gecko":=0A= return /gecko/.test(_u) && !/applewebkit/.test(_u);=0A= case "opera":=0A= return /opera/.test(_u);=0A= case "safari":=0A= return /applewebkit/.test(_u);=0A= default:=0A= return false;=0A= }=0A= },=0A= =0A= getFlashVersion: function() {=0A= if (UFO.fv[0] !=3D 0) return; =0A= if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] = =3D=3D "object") {=0A= UFO.pluginType =3D "npapi";=0A= var _d =3D navigator.plugins["Shockwave Flash"].description;=0A= if (typeof _d !=3D "undefined") {=0A= _d =3D _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");=0A= var _m =3D parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10);=0A= var _r =3D /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), = 10) : 0;=0A= UFO.fv =3D [_m, _r];=0A= }=0A= }=0A= else if (window.ActiveXObject) {=0A= UFO.pluginType =3D "ax";=0A= try { // avoid fp 6 crashes=0A= var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");=0A= }=0A= catch(e) {=0A= try { =0A= var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");=0A= UFO.fv =3D [6, 0];=0A= _a.AllowScriptAccess =3D "always"; // throws if fp < 6.47 =0A= }=0A= catch(e) {=0A= if (UFO.fv[0] =3D=3D 6) return;=0A= }=0A= try {=0A= var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A= }=0A= catch(e) {}=0A= }=0A= if (typeof _a =3D=3D "object") {=0A= var _d =3D _a.GetVariable("$version"); // bugs in fp 6.21/6.23=0A= if (typeof _d !=3D "undefined") {=0A= _d =3D _d.replace(/^\S+\s+(.*)$/, "$1").split(",");=0A= UFO.fv =3D [parseInt(_d[0], 10), parseInt(_d[2], 10)];=0A= }=0A= }=0A= }=0A= },=0A= =0A= hasRequired: function(id) {=0A= var _l =3D UFO.req.length;=0A= for (var i =3D 0; i < _l; i++) {=0A= if (typeof UFO.foList[id][UFO.req[i]] =3D=3D "undefined") return = false;=0A= }=0A= return true;=0A= },=0A= =0A= hasFlashVersion: function(major, release) {=0A= return (UFO.fv[0] > major || (UFO.fv[0] =3D=3D major && UFO.fv[1] >=3D = release)) ? true : false;=0A= },=0A= =0A= writeSWF: function(id) {=0A= var _fo =3D UFO.foList[id];=0A= var _e =3D document.getElementById(id);=0A= if (UFO.pluginType =3D=3D "npapi") {=0A= if (UFO.uaHas("gecko") || UFO.uaHas("xml")) {=0A= while(_e.hasChildNodes()) {=0A= _e.removeChild(_e.firstChild);=0A= }=0A= var _obj =3D UFO.createElement("object");=0A= _obj.setAttribute("type", "application/x-shockwave-flash");=0A= _obj.setAttribute("data", _fo.movie);=0A= _obj.setAttribute("width", _fo.width);=0A= _obj.setAttribute("height", _fo.height);=0A= var _l =3D UFO.optAtt.length;=0A= for (var i =3D 0; i < _l; i++) {=0A= if (typeof _fo[UFO.optAtt[i]] !=3D "undefined") = _obj.setAttribute(UFO.optAtt[i], _fo[UFO.optAtt[i]]);=0A= }=0A= var _o =3D UFO.opt.concat(UFO.optExc);=0A= var _l =3D _o.length;=0A= for (var i =3D 0; i < _l; i++) {=0A= if (typeof _fo[_o[i]] !=3D "undefined") UFO.createObjParam(_obj, = _o[i], _fo[_o[i]]);=0A= }=0A= _e.appendChild(_obj);=0A= }=0A= else {=0A= var _emb =3D "";=0A= var _o =3D UFO.opt.concat(UFO.optAtt).concat(UFO.optExc);=0A= var _l =3D _o.length;=0A= for (var i =3D 0; i < _l; i++) {=0A= if (typeof _fo[_o[i]] !=3D "undefined") _emb +=3D ' ' + _o[i] + = '=3D"' + _fo[_o[i]] + '"';=0A= }=0A= _e.innerHTML =3D '';=0A= }=0A= var _p =3D window.location.protocol =3D=3D "https:" ? "https:" : = "http:";=0A= _e.innerHTML =3D '' + _objPar + '';=0A= }=0A= },=0A= =0A= createDialog: function(id) {=0A= var _fo =3D UFO.foList[id];=0A= UFO.createCSS("html", "height:100%; overflow:hidden;");=0A= UFO.createCSS("body", "height:100%; overflow:hidden;");=0A= UFO.createCSS("#xi-con", "position:absolute; left:0; top:0; = z-index:1000; width:100%; height:100%; background-color:#fff; = filter:alpha(opacity:75); opacity:0.75;");=0A= UFO.createCSS("#xi-dia", "position:absolute; left:50%; top:50%; = margin-left: -" + Math.round(parseInt(_fo.xiwidth, 10) / 2) + "px; = margin-top: -" + Math.round(parseInt(_fo.xiheight, 10) / 2) + "px; = width:" + _fo.xiwidth + "px; height:" + _fo.xiheight + "px;");=0A= var _b =3D document.getElementsByTagName("body")[0];=0A= var _c =3D UFO.createElement("div");=0A= _c.setAttribute("id", "xi-con");=0A= var _d =3D UFO.createElement("div");=0A= _d.setAttribute("id", "xi-dia");=0A= _c.appendChild(_d);=0A= _b.appendChild(_c);=0A= var _mmu =3D window.location;=0A= if (UFO.uaHas("xml") && UFO.uaHas("safari")) {=0A= var _mmd =3D = document.getElementsByTagName("title")[0].firstChild.nodeValue =3D = document.getElementsByTagName("title")[0].firstChild.nodeValue.slice(0, = 47) + " - Flash Player Installation";=0A= }=0A= else {=0A= var _mmd =3D document.title =3D document.title.slice(0, 47) + " - = Flash Player Installation";=0A= }=0A= var _mmp =3D UFO.pluginType =3D=3D "ax" ? "ActiveX" : "PlugIn";=0A= var _uc =3D typeof _fo.xiurlcancel !=3D "undefined" ? = "&xiUrlCancel=3D" + _fo.xiurlcancel : "";=0A= var _uf =3D typeof _fo.xiurlfailed !=3D "undefined" ? = "&xiUrlFailed=3D" + _fo.xiurlfailed : "";=0A= UFO.foList["xi-dia"] =3D { movie:_fo.ximovie, width:_fo.xiwidth, = height:_fo.xiheight, majorversion:"6", build:"65", = flashvars:"MMredirectURL=3D" + _mmu + "&MMplayerType=3D" + _mmp + = "&MMdoctitle=3D" + _mmd + _uc + _uf };=0A= UFO.writeSWF("xi-dia");=0A= },=0A= =0A= expressInstallCallback: function() {=0A= var _b =3D document.getElementsByTagName("body")[0];=0A= var _c =3D document.getElementById("xi-con");=0A= _b.removeChild(_c);=0A= UFO.createCSS("body", "height:auto; overflow:auto;");=0A= UFO.createCSS("html", "height:auto; overflow:auto;");=0A= },=0A= =0A= cleanupIELeaks: function() {=0A= var _o =3D document.getElementsByTagName("object");=0A= var _l =3D _o.length=0A= for (var i =3D 0; i < _l; i++) {=0A= _o[i].style.display =3D "none";=0A= for (var x in _o[i]) {=0A= if (typeof _o[i][x] =3D=3D "function") {=0A= _o[i][x] =3D null;=0A= }=0A= }=0A= }=0A= }=0A= =0A= };=0A= =0A= if (typeof window.attachEvent !=3D "undefined" && UFO.uaHas("ieWin")) {=0A= window.attachEvent("onunload", UFO.cleanupIELeaks);=0A= }=0A= ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/js_scripts/imootools.js /*=0A= Script: Moo.js=0A= My Object Oriented javascript.=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= =0A= Mootools Credits:=0A= - Class is slightly based on Base.js = (c) 2006 Dean Edwards, = License =0A= - Some functions are based on those found in prototype.js = (c) 2005 Sam Stephenson sam [at] conio = [dot] net, MIT-style license=0A= - Documentation by Aaron Newton (aaron.newton [at] cnet [dot] com) and = Valerio Proietti.=0A= */=0A= =0A= /*=0A= Class: Class=0A= The base class object of the framework.=0A= =0A= Arguments:=0A= properties - the collection of properties that apply to the class. = Creates a new class, its initialize method will fire upon class = instantiation.=0A= =0A= Example:=0A= (start code)=0A= var Cat =3D new Class({=0A= initialize: function(name){=0A= this.name =3D name;=0A= }=0A= });=0A= var myCat =3D new Cat('Micia');=0A= alert myCat.name; //alerts 'Micia'=0A= (end)=0A= */=0A= =0A= var Class =3D function(properties){=0A= var klass =3D function(){=0A= if (this.initialize && arguments[0] !=3D 'noinit') return = this.initialize.apply(this, arguments);=0A= else return this;=0A= };=0A= for (var property in this) klass[property] =3D this[property];=0A= klass.prototype =3D properties;=0A= return klass;=0A= };=0A= =0A= /*=0A= Property: empty=0A= Returns an empty function=0A= */=0A= =0A= Class.empty =3D function(){};=0A= =0A= Class.prototype =3D {=0A= =0A= /*=0A= Property: extend=0A= Returns the copy of the Class extended with the passed in properties.=0A= =0A= Arguments:=0A= properties - the properties to add to the base class in this new Class.=0A= =0A= Example:=0A= (start code)=0A= var Animal =3D new Class({=0A= initialize: function(age){=0A= this.age =3D age;=0A= }=0A= });=0A= var Cat =3D Animal.extend({=0A= initialize: function(name, age){=0A= this.parent(age); //will call the previous initialize;=0A= this.name =3D name;=0A= }=0A= });=0A= var myCat =3D new Cat('Micia', 20);=0A= alert myCat.name; //alerts 'Micia'=0A= alert myCat.age; //alerts 20=0A= (end)=0A= */=0A= =0A= extend: function(properties){=0A= var pr0t0typ3 =3D new this('noinit');=0A= =0A= var parentize =3D function(previous, current){=0A= if (!previous.apply || !current.apply) return false;=0A= return function(){=0A= this.parent =3D previous;=0A= return current.apply(this, arguments);=0A= };=0A= };=0A= =0A= for (var property in properties){=0A= var previous =3D pr0t0typ3[property];=0A= var current =3D properties[property];=0A= if (previous && previous !=3D current) current =3D = parentize(previous, current) || current;=0A= pr0t0typ3[property] =3D current;=0A= }=0A= return new Class(pr0t0typ3);=0A= },=0A= =0A= /*=0A= Property: implement=0A= Implements the passed in properties to the base Class prototypes, = altering the base class, unlike .=0A= =0A= Arguments:=0A= properties - the properties to add to the base class.=0A= =0A= Example:=0A= (start code)=0A= var Animal =3D new Class({=0A= initialize: function(age){=0A= this.age =3D age;=0A= }=0A= });=0A= Animal.implement({=0A= setName: function(name){=0A= this.name =3D name=0A= }=0A= });=0A= var myAnimal =3D new Animal(20);=0A= myAnimal.setName('Micia');=0A= alert(myAnimal.name); //alerts 'Micia'=0A= (end)=0A= */=0A= =0A= implement: function(properties){=0A= for (var property in properties) this.prototype[property] =3D = properties[property];=0A= }=0A= =0A= };=0A= =0A= /* Section: Object related Functions */=0A= =0A= /*=0A= Function: Object.extend=0A= Copies all the properties from the second passed object to the first = passed Object.=0A= If you do myWhatever.extend =3D Object.extend the first parameter will = become myWhatever, and your extend function will only need one parameter.=0A= =0A= Example:=0A= (start code)=0A= var firstOb =3D {=0A= 'name': 'John',=0A= 'lastName': 'Doe'=0A= };=0A= var secondOb =3D {=0A= 'age': '20',=0A= 'sex': 'male',=0A= 'lastName': 'Dorian'=0A= };=0A= Object.extend(firstOb, secondOb);=0A= //firstOb will become: =0A= {=0A= 'name': 'John',=0A= 'lastName': 'Dorian',=0A= 'age': '20',=0A= 'sex': 'male'=0A= };=0A= (end)=0A= =0A= Returns:=0A= The first object, extended.=0A= */=0A= =0A= Object.extend =3D function(){=0A= var args =3D arguments;=0A= args =3D (args[1]) ? [args[0], args[1]] : [this, args[0]];=0A= for (var property in args[1]) args[0][property] =3D args[1][property];=0A= return args[0];=0A= };=0A= =0A= /*=0A= Function: Object.Native=0A= Will add a .extend method to the objects passed as a parameter, = equivalent to =0A= =0A= Arguments:=0A= a number of classes/native javascript objects=0A= =0A= */=0A= =0A= Object.Native =3D function(){=0A= for (var i =3D 0; i < arguments.length; i++) arguments[i].extend =3D = Class.prototype.implement;=0A= };=0A= =0A= new Object.Native(Function, Array, String, Number, Class);=0A= =0A= /*=0A= Script: Utility.js=0A= Contains Utility functions=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= //htmlelement=0A= =0A= if (typeof HTMLElement =3D=3D 'undefined'){=0A= var HTMLElement =3D Class.empty;=0A= HTMLElement.prototype =3D {};=0A= } else {=0A= HTMLElement.prototype.htmlElement =3D true;=0A= }=0A= =0A= //window, document=0A= =0A= window.extend =3D document.extend =3D Object.extend;=0A= var Window =3D window;=0A= =0A= /*=0A= Function: $type=0A= Returns the type of object that matches the element passed in.=0A= =0A= Arguments:=0A= obj - the object to inspect.=0A= =0A= Example:=0A= >var myString =3D 'hello';=0A= >$type(myString); //returns "string"=0A= =0A= Returns:=0A= 'element' - if obj is a DOM element node=0A= 'textnode' - if obj is a DOM text node=0A= 'whitespace' - if obj is a DOM whitespace node=0A= 'array' - if obj is an array=0A= 'object' - if obj is an object=0A= 'string' - if obj is a string=0A= 'number' - if obj is a number=0A= 'boolean' - if obj is a boolean=0A= 'function' - if obj is a function=0A= false - (boolean) if the object is not defined or none of the above.=0A= */=0A= =0A= function $type(obj){=0A= if (obj =3D=3D=3D null || obj =3D=3D=3D undefined) return false;=0A= var type =3D typeof obj;=0A= if (type =3D=3D 'object'){=0A= if (obj.htmlElement) return 'element';=0A= if (obj.push) return 'array';=0A= if (obj.nodeName){=0A= switch (obj.nodeType){=0A= case 1: return 'element';=0A= case 3: return obj.nodeValue.test(/\S/) ? 'textnode' : 'whitespace';=0A= }=0A= }=0A= }=0A= return type;=0A= };=0A= =0A= /*=0A= Function: $chk=0A= Returns true if the passed in value/object exists or is 0, otherwise = returns false.=0A= Useful to accept zeroes.=0A= */=0A= =0A= function $chk(obj){=0A= return !!(obj || obj =3D=3D=3D 0);=0A= };=0A= =0A= /*=0A= Function: $pick=0A= Returns the first object if defined, otherwise returns the second.=0A= */=0A= =0A= function $pick(obj, picked){=0A= return ($type(obj)) ? obj : picked;=0A= };=0A= =0A= /*=0A= Function: $random=0A= Returns a random integer number between the two passed in values.=0A= =0A= Arguments:=0A= min - integer, the minimum value (inclusive).=0A= max - integer, the maximum value (inclusive).=0A= =0A= Returns:=0A= a random integer between min and max.=0A= */=0A= =0A= function $random(min, max){=0A= return Math.floor(Math.random() * (max - min + 1) + min);=0A= };=0A= =0A= /*=0A= Function: $clear=0A= clears a timeout or an Interval.=0A= =0A= Returns:=0A= null=0A= =0A= Arguments:=0A= timer - the setInterval or setTimeout to clear.=0A= =0A= Example:=0A= >var myTimer =3D myFunction.delay(5000); //wait 5 seconds and execute = my function.=0A= >myTimer =3D $clear(myTimer); //nevermind=0A= =0A= See also:=0A= , =0A= */=0A= =0A= function $clear(timer){=0A= clearTimeout(timer);=0A= clearInterval(timer);=0A= return null;=0A= };=0A= =0A= /*=0A= Class: window=0A= Some properties are attached to the window object by the browser = detection.=0A= =0A= Properties:=0A= window.ie - will be set to true if the current browser is internet = explorer (any).=0A= window.ie6 - will be set to true if the current browser is internet = explorer 6.=0A= window.ie7 - will be set to true if the current browser is internet = explorer 7.=0A= window.khtml - will be set to true if the current browser is = Safari/Konqueror.=0A= window.gecko - will be set to true if the current browser is = Mozilla/Gecko.=0A= */=0A= =0A= if (window.ActiveXObject) window.ie =3D window[window.XMLHttpRequest ? = 'ie7' : 'ie6'] =3D true;=0A= else if (document.childNodes && !document.all && = !navigator.taintEnabled) window.khtml =3D true;=0A= else if (document.getBoxObjectFor !=3D null) window.gecko =3D true;=0A= =0A= //enables background image cache for internet explorer 6=0A= =0A= if (window.ie6) try {document.execCommand("BackgroundImageCache", false, = true);} catch (e){};=0A= =0A= /*=0A= Script: Array.js=0A= Contains Array prototypes, <$A>, <$each>=0A= =0A= Authors:=0A= - Christophe Beyls, =0A= - Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= /*=0A= Class: Array=0A= A collection of The Array Object prototype methods.=0A= */=0A= =0A= //emulated methods=0A= =0A= /*=0A= Property: forEach=0A= Iterates through an array; This method is only available for browsers = without native *forEach* support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.forEach =3D Array.prototype.forEach || function(fn, = bind){=0A= for (var i =3D 0; i < this.length; i++) fn.call(bind, this[i], i, this);=0A= };=0A= =0A= /*=0A= Property: filter=0A= This method is provided only for browsers without native *filter* = support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.filter =3D Array.prototype.filter || function(fn, bind){=0A= var results =3D [];=0A= for (var i =3D 0; i < this.length; i++){=0A= if (fn.call(bind, this[i], i, this)) results.push(this[i]);=0A= }=0A= return results;=0A= };=0A= =0A= /*=0A= Property: map=0A= This method is provided only for browsers without native *map* support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.map =3D Array.prototype.map || function(fn, bind){=0A= var results =3D [];=0A= for (var i =3D 0; i < this.length; i++) results[i] =3D fn.call(bind, = this[i], i, this);=0A= return results;=0A= };=0A= =0A= /*=0A= Property: every=0A= This method is provided only for browsers without native *every* = support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.every =3D Array.prototype.every || function(fn, bind){=0A= for (var i =3D 0; i < this.length; i++){=0A= if (!fn.call(bind, this[i], i, this)) return false;=0A= }=0A= return true;=0A= };=0A= =0A= /*=0A= Property: some=0A= This method is provided only for browsers without native *some* support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.some =3D Array.prototype.some || function(fn, bind){=0A= for (var i =3D 0; i < this.length; i++){=0A= if (fn.call(bind, this[i], i, this)) return true;=0A= }=0A= return false;=0A= };=0A= =0A= /*=0A= Property: indexOf=0A= This method is provided only for browsers without native *indexOf* = support.=0A= For more info see = =0A= */=0A= =0A= Array.prototype.indexOf =3D Array.prototype.indexOf || function(item, = from){=0A= from =3D from || 0;=0A= if (from < 0) from =3D Math.max(0, this.length + from);=0A= while (from < this.length){=0A= if(this[from] =3D=3D=3D item) return from;=0A= from++;=0A= }=0A= return -1;=0A= };=0A= =0A= //custom methods=0A= =0A= Array.extend({=0A= =0A= /*=0A= Property: each=0A= Same as .=0A= =0A= Arguments:=0A= fn - the function to execute with each item in the array=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= =0A= Example:=0A= >var Animals =3D ['Cat', 'Dog', 'Coala'];=0A= >Animals.forEach(function(animal){=0A= > document.write(animal)=0A= >});=0A= */=0A= =0A= each: Array.prototype.forEach,=0A= =0A= /*=0A= Property: copy=0A= returns a copy of the array.=0A= =0A= Returns:=0A= a new array which is a copy of the current one.=0A= =0A= Arguments:=0A= start - optional, the index where to start the copy, default is 0. If = negative, it is taken as the offset from the end of the array.=0A= length - optional, the number of elements to copy. By default, copies = all elements from start to the end of the array.=0A= =0A= Example:=0A= >var letters =3D ["a","b","c"];=0A= >var copy =3D letters.copy(); // ["a","b","c"] (new instance)=0A= */=0A= =0A= copy: function(start, length){=0A= start =3D start || 0;=0A= if (start < 0) start =3D this.length + start;=0A= length =3D length || (this.length - start);=0A= var newArray =3D [];=0A= for (var i =3D 0; i < length; i++) newArray[i] =3D this[start++];=0A= return newArray;=0A= },=0A= =0A= /*=0A= Property: remove=0A= Removes all occurrences of an item from the array.=0A= =0A= Arguments:=0A= item - the item to remove=0A= =0A= Returns:=0A= the Array with all occurrences of the item removed.=0A= =0A= Example:=0A= >["1","2","3","2"].remove("2") // ["1","3"];=0A= */=0A= =0A= remove: function(item){=0A= var i =3D 0;=0A= while (i < this.length){=0A= if (this[i] =3D=3D=3D item) this.splice(i, 1);=0A= else i++;=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: test=0A= Tests an array for the presence of an item.=0A= =0A= Arguments:=0A= item - the item to search for in the array.=0A= from - optional, the index at which to begin the search, default is 0. = If negative, it is taken as the offset from the end of the array.=0A= =0A= Returns:=0A= true - the item was found=0A= false - it wasn't=0A= =0A= Example:=0A= >["a","b","c"].test("a"); // true=0A= >["a","b","c"].test("d"); // false=0A= */=0A= =0A= test: function(item, from){=0A= return this.indexOf(item, from) !=3D -1;=0A= },=0A= =0A= /*=0A= Property: extend=0A= Extends an array with another=0A= =0A= Arguments:=0A= newArray - the array to extend ours with=0A= =0A= Example:=0A= >var Animals =3D ['Cat', 'Dog', 'Coala'];=0A= >Animals.extend(['Lizard']);=0A= >//Animals is now: ['Cat', 'Dog', 'Coala', 'Lizard'];=0A= */=0A= =0A= extend: function(newArray){=0A= for (var i =3D 0; i < newArray.length; i++) this.push(newArray[i]);=0A= return this;=0A= },=0A= =0A= /*=0A= Property: associate=0A= Creates an object with key-value pairs based on the array of keywords = passed in=0A= and the current content of the array.=0A= =0A= Arguments:=0A= keys - the array of keywords.=0A= =0A= Example:=0A= (start code)=0A= var Animals =3D ['Cat', 'Dog', 'Coala', 'Lizard'];=0A= var Speech =3D ['Miao', 'Bau', 'Fruuu', 'Mute'];=0A= var Speeches =3D Animals.associate(speech);=0A= //Speeches['Miao'] is now Cat.=0A= //Speeches['Bau'] is now Dog.=0A= //...=0A= (end)=0A= */=0A= =0A= associate: function(keys){=0A= var obj =3D {}, length =3D Math.min(this.length, keys.length);=0A= for (var i =3D 0; i < length; i++) obj[keys[i]] =3D this[i];=0A= return obj;=0A= }=0A= =0A= });=0A= =0A= /* Section: Utility Functions */=0A= =0A= /*=0A= Function: $A()=0A= Same as , but as function.=0A= Useful to apply Array prototypes to iterable objects, as a collection = of DOM elements or the arguments object.=0A= =0A= Example:=0A= (start code)=0A= function myFunction(){=0A= $A(arguments).each(argument, function(){=0A= alert(argument);=0A= });=0A= };=0A= //the above will alert all the arguments passed to the function = myFunction.=0A= (end)=0A= */=0A= =0A= function $A(array, start, length){=0A= return Array.prototype.copy.call(array, start, length);=0A= };=0A= =0A= /*=0A= Function: $each=0A= use to iterate through iterables that are not regular arrays, such as = builtin getElementsByTagName calls, or arguments of a function.=0A= =0A= Arguments:=0A= iterable - an iterable element.=0A= function - function to apply to the iterable.=0A= bind - optional, the 'this' of the function will refer to this object.=0A= */=0A= =0A= function $each(iterable, fn, bind){=0A= return Array.prototype.forEach.call(iterable, fn, bind);=0A= };=0A= =0A= /*=0A= Script: String.js=0A= Contains String prototypes and Number prototypes.=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= /*=0A= Class: String=0A= A collection of The String Object prototype methods.=0A= */=0A= =0A= String.extend({=0A= =0A= /*=0A= Property: test=0A= Tests a string with a regular expression.=0A= =0A= Arguments:=0A= regex - a string or regular expression object, the regular expression = you want to match the string with=0A= params - optional, if first parameter is a string, any parameters you = want to pass to the regex ('g' has no effect)=0A= =0A= Returns:=0A= true if a match for the regular expression is found in the string, = false if not.=0A= See = =0A= =0A= Example:=0A= >"I like cookies".test("cookie"); // returns true=0A= >"I like cookies".test("COOKIE", "i") // ignore case, returns true=0A= >"I like cookies".test("cake"); // returns false=0A= */=0A= =0A= test: function(regex, params){=0A= return ((typeof regex =3D=3D 'string') ? new RegExp(regex, params) : = regex).test(this);=0A= },=0A= =0A= /*=0A= Property: toInt=0A= parses a string to an integer.=0A= =0A= Returns:=0A= either an int or "NaN" if the string is not a number.=0A= =0A= Example:=0A= >var value =3D "10px".toInt(); // value is 10=0A= */=0A= =0A= toInt: function(){=0A= return parseInt(this);=0A= },=0A= =0A= toFloat: function(){=0A= return parseFloat(this);=0A= },=0A= =0A= /*=0A= Property: camelCase=0A= Converts a hiphenated string to a camelcase string.=0A= =0A= Example:=0A= >"I-like-cookies".camelCase(); //"ILikeCookies"=0A= =0A= Returns:=0A= the camel cased string=0A= */=0A= =0A= camelCase: function(){=0A= return this.replace(/-\D/g, function(match){=0A= return match.charAt(1).toUpperCase();=0A= });=0A= },=0A= =0A= /*=0A= Property: hyphenate=0A= Converts a camelCased string to a hyphen-ated string.=0A= =0A= Example:=0A= >"ILikeCookies".hyphenate(); //"I-like-cookies"=0A= */=0A= =0A= hyphenate: function(){=0A= return this.replace(/\w[A-Z]/g, function(match){=0A= return (match.charAt(0)+'-'+match.charAt(1).toLowerCase());=0A= });=0A= },=0A= =0A= /*=0A= Property: capitalize=0A= Converts the first letter in each word of a string to Uppercase.=0A= =0A= Example:=0A= >"i like cookies".capitalize(); //"I Like Cookies"=0A= =0A= Returns:=0A= the capitalized string=0A= */=0A= =0A= capitalize: function(){=0A= return this.toLowerCase().replace(/\b[a-z]/g, function(match){=0A= return match.toUpperCase();=0A= });=0A= },=0A= =0A= /*=0A= Property: trim=0A= Trims the leading and trailing spaces off a string.=0A= =0A= Example:=0A= >" i like cookies ".trim() //"i like cookies"=0A= =0A= Returns:=0A= the trimmed string=0A= */=0A= =0A= trim: function(){=0A= return this.replace(/^\s+|\s+$/g, '');=0A= },=0A= =0A= /*=0A= Property: clean=0A= trims () a string AND removes all the double spaces in a = string.=0A= =0A= Returns:=0A= the cleaned string=0A= =0A= Example:=0A= >" i like cookies \n\n".clean() //"i like cookies"=0A= */=0A= =0A= clean: function(){=0A= return this.replace(/\s{2,}/g, ' ').trim();=0A= },=0A= =0A= /*=0A= Property: rgbToHex=0A= Converts an RGB value to hexidecimal. The string must be in the format = of "rgb(255,255,255)" or "rgba(255,255,255,1)";=0A= =0A= Arguments:=0A= array - boolean value, defaults to false. Use true if you want the = array ['FF','33','00'] as output instead of "#FF3300"=0A= =0A= Returns:=0A= hex string or array. returns "transparent" if the output is set as = string and the fourth value of rgba in input string is 0.=0A= =0A= Example:=0A= >"rgb(17,34,51)".rgbToHex(); //"#112233"=0A= >"rgba(17,34,51,0)".rgbToHex(); //"transparent"=0A= >"rgb(17,34,51)".rgbToHex(true); //['11','22','33']=0A= */=0A= =0A= rgbToHex: function(array){=0A= var rgb =3D this.match(/\d{1,3}/g);=0A= return (rgb) ? rgb.rgbToHex(array) : false;=0A= },=0A= =0A= /*=0A= Property: hexToRgb=0A= Converts a hexidecimal color value to RGB. Input string must be the = hex color value (with or without the hash). Also accepts triplets = ('333');=0A= =0A= Arguments:=0A= array - boolean value, defaults to false. Use true if you want the = array [255,255,255] as output instead of "rgb(255,255,255)";=0A= =0A= Returns:=0A= rgb string or array.=0A= =0A= Example:=0A= >"#112233".hexToRgb(); //"rgb(17,34,51)"=0A= >"#112233".hexToRgb(true); //[17,34,51]=0A= */=0A= =0A= hexToRgb: function(array){=0A= var hex =3D this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);=0A= return (hex) ? hex.slice(1).hexToRgb(array) : false;=0A= }=0A= =0A= });=0A= =0A= Array.extend({=0A= =0A= /*=0A= Property: rgbToHex=0A= see , but as an array method.=0A= */=0A= =0A= rgbToHex: function(array){=0A= if (this.length < 3) return false;=0A= if (this[3] && (this[3] =3D=3D 0) && !array) return 'transparent';=0A= var hex =3D [];=0A= for (var i =3D 0; i < 3; i++){=0A= var bit =3D (this[i]-0).toString(16);=0A= hex.push((bit.length =3D=3D 1) ? '0'+bit : bit);=0A= }=0A= return array ? hex : '#'+hex.join('');=0A= },=0A= =0A= /*=0A= Property: hexToRgb=0A= same as , but as an array method.=0A= */=0A= =0A= hexToRgb: function(array){=0A= if (this.length !=3D 3) return false;=0A= var rgb =3D [];=0A= for (var i =3D 0; i < 3; i++){=0A= rgb.push(parseInt((this[i].length =3D=3D 1) ? this[i]+this[i] : = this[i], 16));=0A= }=0A= return array ? rgb : 'rgb('+rgb.join(',')+')';=0A= }=0A= =0A= });=0A= =0A= /*=0A= Class: Number=0A= contains the internal method toInt.=0A= */=0A= =0A= Number.extend({=0A= =0A= /*=0A= Property: toInt=0A= Returns this number; useful because toInt must work on both Strings = and Numbers.=0A= */=0A= =0A= toInt: function(){=0A= return parseInt(this);=0A= },=0A= =0A= toFloat: function(){=0A= return parseFloat(this);=0A= }=0A= =0A= });=0A= =0A= /* =0A= Script: Function.js=0A= Contains Function prototypes and utility functions .=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= =0A= Credits:=0A= - Some functions are inspired by those found in prototype.js = (c) 2005 Sam Stephenson sam [at] conio = [dot] net, MIT-style license=0A= */=0A= =0A= /*=0A= Class: Function=0A= A collection of The Function Object prototype methods.=0A= */=0A= =0A= Function.extend({=0A= =0A= /*=0A= Property: create=0A= Main function to create closures.=0A= =0A= Returns:=0A= a function.=0A= =0A= Arguments:=0A= options - An Options object.=0A= =0A= Options:=0A= bind - The object that the "this" of the function will refer to. = Default is the current function.=0A= event - If set to true, the function will act as an event listener and = receive an event as first argument.=0A= If set to a class name, the function will receive a new instance of = this class (with the event passed as argument's constructor) as first = argument.=0A= Default is false.=0A= arguments - A single argument or array of arguments that will be = passed to the function when called.=0A= If both the event and arguments options are set, the event is = passed as first argument and the arguments array will follow.=0A= Default is no custom arguments, the function will receive the = standard arguments when called.=0A= delay - Numeric value: if set, the returned function will delay the = actual execution by this amount of milliseconds and return a timer = handle when called.=0A= Default is no delay.=0A= periodical - Numeric value: if set, the returned function will = periodically perform the actual execution with this specified interval = and return a timer handle when called.=0A= Default is no periodical execution.=0A= attempt - If set to true, the returned function will try to execute = and return either the results or the error when called. Default is false.=0A= */=0A= =0A= create: function(options){=0A= var fn =3D this;=0A= options =3D Object.extend({=0A= 'bind': fn, =0A= 'event': false, =0A= 'arguments': null, =0A= 'delay': false, =0A= 'periodical': false, =0A= 'attempt': false=0A= }, options || {});=0A= if ($chk(options.arguments) && $type(options.arguments) !=3D 'array') = options.arguments =3D [options.arguments];=0A= return function(event){=0A= var args;=0A= if (options.event){=0A= event =3D event || window.event;=0A= args =3D [(options.event =3D=3D=3D true) ? event : new = options.event(event)];=0A= if (options.arguments) args =3D args.concat(options.arguments);=0A= }=0A= else args =3D options.arguments || arguments;=0A= var returns =3D function(){=0A= return fn.apply(options.bind, args);=0A= };=0A= if (options.delay) return setTimeout(returns, options.delay);=0A= if (options.periodical) return setInterval(returns, = options.periodical);=0A= if (options.attempt){=0A= try {=0A= return returns();=0A= } catch(err){=0A= return err;=0A= }=0A= }=0A= return returns();=0A= };=0A= },=0A= =0A= /*=0A= Property: pass=0A= Shortcut to create closures with arguments and bind.=0A= =0A= Returns:=0A= a function.=0A= =0A= Arguments:=0A= args - the arguments passed. must be an array if arguments > 1=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= =0A= Example:=0A= >myFunction.pass([arg1, arg2], myElement);=0A= */=0A= =0A= pass: function(args, bind){=0A= return this.create({'arguments': args, 'bind': bind});=0A= },=0A= =0A= /*=0A= Property: attempt=0A= Tries to execute the function, returns either the function results or = the error.=0A= =0A= Arguments:=0A= args - the arguments passed. must be an array if arguments > 1=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= =0A= Example:=0A= >myFunction.attempt([arg1, arg2], myElement);=0A= */=0A= =0A= attempt: function(args, bind){=0A= return this.create({'arguments': args, 'bind': bind, 'attempt': = true})();=0A= },=0A= =0A= /*=0A= Property: bind=0A= method to easily create closures with "this" altered.=0A= =0A= Arguments:=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= args - optional, the arguments passed. must be an array if arguments > = 1=0A= =0A= Returns:=0A= a function.=0A= =0A= Example:=0A= >function myFunction(){=0A= > this.setStyle('color', 'red');=0A= > // note that 'this' here refers to myFunction, not an element=0A= > // we'll need to bind this function to the element we want to alter=0A= >};=0A= >var myBoundFunction =3D myFunction.bind(myElement);=0A= >myBoundFunction(); // this will make the element myElement red.=0A= */=0A= =0A= bind: function(bind, args){=0A= return this.create({'bind': bind, 'arguments': args});=0A= },=0A= =0A= /*=0A= Property: bindAsEventListener=0A= cross browser method to pass event firer=0A= =0A= Arguments:=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= args - optional, the arguments passed. must be an array if arguments > = 1=0A= =0A= Returns:=0A= a function with the parameter bind as its "this" and as a pre-passed = argument event or window.event, depending on the browser.=0A= =0A= Example:=0A= >function myFunction(event){=0A= > alert(event.clientx) //returns the coordinates of the mouse..=0A= >};=0A= >myElement.onclick =3D myFunction.bindAsEventListener(myElement);=0A= */=0A= =0A= bindAsEventListener: function(bind, args){=0A= return this.create({'bind': bind, 'event': true, 'arguments': args});=0A= },=0A= =0A= /*=0A= Property: delay=0A= Delays the execution of a function by a specified duration.=0A= =0A= Arguments:=0A= ms - the duration to wait in milliseconds=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= args - optional, the arguments passed. must be an array if arguments > = 1=0A= =0A= Example:=0A= >myFunction.delay(50, myElement) //wait 50 milliseconds, then call = myFunction and bind myElement to it=0A= >(function(){alert('one second later...')}).delay(1000); //wait a = second and alert=0A= */=0A= =0A= delay: function(ms, bind, args){=0A= return this.create({'delay': ms, 'bind': bind, 'arguments': args})();=0A= },=0A= =0A= /*=0A= Property: periodical=0A= Executes a function in the specified intervals of time=0A= =0A= Arguments:=0A= ms - the duration of the intervals between executions.=0A= bind - optional, the object that the "this" of the function will refer = to.=0A= args - optional, the arguments passed. must be an array if arguments > = 1=0A= */=0A= =0A= periodical: function(ms, bind, args){=0A= return this.create({'periodical': ms, 'bind': bind, 'arguments': = args})();=0A= }=0A= =0A= });=0A= =0A= /*=0A= Script: Element.js=0A= Contains useful Element prototypes, to be used with the dollar function = <$>.=0A= =0A= Authors:=0A= - Valerio Proietti, =0A= - Christophe Beyls, =0A= =0A= License:=0A= MIT-style license.=0A= =0A= Credits:=0A= - Some functions are inspired by those found in prototype.js = (c) 2005 Sam Stephenson sam [at] conio = [dot] net, MIT-style license=0A= */=0A= =0A= /*=0A= Class: Element=0A= Custom class to allow all of its methods to be used with any DOM = element via the dollar function <$>.=0A= */=0A= =0A= var Element =3D new Class({=0A= =0A= /*=0A= Property: initialize=0A= Creates a new element of the type passed in.=0A= =0A= Arguments:=0A= el - the tag name for the element you wish to create.=0A= =0A= Example:=0A= >var div =3D new Element('div');=0A= */=0A= =0A= initialize: function(el){=0A= if ($type(el) =3D=3D 'string') el =3D document.createElement(el);=0A= return $(el);=0A= }=0A= =0A= });=0A= =0A= /*=0A= Section: Utility Functions=0A= =0A= Function: $=0A= returns the element passed in with all the Element prototypes applied.=0A= =0A= Arguments:=0A= el - a reference to an actual element or a string representing the id = of an element=0A= =0A= Example:=0A= >$('myElement') // gets a DOM element by id with all the Element = prototypes applied.=0A= >var div =3D document.getElementById('myElement');=0A= >$(div) //returns an Element also with all the mootools extentions = applied.=0A= =0A= You'll use this when you aren't sure if a variable is an actual element = or an id, as=0A= well as just shorthand for document.getElementById().=0A= =0A= Returns:=0A= a DOM element or false (if no id was found).=0A= =0A= Note:=0A= you need to call $ on an element only once to get all the prototypes.=0A= But its no harm to call it multiple times, as it will detect if it has = been already extended.=0A= */=0A= =0A= function $(el){=0A= if (!el) return false;=0A= if (el._element_extended_ || [window, document].test(el)) return el;=0A= if ($type(el) =3D=3D 'string') el =3D document.getElementById(el);=0A= if ($type(el) !=3D 'element') return false;=0A= if (['object', 'embed'].test(el.tagName.toLowerCase()) || el.extend) = return el;=0A= el._element_extended_ =3D true;=0A= Garbage.collect(el);=0A= el.extend =3D Object.extend;=0A= if (!(el.htmlElement)) el.extend(Element.prototype);=0A= return el;=0A= };=0A= =0A= //elements class=0A= =0A= var Elements =3D new Class({});=0A= =0A= new Object.Native(Elements);=0A= =0A= document.getElementsBySelector =3D document.getElementsByTagName;=0A= =0A= /*=0A= Function: $$=0A= Selects, and extends DOM elements.=0A= =0A= Arguments:=0A= HTMLCollection(document.getElementsByTagName, element.childNodes), an = array of elements, a string.=0A= =0A= Note:=0A= if you loaded , $$ will also accept CSS Selectors.=0A= =0A= Example:=0A= >$$('a') //an array of all anchor tags on the page=0A= >$$('a', 'b') //an array of all anchor and bold tags on the page=0A= >$$('#myElement') //array containing only the element with id =3D = myElement. (only with )=0A= >$$('#myElement a.myClass') //an array of all anchor tags with the = class "myClass" within the DOM element with id "myElement" (only with = )=0A= =0A= Returns:=0A= array - array of all the dom elements matched=0A= */=0A= =0A= function $$(){=0A= if (!arguments) return false;=0A= if (arguments.length =3D=3D 1){=0A= if (!arguments[0]) return false;=0A= if (arguments[0]._elements_extended_) return arguments[0];=0A= }=0A= var elements =3D [];=0A= $each(arguments, function(selector){=0A= switch ($type(selector)){=0A= case 'element': elements.push($(selector)); break;=0A= case 'string': selector =3D document.getElementsBySelector(selector);=0A= default:=0A= if (selector.length){=0A= $each(selector, function(el){=0A= if ($(el)) elements.push(el);=0A= });=0A= }=0A= }=0A= });=0A= elements._elements_extended_ =3D true;=0A= return Object.extend(elements, new Elements);=0A= };=0A= =0A= Elements.Multi =3D function(property){=0A= return function(){=0A= var args =3D arguments;=0A= var items =3D [];=0A= var elements =3D true;=0A= $each(this, function(el){=0A= var returns =3D el[property].apply(el, args);=0A= if ($type(returns) !=3D 'element') elements =3D false;=0A= items.push(returns);=0A= });=0A= if (elements) items =3D $$(items);=0A= return items;=0A= };=0A= };=0A= =0A= Element.extend =3D function(properties){=0A= for (var property in properties){=0A= HTMLElement.prototype[property] =3D properties[property];=0A= Element.prototype[property] =3D properties[property];=0A= Elements.prototype[property] =3D Elements.Multi(property);=0A= }=0A= };=0A= =0A= /*=0A= Class: Element=0A= Custom class to allow all of its methods to be used with any DOM = element via the dollar function <$>.=0A= */=0A= =0A= Element.extend({=0A= =0A= inject: function(el, where){=0A= el =3D $(el) || new Element(el);=0A= switch (where){=0A= case "before": $(el.parentNode).insertBefore(this, el); break;=0A= case "after":=0A= if (!el.getNext()) $(el.parentNode).appendChild(this);=0A= else $(el.parentNode).insertBefore(this, el.getNext());=0A= break;=0A= case "inside": el.appendChild(this);=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: injectBefore=0A= Inserts the Element before the passed element.=0A= =0A= Parameteres:=0A= el - a string representing the element to be injected in (myElementId, = or div), or an element reference.=0A= If you pass div or another tag, the element will be created.=0A= =0A= Example:=0A= >html:=0A= >
=0A= >
=0A= >js:=0A= >$('mySecondElement').injectBefore('myElement');=0A= >resulting html:=0A= >
=0A= >
=0A= =0A= */=0A= =0A= injectBefore: function(el){=0A= return this.inject(el, 'before');=0A= },=0A= =0A= /*=0A= Property: injectAfter=0A= Same as , but inserts the element after.=0A= */=0A= =0A= injectAfter: function(el){=0A= return this.inject(el, 'after');=0A= },=0A= =0A= /*=0A= Property: injectInside=0A= Same as , but inserts the element inside.=0A= */=0A= =0A= injectInside: function(el){=0A= return this.inject(el, 'inside');=0A= },=0A= =0A= /*=0A= Property: adopt=0A= Inserts the passed element inside the Element. Works as = but in reverse.=0A= =0A= Parameteres:=0A= el - a string representing the element to be injected in (myElementId, = or div), or an element reference.=0A= If you pass div or another tag, the element will be created.=0A= */=0A= =0A= adopt: function(el){=0A= this.appendChild($(el) || new Element(el));=0A= return this;=0A= },=0A= =0A= /*=0A= Property: remove=0A= Removes the Element from the DOM.=0A= =0A= Example:=0A= >$('myElement').remove() //bye bye=0A= */=0A= =0A= remove: function(){=0A= this.parentNode.removeChild(this);=0A= return this;=0A= },=0A= =0A= /*=0A= Property: clone=0A= Clones the Element and returns the cloned one.=0A= =0A= Returns: =0A= the cloned element=0A= =0A= Example:=0A= >var clone =3D $('myElement').clone().injectAfter('myElement');=0A= >//clones the Element and append the clone after the Element.=0A= */=0A= =0A= clone: function(contents){=0A= var el =3D this.cloneNode(contents !=3D=3D false);=0A= return $(el);=0A= },=0A= =0A= /*=0A= Property: replaceWith=0A= Replaces the Element with an element passed.=0A= =0A= Parameteres:=0A= el - a string representing the element to be injected in (myElementId, = or div), or an element reference.=0A= If you pass div or another tag, the element will be created.=0A= =0A= Returns:=0A= the passed in element=0A= =0A= Example:=0A= >$('myOldElement').replaceWith($('myNewElement')); //$('myOldElement') = is gone, and $('myNewElement') is in its place.=0A= */=0A= =0A= replaceWith: function(el){=0A= el =3D $(el) || new Element(el);=0A= this.parentNode.replaceChild(el, this);=0A= return el;=0A= },=0A= =0A= /*=0A= Property: appendText=0A= Appends text node to a DOM element.=0A= =0A= Arguments:=0A= text - the text to append.=0A= =0A= Example:=0A= >
hey
=0A= >$('myElement').appendText(' howdy'); //myElement innerHTML is now = "hey howdy"=0A= */=0A= =0A= appendText: function(text){=0A= if (window.ie){=0A= switch(this.getTag()){=0A= case 'style': this.styleSheet.cssText =3D text; return this;=0A= case 'script': this.setProperty('text', text); return this;=0A= }=0A= }=0A= this.appendChild(document.createTextNode(text));=0A= return this;=0A= },=0A= =0A= /*=0A= Property: hasClass=0A= Tests the Element to see if it has the passed in className.=0A= =0A= Returns:=0A= true - the Element has the class=0A= false - it doesn't=0A= =0A= Arguments:=0A= className - the class name to test.=0A= =0A= Example:=0A= >
=0A= >$('myElement').hasClass('testClass'); //returns true=0A= */=0A= =0A= hasClass: function(className){=0A= return this.className.test('(?:^|\\s)'+className+'(?:\\s|$)');=0A= },=0A= =0A= /*=0A= Property: addClass=0A= Adds the passed in class to the Element, if the element doesnt already = have it.=0A= =0A= Arguments:=0A= className - the class name to add=0A= =0A= Example: =0A= >
=0A= >$('myElement').addClass('newClass'); //
=0A= */=0A= =0A= addClass: function(className){=0A= if (!this.hasClass(className)) this.className =3D (this.className+' = '+className).clean();=0A= return this;=0A= },=0A= =0A= /*=0A= Property: removeClass=0A= works like , but removes the class from the element.=0A= */=0A= =0A= removeClass: function(className){=0A= this.className =3D this.className.replace(new = RegExp('(^|\\s)'+className+'(?:\\s|$)'), '$1').clean();=0A= return this;=0A= },=0A= =0A= /*=0A= Property: toggleClass=0A= Adds or removes the passed in class name to the element, depending on = if it's present or not.=0A= =0A= Arguments:=0A= className - the class to add or remove=0A= =0A= Example:=0A= >
=0A= >$('myElement').toggleClass('myClass');=0A= >
=0A= >$('myElement').toggleClass('myClass');=0A= >
=0A= */=0A= =0A= toggleClass: function(className){=0A= return this.hasClass(className) ? this.removeClass(className) : = this.addClass(className);=0A= },=0A= =0A= /*=0A= Property: setStyle=0A= Sets a css property to the Element.=0A= =0A= Arguments:=0A= property - the property to set=0A= value - the value to which to set it=0A= =0A= Example:=0A= >$('myElement').setStyle('width', '300px'); //the width is now 300px=0A= */=0A= =0A= setStyle: function(property, value){=0A= if (property =3D=3D 'opacity') this.setOpacity(parseFloat(value));=0A= else this.style[property.camelCase()] =3D (value.push) ? = 'rgb('+value.join(',')+')' : value;=0A= return this;=0A= },=0A= =0A= /*=0A= Property: setStyles=0A= Applies a collection of styles to the Element.=0A= =0A= Arguments:=0A= source - an object or string containing all the styles to apply. You = cannot set the opacity using a string.=0A= =0A= Examples:=0A= >$('myElement').setStyles({=0A= > border: '1px solid #000',=0A= > width: '300px',=0A= > height: '400px'=0A= >});=0A= =0A= OR=0A= =0A= >$('myElement').setStyles('border: 1px solid #000; width: 300px; = height: 400px;');=0A= */=0A= =0A= setStyles: function(source){=0A= switch ($type(source)){=0A= case 'object':=0A= for (var property in source) this.setStyle(property, = source[property]);=0A= break;=0A= case 'string':=0A= this.style.cssText =3D source;=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: setOpacity=0A= Sets the opacity of the Element, and sets also visibility =3D=3D = "hidden" if opacity =3D=3D 0, and visibility =3D "visible" if opacity > = 0.=0A= =0A= Arguments:=0A= opacity - Accepts numbers from 0 to 1.=0A= =0A= Example:=0A= >$('myElement').setOpacity(0.5) //make it 50% transparent=0A= */=0A= =0A= setOpacity: function(opacity){=0A= if (opacity =3D=3D 0){=0A= if(this.style.visibility !=3D "hidden") this.style.visibility =3D = "hidden";=0A= } else {=0A= if(this.style.visibility !=3D "visible") this.style.visibility =3D = "visible";=0A= }=0A= if (!this.currentStyle || !this.currentStyle.hasLayout) = this.style.zoom =3D 1;=0A= if (window.ie) this.style.filter =3D "alpha(opacity=3D" + opacity*100 = + ")";=0A= this.style.opacity =3D this.opacity =3D opacity;=0A= return this;=0A= },=0A= =0A= /*=0A= Property: getStyle=0A= Returns the style of the Element given the property passed in.=0A= =0A= Arguments:=0A= property - the css style property you want to retrieve=0A= =0A= Example:=0A= >$('myElement').getStyle('width'); //returns "400px"=0A= >//but you can also use=0A= >$('myElement').getStyle('width').toInt(); //returns "400"=0A= =0A= Returns:=0A= the style as a string=0A= */=0A= =0A= getStyle: function(property){=0A= property =3D property.camelCase();=0A= var style =3D this.style[property] || false;=0A= if (!$chk(style)){=0A= if (property =3D=3D 'opacity') return $chk(this.opacity) ? = this.opacity : 1;=0A= if (['margin', 'padding'].test(property)){=0A= return [this.getStyle(property+'-top') || 0, = this.getStyle(property+'-right') || 0,=0A= this.getStyle(property+'-bottom') || 0, = this.getStyle(property+'-left') || 0].join(' ');=0A= }=0A= if (document.defaultView) style =3D = document.defaultView.getComputedStyle(this, = null).getPropertyValue(property.hyphenate());=0A= else if (this.currentStyle) style =3D this.currentStyle[property];=0A= }=0A= if (style =3D=3D 'auto' && ['height', 'width'].test(property)) return = this['offset'+property.capitalize()]+'px';=0A= return (style && property.test(/color/i) && style.test(/rgb/)) ? = style.rgbToHex() : style;=0A= },=0A= =0A= /*=0A= Property: addEvent=0A= Attaches an event listener to a DOM element.=0A= =0A= Arguments:=0A= type - the event to monitor ('click', 'load', etc) without the prefix = 'on'.=0A= fn - the function to execute=0A= =0A= Example:=0A= >$('myElement').addEvent('click', function(){alert('clicked!')});=0A= */=0A= =0A= addEvent: function(type, fn){=0A= this.events =3D this.events || {};=0A= this.events[type] =3D this.events[type] || {'keys': [], 'values': []};=0A= if (!this.events[type].keys.test(fn)){=0A= this.events[type].keys.push(fn);=0A= if (this.addEventListener){=0A= this.addEventListener((type =3D=3D 'mousewheel' && window.gecko) ? = 'DOMMouseScroll' : type, fn, false);=0A= } else {=0A= fn =3D fn.bind(this);=0A= this.attachEvent('on'+type, fn);=0A= this.events[type].values.push(fn);=0A= }=0A= }=0A= return this;=0A= },=0A= =0A= addEvents: function(source){=0A= if (source){=0A= for (var type in source) this.addEvent(type, source[type]);=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: removeEvent=0A= Works as Element.addEvent, but instead removes the previously added = event listener.=0A= */=0A= =0A= removeEvent: function(type, fn){=0A= if (this.events && this.events[type]){=0A= var pos =3D this.events[type].keys.indexOf(fn);=0A= if (pos =3D=3D -1) return this;=0A= var key =3D this.events[type].keys.splice(pos,1)[0];=0A= if (this.removeEventListener){=0A= this.removeEventListener((type =3D=3D 'mousewheel' && window.gecko) = ? 'DOMMouseScroll' : type, key, false);=0A= } else {=0A= this.detachEvent('on'+type, = this.events[type].values.splice(pos,1)[0]);=0A= }=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: removeEvents=0A= removes all events of a certain type from an element. if no argument = is passed in, removes all events.=0A= */=0A= =0A= removeEvents: function(type){=0A= if (this.events){=0A= if (type){=0A= if (this.events[type]){=0A= this.events[type].keys.each(function(fn){=0A= this.removeEvent(type, fn);=0A= }, this);=0A= this.events[type] =3D null;=0A= }=0A= } else {=0A= for (var evType in this.events) this.removeEvents(evType);=0A= this.events =3D null;=0A= }=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: fireEvent=0A= executes all events of the specified type present in the element.=0A= */=0A= =0A= fireEvent: function(type, args){=0A= if (this.events && this.events[type]){=0A= this.events[type].keys.each(function(fn){=0A= fn.bind(this, args)();=0A= }, this);=0A= }=0A= },=0A= =0A= getBrother: function(what){=0A= var el =3D this[what+'Sibling'];=0A= while ($type(el) =3D=3D 'whitespace') el =3D el[what+'Sibling'];=0A= return $(el);=0A= },=0A= =0A= /*=0A= Property: getPrevious=0A= Returns the previousSibling of the Element, excluding text nodes.=0A= =0A= Example:=0A= >$('myElement').getPrevious(); //get the previous DOM element from = myElement=0A= =0A= Returns:=0A= the sibling element or undefined if none found.=0A= */=0A= =0A= getPrevious: function(){=0A= return this.getBrother('previous');=0A= },=0A= =0A= /*=0A= Property: getNext=0A= Works as Element.getPrevious, but tries to find the nextSibling.=0A= */=0A= =0A= getNext: function(){=0A= return this.getBrother('next');=0A= },=0A= =0A= /*=0A= Property: getFirst=0A= Works as , but tries to find the firstChild.=0A= */=0A= =0A= getFirst: function(){=0A= var el =3D this.firstChild;=0A= while ($type(el) =3D=3D 'whitespace') el =3D el.nextSibling;=0A= return $(el);=0A= },=0A= =0A= /*=0A= Property: getLast=0A= Works as , but tries to find the lastChild.=0A= */=0A= =0A= getLast: function(){=0A= var el =3D this.lastChild;=0A= while ($type(el) =3D=3D 'whitespace') el =3D el.previousSibling;=0A= return $(el);=0A= },=0A= =0A= /*=0A= Property: getParent=0A= returns the $(element.parentNode)=0A= */=0A= =0A= getParent: function(){=0A= return $(this.parentNode);=0A= },=0A= =0A= /*=0A= Property: getChildren=0A= returns all the $(element.childNodes), excluding text nodes. Returns = as .=0A= */=0A= =0A= getChildren: function(){=0A= return $$(this.childNodes);=0A= },=0A= =0A= /*=0A= Property: setProperty=0A= Sets an attribute for the Element.=0A= =0A= Arguments:=0A= property - the property to assign the value passed in=0A= value - the value to assign to the property passed in=0A= =0A= Example:=0A= >$('myImage').setProperty('src', 'whatever.gif'); //myImage now points = to whatever.gif for its source=0A= */=0A= =0A= setProperty: function(property, value){=0A= switch (property){=0A= case 'class': this.className =3D value; break;=0A= case 'style': this.setStyles(value); break;=0A= case 'name': if (window.ie6){=0A= var el =3D $(document.createElement('<'+this.getTag()+' = name=3D"'+value+'" />'));=0A= $each(this.attributes, function(attribute){=0A= if (attribute.name !=3D 'name') el.setProperty(attribute.name, = attribute.value);=0A= });=0A= if (this.parentNode) this.replaceWith(el);=0A= return el;=0A= }=0A= default: this.setAttribute(property, value);=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: setProperties=0A= Sets numerous attributes for the Element.=0A= =0A= Arguments:=0A= source - an object with key/value pairs.=0A= =0A= Example:=0A= (start code)=0A= $('myElement').setProperties({=0A= src: 'whatever.gif',=0A= alt: 'whatever dude'=0A= });=0A= 3D"whatever=0A= (end)=0A= */=0A= =0A= setProperties: function(source){=0A= for (var property in source) this.setProperty(property, = source[property]);=0A= return this;=0A= },=0A= =0A= /*=0A= Property: setHTML=0A= Sets the innerHTML of the Element.=0A= =0A= Arguments:=0A= html - the new innerHTML for the element.=0A= =0A= Example:=0A= >$('myElement').setHTML(newHTML) //the innerHTML of myElement is now = =3D newHTML=0A= */=0A= =0A= setHTML: function(){=0A= this.innerHTML =3D $A(arguments).join('');=0A= return this;=0A= },=0A= =0A= /*=0A= Property: getProperty=0A= Gets the an attribute of the Element.=0A= =0A= Arguments:=0A= property - the attribute to retrieve=0A= =0A= Example:=0A= >$('myImage').getProperty('src') // returns whatever.gif=0A= =0A= Returns:=0A= the value, or an empty string=0A= */=0A= =0A= getProperty: function(property){=0A= return (property =3D=3D 'class') ? this.className : = this.getAttribute(property);=0A= },=0A= =0A= /*=0A= Property: getTag=0A= Returns the tagName of the element in lower case.=0A= =0A= Example:=0A= >$('myImage').getTag() // returns 'img'=0A= =0A= Returns:=0A= The tag name in lower case=0A= */=0A= =0A= getTag: function(){=0A= return this.tagName.toLowerCase();=0A= },=0A= =0A= /*=0A= Property: scrollTo=0A= scrolls the element to the specified coordinated (if the element has = an overflow)=0A= =0A= Arguments:=0A= x - the x coordinate=0A= y - the y coordinate=0A= =0A= Example:=0A= >$('myElement').scrollTo(0, 100)=0A= */=0A= =0A= scrollTo: function(x, y){=0A= this.scrollLeft =3D x;=0A= this.scrollTop =3D y;=0A= },=0A= =0A= /*=0A= Property: getValue=0A= Returns the value of the Element, if its tag is textarea, select or = input. no multiple select support.=0A= */=0A= =0A= getValue: function(){=0A= switch (this.getTag()){=0A= case 'select':=0A= if (this.selectedIndex !=3D -1){=0A= var opt =3D this.options[this.selectedIndex];=0A= return opt.value || opt.text;=0A= }=0A= break;=0A= case 'input': if (!(this.checked && ['checkbox', = 'radio'].test(this.type)) && !['hidden', 'text', = 'password'].test(this.type)) break;=0A= case 'textarea': return this.value;=0A= }=0A= return false;=0A= },=0A= =0A= /*=0A= Property: getSize=0A= return an Object representing the size/scroll values of the element.=0A= =0A= Example:=0A= (start code)=0A= $('myElement').getSize();=0A= (end)=0A= =0A= Returns:=0A= (start code)=0A= {=0A= 'scroll': {'x': 100, 'y': 100},=0A= 'size': {'x': 200, 'y': 400},=0A= 'scrollSize': {'x': 300, 'y': 500}=0A= }=0A= (end)=0A= */=0A= =0A= getSize: function(){=0A= return {=0A= 'scroll': {'x': this.scrollLeft, 'y': this.scrollTop},=0A= 'size': {'x': this.offsetWidth, 'y': this.offsetHeight},=0A= 'scrollSize': {'x': this.scrollWidth, 'y': this.scrollHeight}=0A= };=0A= },=0A= =0A= /*=0A= Property: getPosition=0A= Returns the real offsets of the element.=0A= =0A= Example:=0A= >$('element').getPosition();=0A= =0A= Returns:=0A= >{x: 100, y:500};=0A= */=0A= =0A= getPosition: function(overflown){=0A= overflown =3D overflown || [];=0A= var el =3D this, left =3D 0, top =3D 0;=0A= do {=0A= left +=3D el.offsetLeft || 0;=0A= top +=3D el.offsetTop || 0;=0A= el =3D el.offsetParent;=0A= } while (el);=0A= overflown.each(function(element){=0A= left -=3D element.scrollLeft || 0;=0A= top -=3D element.scrollTop || 0;=0A= });=0A= return {'x': left, 'y': top};=0A= },=0A= =0A= /*=0A= Property: getTop=0A= Returns the distance from the top of the window to the Element.=0A= */=0A= =0A= getTop: function(){=0A= return this.getPosition().y;=0A= },=0A= =0A= /*=0A= Property: getLeft=0A= Returns the distance from the left of the window to the Element.=0A= */=0A= =0A= getLeft: function(){=0A= return this.getPosition().x;=0A= },=0A= =0A= /*=0A= Property: getCoordinates=0A= Returns an object with width, height, left, right, top, and bottom, = representing the values of the Element=0A= =0A= Example:=0A= (start code)=0A= var myValues =3D $('myElement').getCoordinates();=0A= (end)=0A= =0A= Returns:=0A= (start code)=0A= {=0A= width: 200,=0A= height: 300,=0A= left: 100,=0A= top: 50,=0A= right: 300,=0A= bottom: 350=0A= }=0A= (end)=0A= */=0A= =0A= getCoordinates: function(overflown){=0A= var position =3D this.getPosition(overflown);=0A= var obj =3D {=0A= 'width': this.offsetWidth,=0A= 'height': this.offsetHeight,=0A= 'left': position.x,=0A= 'top': position.y=0A= };=0A= obj.right =3D obj.left + obj.width;=0A= obj.bottom =3D obj.top + obj.height;=0A= return obj;=0A= }=0A= =0A= });=0A= =0A= window.addEvent =3D document.addEvent =3D Element.prototype.addEvent;=0A= window.removeEvent =3D document.removeEvent =3D = Element.prototype.removeEvent;=0A= window.removeEvents =3D document.removeEvents =3D = Element.prototype.removeEvents;=0A= =0A= var Garbage =3D {=0A= =0A= elements: [],=0A= =0A= collect: function(element){=0A= Garbage.elements.push(element);=0A= },=0A= =0A= trash: function(){=0A= Garbage.collect(window);=0A= Garbage.collect(document);=0A= Garbage.elements.each(function(el){=0A= el.removeEvents();=0A= for (var p in Element.prototype) el[p] =3D null;=0A= el.extend =3D null;=0A= });=0A= }=0A= =0A= };=0A= =0A= window.addEvent('unload', Garbage.trash);=0A= =0A= /*=0A= Script: Common.js=0A= Contains common implementations for custom classes. In Mootools is = implemented in , and .=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= /*=0A= Class: Chain=0A= An "Utility" Class. Its methods can be implemented with = into any .=0A= Currently implemented in , and . In for = example, is used to execute a list of function, one after another, once = the effect is completed.=0A= The functions will not be fired all togheter, but one every completion, = to create custom complex animations.=0A= =0A= Example:=0A= (start code)=0A= var myFx =3D new Fx.Style('element', 'opacity');=0A= =0A= myFx.start(1,0).chain(function(){=0A= myFx.start(0,1);=0A= }).chain(function(){=0A= myFx.start(1,0);=0A= }).chain(function(){=0A= myFx.start(0,1);=0A= });=0A= //the element will appear and disappear three times=0A= (end)=0A= */=0A= =0A= var Chain =3D new Class({=0A= =0A= /*=0A= Property: chain=0A= adds a function to the Chain instance stack.=0A= =0A= Arguments:=0A= fn - the function to append.=0A= */=0A= =0A= chain: function(fn){=0A= this.chains =3D this.chains || [];=0A= this.chains.push(fn);=0A= return this;=0A= },=0A= =0A= /*=0A= Property: callChain=0A= Executes the first function of the Chain instance stack, then removes = it. The first function will then become the second.=0A= */=0A= =0A= callChain: function(){=0A= if (this.chains && this.chains.length) this.chains.shift().delay(10, = this);=0A= },=0A= =0A= /*=0A= Property: clearChain=0A= Clears the stack of a Chain instance.=0A= */=0A= =0A= clearChain: function(){=0A= this.chains =3D [];=0A= }=0A= =0A= });=0A= =0A= /*=0A= Class: Events=0A= An "Utility" Class. Its methods can be implemented with = into any .=0A= In Class, for example, is used to give the possibility add = any number of functions to the Effects events, like onComplete, onStart, = onCancel=0A= =0A= Example:=0A= (start code)=0A= var myFx =3D new Fx.Style('element', 'opacity').addEvent('onComplete', = function(){=0A= alert('the effect is completed');=0A= }).addEvent('onComplete', function(){=0A= alert('I told you the effect is completed');=0A= });=0A= =0A= myFx.start(0,1);=0A= //upon completion it will display the 2 alerts, in order.=0A= (end)=0A= */=0A= =0A= var Events =3D new Class({=0A= =0A= /*=0A= Property: addEvent=0A= adds an event to the stack of events of the Class instance.=0A= */=0A= =0A= addEvent: function(type, fn){=0A= if (fn !=3D Class.empty){=0A= this.events =3D this.events || {};=0A= this.events[type] =3D this.events[type] || [];=0A= if (!this.events[type].test(fn)) this.events[type].push(fn);=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: fireEvent=0A= fires all events of the specified type in the Class instance.=0A= */=0A= =0A= fireEvent: function(type, args, delay){=0A= if (this.events && this.events[type]){=0A= this.events[type].each(function(fn){=0A= fn.create({'bind': this, 'delay': delay, 'arguments': args})();=0A= }, this);=0A= }=0A= return this;=0A= },=0A= =0A= /*=0A= Property: removeEvent=0A= removes an event from the stack of events of the Class instance.=0A= */=0A= =0A= removeEvent: function(type, fn){=0A= if (this.events && this.events[type]) this.events[type].remove(fn);=0A= return this;=0A= }=0A= =0A= });=0A= =0A= /*=0A= Class: Options=0A= An "Utility" Class. Its methods can be implemented with = into any .=0A= Used to automate the options settings, also adding Class when = the option begins with on.=0A= */=0A= =0A= var Options =3D new Class({=0A= =0A= /*=0A= Property: setOptions=0A= sets this.options=0A= =0A= Arguments:=0A= defaults - the default set of options=0A= options - the user entered options. can be empty too.=0A= =0A= Note:=0A= if your Class has implemented, every option beginning with = on, followed by a capital letter (onComplete) becomes an Class instance = event.=0A= */=0A= =0A= setOptions: function(defaults, options){=0A= this.options =3D Object.extend(defaults, options);=0A= if (this.addEvent){=0A= for (var option in this.options){=0A= if (($type(this.options[option]) =3D=3D 'function') && = option.test(/^on[A-Z]/)) this.addEvent(option, this.options[option]);=0A= }=0A= }=0A= return this;=0A= }=0A= =0A= });=0A= =0A= /*=0A= Class: Group=0A= An "Utility" Class.=0A= */=0A= =0A= var Group =3D new Class({=0A= =0A= initialize: function(){=0A= this.instances =3D $A(arguments);=0A= this.events =3D {};=0A= this.checker =3D {};=0A= },=0A= =0A= addEvent: function(type, fn){=0A= this.checker[type] =3D this.checker[type] || {};=0A= this.events[type] =3D this.events[type] || [];=0A= if (this.events[type].test(fn)) return false;=0A= else this.events[type].push(fn);=0A= this.instances.each(function(instance, i){=0A= instance.addEvent(type, this.check.bind(this, [type, instance, i]));=0A= }, this);=0A= return this;=0A= },=0A= =0A= check: function(type, instance, i){=0A= this.checker[type][i] =3D true;=0A= var every =3D this.instances.every(function(current, j){=0A= return this.checker[type][j] || false;=0A= }, this);=0A= if (!every) return;=0A= this.instances.each(function(current, j){=0A= this.checker[type][j] =3D false;=0A= }, this);=0A= this.events[type].each(function(event){=0A= event.call(this, this.instances, instance);=0A= }, this);=0A= }=0A= =0A= });=0A= =0A= /*=0A= Script: Fx.Base.js=0A= Contains and two Transitions.=0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= var Fx =3D {};=0A= =0A= /*=0A= Class: Fx.Base=0A= Base class for the Mootools Effects (Moo.Fx) library.=0A= =0A= Options:=0A= onStart - the function to execute as the effect begins; nothing = () by default.=0A= onComplete - the function to execute after the effect has processed; = nothing () by default.=0A= transition - the equation to use for the effect see ; = default is =0A= duration - the duration of the effect in ms; 500 is the default.=0A= unit - the unit is 'px' by default (other values include things like = 'em' for fonts or '%').=0A= wait - boolean: to wait or not to wait for a current transition to end = before running another of the same instance. defaults to true.=0A= fps - the frames per second for the transition; default is 30=0A= */=0A= =0A= Fx.Base =3D new Class({=0A= =0A= getOptions: function(){=0A= return {=0A= onStart: Class.empty,=0A= onComplete: Class.empty,=0A= onCancel: Class.empty,=0A= transition: Fx.Transitions.sineInOut,=0A= duration: 500,=0A= unit: 'px',=0A= wait: true,=0A= fps: 50=0A= };=0A= },=0A= =0A= initialize: function(options){=0A= this.element =3D this.element || null;=0A= this.setOptions(this.getOptions(), options);=0A= if (this.options.initialize) this.options.initialize.call(this);=0A= },=0A= =0A= step: function(){=0A= var time =3D new Date().getTime();=0A= if (time < this.time + this.options.duration){=0A= this.cTime =3D time - this.time;=0A= this.setNow();=0A= this.increase();=0A= } else {=0A= this.stop(true);=0A= this.now =3D this.to;=0A= this.increase();=0A= this.fireEvent('onComplete', this.element, 10);=0A= this.callChain();=0A= }=0A= },=0A= =0A= /*=0A= Property: set=0A= Immediately sets the value with no transition.=0A= =0A= Arguments:=0A= to - the point to jump to=0A= =0A= Example:=0A= >var myFx =3D new Fx.Style('myElement', 'opacity').set(0); //will make = it immediately transparent=0A= */=0A= =0A= set: function(to){=0A= this.now =3D to;=0A= this.increase();=0A= return this;=0A= },=0A= =0A= setNow: function(){=0A= this.now =3D this.compute(this.from, this.to);=0A= },=0A= =0A= compute: function(from, to){=0A= return this.options.transition(this.cTime, from, (to - from), = this.options.duration);=0A= },=0A= =0A= /*=0A= Property: start=0A= Executes an effect from one position to the other.=0A= =0A= Arguments:=0A= from - integer: staring value=0A= to - integer: the ending value=0A= =0A= Examples:=0A= >var myFx =3D new Fx.Style('myElement', 'opacity').start(0,1); = //display a transition from transparent to opaque.=0A= */=0A= =0A= start: function(from, to){=0A= if (!this.options.wait) this.stop();=0A= else if (this.timer) return this;=0A= this.from =3D from;=0A= this.to =3D to;=0A= this.time =3D new Date().getTime();=0A= this.timer =3D this.step.periodical(Math.round(1000/this.options.fps), = this);=0A= this.fireEvent('onStart', this.element);=0A= return this;=0A= },=0A= =0A= /*=0A= Property: stop=0A= Stops the transition.=0A= */=0A= =0A= stop: function(end){=0A= if (!this.timer) return this;=0A= this.timer =3D $clear(this.timer);=0A= if (!end) this.fireEvent('onCancel', this.element);=0A= return this;=0A= },=0A= =0A= //compat=0A= custom: function(from, to){return this.start(from, to)},=0A= clearTimer: function(end){return this.stop(end)}=0A= =0A= });=0A= =0A= Fx.Base.implement(new Chain);=0A= Fx.Base.implement(new Events);=0A= Fx.Base.implement(new Options);=0A= =0A= /*=0A= Class: Fx.Transitions=0A= A collection of transition equations for use with the Class.=0A= =0A= See Also:=0A= for a whole bunch of transitions.=0A= =0A= Credits:=0A= Easing Equations, (c) 2003 Robert Penner = (http://www.robertpenner.com/easing/), Open Source BSD License.=0A= */=0A= =0A= Fx.Transitions =3D {=0A= =0A= /* Property: linear */=0A= linear: function(t, b, c, d){=0A= return c*t/d + b;=0A= },=0A= =0A= /* Property: sineInOut */=0A= sineInOut: function(t, b, c, d){=0A= return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;=0A= }=0A= =0A= };=0A= =0A= /*=0A= Script: Fx.CSS.js=0A= Css parsing class for effects. Required by , , = . No documentation needed, as its used internally.=0A= =0A= Authors:=0A= - Christophe Beyls, =0A= - Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= Fx.CSS =3D {=0A= =0A= select: function(property, to){=0A= if (property.test(/color/i)) return this.Color;=0A= if (to.test && to.test(' ')) return this.Multi;=0A= return this.Single;=0A= },=0A= =0A= parse: function(el, property, fromTo){=0A= if (!fromTo.push) fromTo =3D [fromTo];=0A= var from =3D fromTo[0], to =3D fromTo[1];=0A= if (!to && to !=3D 0){=0A= to =3D from;=0A= from =3D el.getStyle(property);=0A= }=0A= var css =3D this.select(property, to);=0A= return {from: css.parse(from), to: css.parse(to), css: css};=0A= }=0A= =0A= };=0A= =0A= Fx.CSS.Single =3D {=0A= =0A= parse: function(value){=0A= return parseFloat(value);=0A= },=0A= =0A= getNow: function(from, to, fx){=0A= return fx.compute(from, to);=0A= },=0A= =0A= getValue: function(value, unit){=0A= return value+unit;=0A= }=0A= =0A= };=0A= =0A= Fx.CSS.Multi =3D {=0A= =0A= parse: function(value){=0A= return value.push ? value : value.split(' ').map(function(v){=0A= return parseFloat(v);=0A= });=0A= },=0A= =0A= getNow: function(from, to, fx){=0A= var now =3D [];=0A= for (var i =3D 0; i < from.length; i++) now[i] =3D fx.compute(from[i], = to[i]);=0A= return now;=0A= },=0A= =0A= getValue: function(value, unit){=0A= return value.join(unit+' ')+unit;=0A= }=0A= =0A= };=0A= =0A= Fx.CSS.Color =3D {=0A= =0A= parse: function(value){=0A= return value.push ? value : value.hexToRgb(true);=0A= },=0A= =0A= getNow: function(from, to, fx){=0A= var now =3D [];=0A= for (var i =3D 0; i < from.length; i++) now[i] =3D = Math.round(fx.compute(from[i], to[i]));=0A= return now;=0A= },=0A= =0A= getValue: function(value){=0A= return 'rgb('+value.join(',')+')';=0A= }=0A= =0A= };=0A= =0A= /*=0A= Script: Fx.Elements.js=0A= Contains =0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= /*=0A= Class: Fx.Elements=0A= Fx.Elements allows you to apply any number of styles transitions to a = selection of elements. Includes colors (must be in hex format).=0A= =0A= Arguments:=0A= elements - a collection of elements the effects will be applied to.=0A= options - same as options.=0A= */=0A= =0A= Fx.Elements =3D Fx.Base.extend({=0A= =0A= initialize: function(elements, options){=0A= this.elements =3D $$(elements);=0A= this.parent(options);=0A= },=0A= =0A= setNow: function(){=0A= for (var i in this.from){=0A= var iFrom =3D this.from[i], iTo =3D this.to[i], iCss =3D this.css[i], = iNow =3D this.now[i] =3D {};=0A= for (var p in iFrom) iNow[p] =3D iCss[p].getNow(iFrom[p], iTo[p], = this);=0A= }=0A= },=0A= =0A= set: function(to){=0A= var parsed =3D {};=0A= this.css =3D {};=0A= for (var i in to){=0A= var iTo =3D to[i], iCss =3D this.css[i] =3D {}, iParsed =3D parsed[i] = =3D {};=0A= for (var p in iTo){=0A= iCss[p] =3D Fx.CSS.select(p, iTo[p]);=0A= iParsed[p] =3D iCss[p].parse(iTo[p]);=0A= }=0A= }=0A= return this.parent(parsed);=0A= },=0A= =0A= /*=0A= Property: start=0A= Applies the passed in style transitions to each object named (see = example). Each item in the collection is refered to as a numerical = string ("1" for instance). The first item is "0", the second "1", etc.=0A= =0A= Example:=0A= (start code)=0A= var myElementsEffects =3D new Fx.Elements($$('a'));=0A= myElementsEffects.start({=0A= '0': { //let's change the first element's opacity and width=0A= 'opacity': [0,1],=0A= 'width': [100,200]=0A= },=0A= '1': { //and the second one's opacity=0A= 'opacity': [0.2, 0.5]=0A= }=0A= });=0A= (end)=0A= */=0A= =0A= start: function(obj){=0A= if (this.timer && this.options.wait) return this;=0A= this.now =3D {};=0A= this.css =3D {};=0A= var from =3D {}, to =3D {};=0A= for (var i in obj){=0A= var iProps =3D obj[i], iFrom =3D from[i] =3D {}, iTo =3D to[i] =3D = {}, iCss =3D this.css[i] =3D {};=0A= for (var p in iProps){=0A= var parsed =3D Fx.CSS.parse(this.elements[i], p, iProps[p]);=0A= iFrom[p] =3D parsed.from;=0A= iTo[p] =3D parsed.to;=0A= iCss[p] =3D parsed.css;=0A= }=0A= }=0A= return this.parent(from, to);=0A= },=0A= =0A= increase: function(){=0A= for (var i in this.now){=0A= var iNow =3D this.now[i], iCss =3D this.css[i];=0A= for (var p in iNow) this.elements[i].setStyle(p, = iCss[p].getValue(iNow[p], this.options.unit));=0A= }=0A= }=0A= =0A= });=0A= =0A= /*=0A= Script: Accordion.js=0A= Contains =0A= =0A= Author:=0A= Valerio Proietti, =0A= =0A= License:=0A= MIT-style license.=0A= */=0A= =0A= /*=0A= Class: Accordion=0A= The Accordion class creates a group of elements that are toggled when = their handles are clicked. When one elements toggles in, the others = toggles back.=0A= =0A= Arguments:=0A= elements - required, a collection of elements the transitions will be = applied to.=0A= togglers - required, a collection of elements, the elements handlers = that will be clickable.=0A= options - optional, see options below, and options.=0A= =0A= Options:=0A= show - integer, the Index of the element to show at start.=0A= display - integer, the Index of the element to show at start (with a = transition). defaults to 0.=0A= fixedHeight - integer, if you want the elements to have a fixed height. = defaults to false.=0A= fixedWidth - integer, if you want the elements to have a fixed width. = defaults to false.=0A= onActive - function to execute when an element starts to show=0A= onBackground - function to execute when an element starts to hide=0A= height - boolean, will add a height transition to the accordion if = true. defaults to true.=0A= opacity - boolean, will add an opacity transition to the accordion if = true. defaults to true.=0A= width - boolean, will add a width transition to the accordion if true. = defaults to false, css mastery is required to make this work!=0A= alwaysHide - boolean, will allow to hide all elements if true, instead = of always keeping one element shown. defaults to false.=0A= */=0A= =0A= var Accordion =3D Fx.Elements.extend({=0A= =0A= getExtended: function(){=0A= return {=0A= onActive: Class.empty,=0A= onBackground: Class.empty,=0A= display: 0,=0A= show: false,=0A= height: true,=0A= width: false,=0A= opacity: true,=0A= fixedHeight: false,=0A= fixedWidth: false,=0A= wait: false,=0A= alwaysHide: false=0A= };=0A= },=0A= =0A= initialize: function(togglers, elements, options){=0A= this.setOptions(this.getExtended(), options);=0A= this.previous =3D -1;=0A= if (this.options.alwaysHide) this.options.wait =3D true;=0A= if ($chk(this.options.show)){=0A= this.options.display =3D false;=0A= this.previous =3D this.options.show;=0A= }=0A= if (this.options.start){=0A= this.options.display =3D false;=0A= this.options.show =3D false;=0A= }=0A= this.togglers =3D $$(togglers);=0A= this.elements =3D $$(elements);=0A= this.togglers.each(function(tog, i){=0A= tog.addEvent('click', this.display.bind(this, i));=0A= }, this);=0A= this.elements.each(function(el, i){=0A= el.fullOpacity =3D 1;=0A= if (this.options.fixedWidth) el.fullWidth =3D this.options.fixedWidth;=0A= if (this.options.fixedHeight) el.fullHeight =3D = this.options.fixedHeight;=0A= el.setStyle('overflow', 'hidden');=0A= }, this);=0A= this.effects =3D {};=0A= if (this.options.opacity) this.effects.opacity =3D 'fullOpacity';=0A= if (this.options.width) this.effects.width =3D this.options.fixedWidth = ? 'fullWidth' : 'offsetWidth';=0A= if (this.options.height) this.effects.height =3D = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';=0A= this.elements.each(function(el, i){=0A= if (this.options.show =3D=3D=3D i) this.fireEvent('onActive', = [this.togglers[i], el]);=0A= else for (var fx in this.effects) el.setStyle(fx, 0);=0A= }, this);=0A= this.parent(this.elements, this.options);=0A= if ($chk(this.options.display)) this.display(this.options.display);=0A= },=0A= =0A= /*=0A= Property: display=0A= Shows a specific section and hides all others. Useful when triggering = an accordion from outside.=0A= =0A= Arguments:=0A= index - integer, the index of the item to show.=0A= */=0A= =0A= display: function(index){=0A= if ((this.timer && this.options.wait) || (index =3D=3D=3D = this.previous && !this.options.alwaysHide)) return this;=0A= this.previous =3D index;=0A= var obj =3D {};=0A= this.elements.each(function(el, i){=0A= obj[i] =3D {};=0A= if ((i !=3D index) || (this.options.alwaysHide && (el.offsetHeight > = 0))){=0A= this.fireEvent('onBackground', [this.togglers[i], el]);=0A= for (var fx in this.effects) obj[i][fx] =3D 0;=0A= } else {=0A= this.fireEvent('onActive', [this.togglers[i], el]);=0A= for (var fx in this.effects) obj[i][fx] =3D el[this.effects[fx]];=0A= }=0A= }, this);=0A= return this.start(obj);=0A= },=0A= =0A= showThisHideOpen: function(index){return this.display(index)}=0A= =0A= });=0A= =0A= Fx.Accordion =3D Accordion; ------=_NextPart_000_0000_01C89F56.F0921B10 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.mandhlive.com/news/internationalnews/codebase/validate.js //datatypes are: - //text-p / text-np / date / number / currency =09 //parameters are: - //field //fieldname //data type //maxlength //required var dtCh=3D "/"; var minYear=3D1900; var maxYear=3D2100; function isInteger(s){ var i; for (i =3D 0; i < s.length; i++){ =20 // Check that current character is number. var c =3D s.charAt(i); if ((c < "0") || (c > "9")) return false; } // All characters are numbers. return true; } function stripCharsInBag(s, bag){ var i; var returnString =3D ""; // Search through string's characters one by one. // If character is not in bag, append to returnString. for (i =3D 0; i < s.length; i++){ =20 var c =3D s.charAt(i); if (bag.indexOf(c) =3D=3D -1) returnString +=3D c; } return returnString; } function daysInFebruary (year){ // February has 29 days in any year evenly divisible by four, // EXCEPT for centurial years which are not also divisible by 400. return (((year % 4 =3D=3D 0) && ( (!(year % 100 =3D=3D 0)) || (year = % 400 =3D=3D 0))) ? 29 : 28 ); } function DaysArray(n) { for (var i =3D 1; i <=3D n; i++) { this[i] =3D 31 if (i=3D=3D4 || i=3D=3D6 || i=3D=3D9 || i=3D=3D11) {this[i] =3D 30} if (i=3D=3D2) {this[i] =3D 29} }=20 return this } function isDate(dtStr,fieldname) { var daysInMonth =3D DaysArray(12) var pos1=3DdtStr.indexOf(dtCh) var pos2=3DdtStr.indexOf(dtCh,pos1+1) var strDay=3DdtStr.substring(0,pos1) var strMonth=3DdtStr.substring(pos1+1,pos2) var strYear=3DdtStr.substring(pos2+1) strYr=3DstrYear if (strDay.charAt(0)=3D=3D"0" && strDay.length>1) = strDay=3DstrDay.substring(1) if (strMonth.charAt(0)=3D=3D"0" && strMonth.length>1) = strMonth=3DstrMonth.substring(1) for (var i =3D 1; i <=3D 3; i++) { if (strYr.charAt(0)=3D=3D"0" && strYr.length>1) = strYr=3DstrYr.substring(1) } month=3DparseInt(strMonth) day=3DparseInt(strDay) year=3DparseInt(strYr) =09 if (pos1=3D=3D-1 || pos2=3D=3D-1){ alert("The date format in the " + fieldname + " field should be : = dd/mm/yyyy") return false } if (strDay.length<1 || day<1 || day>31 || (month=3D=3D2 && = day>daysInFebruary(year)) || day > daysInMonth[month]){ alert("Please enter a valid day in the " + fieldname + " field.") return false } if (strMonth.length<1 || month<1 || month>12){ alert("Please enter a valid month in the " + fieldname + " field.") return false } if (strYear.length !=3D 4 || year=3D=3D0 || yearmaxYear){ alert("Please enter a valid 4 digit year between "+minYear+" and = "+maxYear + " in the " + fieldname + " field.") return false } if (dtStr.indexOf(dtCh,pos2+1)!=3D-1 || = isInteger(stripCharsInBag(dtStr, dtCh))=3D=3Dfalse){ alert("Please enter a valid date in the " + fieldname + " field.") return false } return true } function validatedate(objName,fieldname) { var dt=3DobjName if (isDate(dt.value,fieldname)=3D=3Dfalse) { objName.style.backgroundColor=3D"red"; return false; } else { objName.style.backgroundColor=3D""; } } =20 function chkcontents(objName,fieldname,symbols) { var checkOK =3D symbols; var checkStr =3D objName; var allValid =3D true; var decPoints =3D 0; var allNum =3D ""; for (i =3D 0; i < checkStr.value.length; i++) { ch =3D checkStr.value.charAt(i); for (j =3D 0; j < checkOK.length; j++) if (ch =3D=3D checkOK.charAt(j)) break; if (j =3D=3D checkOK.length) { allValid =3D false; break; } if (ch !=3D ",") allNum +=3D ch; } if (!allValid) { alertsay =3D "Please enter only the values \"" alertsay =3D alertsay + checkOK + "\" in the " + fieldname + " field." alert(alertsay); return (false); } } function validate_field(fieldobj,fieldname,datatype,fieldlen,isrequired) { //alert(fieldlen); //Function to validate an individual field=09 if (fieldobj.length>fieldlen) { alert(fieldname + " value exceeds maximum field length"); fieldobj.style.backgroundColor=3D"red"; return false; } else { switch(datatype) { =09 case "text-p": //text with punctuation - we don't care whats in it //just check for required value if(isrequired=3D=3D"True" && fieldobj.value=3D=3D"") { alert("No value entered in the " + fieldname + " field"); fieldobj.style.backgroundColor=3D"red"; return false; } else { fieldobj.style.backgroundColor=3D""; } break =09 =09 case "text-np": //text without punctuation - call chkcontents function //then check for required value if (chkcontents(fieldobj,fieldname,"ABCDEFGHIJKLMNOPQRSTUVWXYZ = abcdefghijklmnopqrstuvwxyz 1234567890") =3D=3D false) { fieldobj.style.backgroundColor=3D"red"; return false; } else { if(isrequired=3D=3D"True" && fieldobj.value=3D=3D"") { alert("No value entered in the " + fieldname + " field"); fieldobj.style.backgroundColor=3D"red"; return false; } else { fieldobj.style.backgroundColor=3D""; } } break =09 =09 case "date": if(isrequired=3D=3D"True") { if(validatedate(fieldobj,fieldname) =3D=3D false) { return false } } =09 if(isrequired=3D=3D"False" && fieldobj.value!=3D"") { if(validatedate(fieldobj,fieldname) =3D=3D false) { return false } } =09 if(isrequired=3D=3D"False" && fieldobj.value=3D=3D"") { fieldobj.style.backgroundColor=3D""; return true } break =09 =09 case "number": //For number fields, check the datatype and the required value if (chkcontents(fieldobj,fieldname,"0123456789.") =3D=3D false) { fieldobj.style.backgroundColor=3D"red"; return false; } else { if(isrequired=3D=3D"True" && fieldobj.value=3D=3D"") { alert("No value entered in the " + fieldname + " field"); fieldobj.style.backgroundColor=3D"red"; return false; } else { fieldobj.style.backgroundColor=3D""; } } break =09 =09 case "currency": //For number fields, check the datatype and the required value if (chkcontents(fieldobj,fieldname,"0123456789<%=3Dchr(163)%>-.,") = =3D=3D false) { fieldobj.style.backgroundColor=3D"red"; return false; } else { if(isrequired=3D=3D"True" && fieldobj.value=3D=3D"") { alert("No value entered in the " + fieldname + " field"); fieldobj.style.backgroundColor=3D"red"; return false; } else { fieldobj.style.backgroundColor=3D""; } } break }=09 } =09 } function validate_required(field,alerttxt) { with (field) { if (value=3D=3Dnull||value=3D=3D""){ alert(alerttxt); return false } else{ return true } } } function fieldIsPresent(thisform) { with (thisform) { if (validate_required(name,"You must provide a = name!")=3D=3Dfalse){ name.focus(); return false } if (validate_required(email,"You must provide an email = address!")=3D=3Dfalse){ email.focus(); return false } } } ------=_NextPart_000_0000_01C89F56.F0921B10--