From: <Saved by Windows Internet Explorer 8>
Subject: View Article
Date: Fri, 4 Feb 2011 10:47:00 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01CBC458.D9DC4A10"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3664

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/templates//images/newsmonitor.jpg

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
0pRpSjSlGlKNKUaUo0pRpSjSlGlK/9k=

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/templates/css/format.css

BODY {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-FAMILY: Arial, Helvetica, sans-serif; =
FONT-SIZE: 12px; PADDING-TOP: 0px
}
A {
	COLOR: #fe6402; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #3d5aa6; TEXT-DECORATION: underline
}
A:visited {
	COLOR: #3d5aa6; TEXT-DECORATION: underline
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
H6 {
	MARGIN: 7px 0px 0px 7px; COLOR: #666; FONT-SIZE: 12px; FONT-WEIGHT: =
bold
}
TD {
	VERTICAL-ALIGN: top
}
H1 {
	COLOR: #f60; FONT-SIZE: 12px; FONT-WEIGHT: bold
}
#header_links {
	BACKGROUND-COLOR: #ff4900; WIDTH: 936px; HEIGHT: 23px; COLOR: white; =
FONT-SIZE: 10px
}
#header_links A {
	FLOAT: right
}
#header_links A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: =
#fff; TEXT-DECORATION: none; PADDING-TOP: 0px
}
#left_content_area H1 {
	PADDING-BOTTOM: 8px; MARGIN: 0px 0px 0px 5px; PADDING-LEFT: 9px; =
PADDING-RIGHT: 0px; BACKGROUND: #e9e9e9; COLOR: #666; FONT-SIZE: 14px; =
PADDING-TOP: 8px
}
.three_column H1 {
	PADDING-BOTTOM: 8px; MARGIN: 0px 0px 0px 5px; PADDING-LEFT: 9px; =
PADDING-RIGHT: 0px; BACKGROUND: #e9e9e9; COLOR: #666; FONT-SIZE: 14px; =
PADDING-TOP: 8px
}
#left_content_area A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#fe6402; FONT-SIZE: 14px; FONT-WEIGHT: bold; TEXT-DECORATION: none; =
PADDING-TOP: 10px
}
.content_area1 P {
	MARGIN: 5px 0px 18px; COLOR: #666; FONT-SIZE: 12px
}
.indent {
	MARGIN-TOP: 5px; MARGIN-LEFT: 12px
}
.nav_button {
	TEXT-ALIGN: center; WIDTH: 127px; FLOAT: left
}
.nav_button H3 {
	TEXT-ALIGN: center; MARGIN: 5px 0px 0px; WIDTH: 119px; COLOR: #111; =
FONT-SIZE: 11px; FONT-WEIGHT: bold
}
#content_area1 {
	PADDING-BOTTOM: 31px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#666; PADDING-TOP: 8px
}
#content_area1 P {
	COLOR: #666; FONT-SIZE: 10px
}
#more_news H3 A {
	MARGIN-TOP: 5px; COLOR: #fe6402; FONT-SIZE: 14px; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
#week_in_review {
	MARGIN-TOP: 5px; COLOR: #fe6402; FONT-SIZE: 14px; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
#financial_ind TR TD {
	MARGIN-TOP: 5px; COLOR: #960000; FONT-SIZE: 11px; TEXT-DECORATION: none
}
#more_news H1 {
	PADDING-BOTTOM: 7px; BACKGROUND-COLOR: #f1f1f1; PADDING-LEFT: 9px; =
PADDING-RIGHT: 0px; MARGIN-BOTTOM: 0px; COLOR: #666; FONT-SIZE: 14px; =
FONT-WEIGHT: bold; PADDING-TOP: 5px
}
#more_news .blurb {
	COLOR: #666
}
#more_news H3 {
	MARGIN: 5px 0px
}
.fin_heading {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #f1f1f1; PADDING-LEFT: 15px; =
WIDTH: 351px; PADDING-RIGHT: 0px; HEIGHT: 24px; COLOR: #676767; =
FONT-SIZE: 14px; FONT-WEIGHT: bold; PADDING-TOP: 5px
}
#big_content {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 70px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; COLOR: #000; FONT-SIZE: 12px; PADDING-TOP: 13px
}
#search_box {
	MARGIN: 10px
}
#search_box H1 {
	COLOR: #666; FONT-SIZE: 10px; FONT-WEIGHT: bold
}
#search_box A {
	COLOR: #333; FONT-SIZE: 10px; TEXT-DECORATION: underline
}
#search_box A:hover {
	TEXT-DECORATION: none
}
#footer_links {
	TEXT-ALIGN: left; PADDING-BOTTOM: 9px; PADDING-LEFT: 12px; WIDTH: =
924px; PADDING-RIGHT: 0px; BACKGROUND: =
url(/newsmonitor/applications/newsmonitor/templates/images/footer_back.jp=
g) repeat-y center 50%; COLOR: white; CLEAR: both; FONT-SIZE: 10px; =
PADDING-TOP: 6px
}
#footer_links A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: =
#fff; TEXT-DECORATION: none; PADDING-TOP: 0px
}
.big_button {
	WIDTH: 179px; PADDING-RIGHT: 5px; FLOAT: left
}
.big_button IMG {
	TEXT-ALIGN: center; WIDTH: 179px
}
.big_button P {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
FONT-SIZE: 12px; PADDING-TOP: 0px
}
.forgot_password {
	PADDING-LEFT: 3px; COLOR: black; FONT-SIZE: 10px
}
.login_headings {
	COLOR: #666; FONT-SIZE: 11px; FONT-WEIGHT: bold
}
.login_fields {
	BORDER-BOTTOM: #cccecd 1px solid; BORDER-LEFT: #cccecd 1px solid; =
PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; WIDTH: 120px; PADDING-RIGHT: =
4px; FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 12px; =
BORDER-TOP: #cccecd 1px solid; BORDER-RIGHT: #cccecd 1px solid; =
PADDING-TOP: 4px
}
#breadcrumb {
	MARGIN: 17px 0px 0px 14px; WIDTH: 500px; COLOR: #999; FONT-SIZE: 10px
}
#breadcrumb A {
	MARGIN: 17px 0px 0px; COLOR: #999; FONT-SIZE: 10px; TEXT-DECORATION: =
none
}
#main_heading {
	PADDING-BOTTOM: 12px; BACKGROUND-COLOR: #ebebeb; MARGIN: 10px 15px; =
PADDING-LEFT: 12px; WIDTH: 882px; PADDING-RIGHT: 12px; COLOR: #666; =
FONT-SIZE: 14px; FONT-WEIGHT: bold; PADDING-TOP: 12px
}
#our_services_main_heading {
	PADDING-BOTTOM: 12px; BACKGROUND-COLOR: #ebebeb; MARGIN: 10px 15px; =
PADDING-LEFT: 12px; WIDTH: 690px; PADDING-RIGHT: 12px; COLOR: #666; =
FONT-SIZE: 14px; FONT-WEIGHT: bold; PADDING-TOP: 12px
}
#our_services_left {
	PADDING-BOTTOM: 20px; BACKGROUND-COLOR: #ebebeb; MARGIN: 0px 0px 0px =
14px; PADDING-LEFT: 11px; WIDTH: 149px; PADDING-RIGHT: 16px; FLOAT: =
left; HEIGHT: 135px; PADDING-TOP: 16px
}
#our_services_right {
	FLOAT: left
}
#news_list A.heading {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#fe6402; FONT-SIZE: 14px; FONT-WEIGHT: bold; TEXT-DECORATION: none; =
PADDING-TOP: 10px
}
#news_list P {
	COLOR: #666; FONT-SIZE: 12px
}
#news_list A.read_more {
	COLOR: #fe6402; TEXT-DECORATION: underline
}
#main_template_content {
	MARGIN: 10px 15px; WIDTH: 906px
}
.form_capture_data INPUT {
	WIDTH: 300px
}
#our_main_template_content {
	MARGIN: 10px 15px; WIDTH: 690px
}
A.back {
	COLOR: #fe6402; TEXT-DECORATION: none
}
#sub_nav_parent_title A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#fe6402; FONT-SIZE: 14px; FONT-WEIGHT: bold; TEXT-DECORATION: none; =
PADDING-TOP: 10px
}
TD.field_padding {
	PADDING-BOTTOM: 3px
}
.single_result {
	BORDER-BOTTOM: #999 1px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; PADDING-TOP: 5px
}
.result_date {
	WIDTH: 80px; FLOAT: left; COLOR: #666
}
.result_publication {
	WIDTH: 210px; FLOAT: left; COLOR: #666; FONT-WEIGHT: bold
}
.result_headline {
	WIDTH: 465px; FLOAT: left
}
.result_headline H1 {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; FONT-SIZE: 14px; TEXT-DECORATION: =
none
}
.email_head {
	BORDER-BOTTOM: #ccc 1px solid; COLOR: #676767
}
.A1 {
	TEXT-ALIGN: right; WIDTH: 100px; PADDING-RIGHT: 10px; COLOR: #666; =
FONT-SIZE: 10px
}
.B1 {
	COLOR: black; FONT-SIZE: 11px
}
#home A {
	COLOR: #666; FONT-SIZE: 13px; FONT-WEIGHT: bold; TEXT-DECORATION: none; =
PADDING-TOP: 5px
}
TD {
	FONT-SIZE: 12px
}
#result_bulk_functions {
	PADDING-BOTTOM: 10px; FLOAT: left
}
#result_bulk_functions A {
	TEXT-DECORATION: underline
}
#sub_nav_parent_title {
	BORDER-BOTTOM: black 1px solid; PADDING-BOTTOM: 5px; TEXT-TRANSFORM: =
uppercase; FONT-WEIGHT: bold
}
.nicetable TD {
	BORDER-BOTTOM: #666 1px solid; TEXT-ALIGN: left; BORDER-LEFT: #666 1px =
solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
FONT-SIZE: 12px; BORDER-TOP: #666 1px solid; BORDER-RIGHT: #666 1px =
solid; PADDING-TOP: 5px
}
.nicetable TH {
	BORDER-BOTTOM: #666 1px solid; TEXT-ALIGN: left; BORDER-LEFT: #666 1px =
solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BACKGROUND: #ebebeb; FONT-SIZE: 12px; BORDER-TOP: #666 1px solid; =
FONT-WEIGHT: bold; BORDER-RIGHT: #666 1px solid; PADDING-TOP: 5px
}
.nicetable {
	BORDER-COLLAPSE: collapse
}
#date_review {
	MARGIN: 5px 0px
}
.email_alert TD {
	VERTICAL-ALIGN: middle
}
#article_count A {
	FONT-SIZE: 10px; TEXT-DECORATION: none
}

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/templates/css/position.css

#container {
	POSITION: relative; TEXT-ALIGN: left; MARGIN: 10px auto 0px; WIDTH: =
936px; OVERFLOW: hidden
}
#header {
	WIDTH: 936px; HEIGHT: 171px
}
#logo {
	FLOAT: left
}
UL {
	PADDING-LEFT: 15px; MARGIN-LEFT: 0px
}
#bg_image {
	WIDTH: 741px; BACKGROUND: =
url(/newsmonitor/applications/newsmonitor/templates/images/header_img.jpg=
) repeat-y center 50%; FLOAT: left; HEIGHT: 104px
}
#bg_image2 {
	WIDTH: 741px; BACKGROUND: =
url(/newsmonitor/applications/newsmonitor/templates/images/header_backgro=
und.jpg) repeat-y center 50%; FLOAT: left; HEIGHT: 104px
}
#nav {
	WIDTH: 741px; BACKGROUND: =
url(/newsmonitor/applications/newsmonitor/templates/images/nav_back.jpg) =
repeat-x center 50%; FLOAT: left; HEIGHT: 44px
}
#info_box {
	MARGIN: 18px 0px 0px 407px; WIDTH: 334px
}
#header_pic {
	FLOAT: left
}
#main_content {
	WIDTH: 940px; MARGIN-BOTTOM: 10px; BACKGROUND: =
url(/newsmonitor/applications/newsmonitor/templates/images/main_content_b=
ack.jpg) repeat-x
}
.main_copy {
	MIN-HEIGHT: 200px; WIDTH: 906px
}
#left_content_area {
	PADDING-BOTTOM: 0px; MIN-HEIGHT: 367px; PADDING-LEFT: 0px; WIDTH: =
293px; PADDING-RIGHT: 0px; FLOAT: left; HEIGHT: auto !important; =
PADDING-TOP: 7px
}
#financial_ind P {
	MARGIN-LEFT: 12px
}
#result_bulk_functions {
	PADDING-BOTTOM: 10px; WIDTH: 920px; MARGIN-BOTTOM: 10px
}
#result_date {
	WIDTH: 200px
}
#right_content_area {
	MARGIN-TOP: 5px; WIDTH: 642px; FLOAT: left
}
#content {
	MARGIN-TOP: 10px; WIDTH: 642px; FLOAT: left
}
#button_insruction {
	WIDTH: 642px; FLOAT: left; HEIGHT: 20px
}
#ins {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: =
left; PADDING-TOP: 8px
}
#more_news {
	PADDING-LEFT: 12px; WIDTH: 624px; FLOAT: left
}
.logged_in_view {
	FLOAT: left
}
#financial_ind {
	WIDTH: 293px; FLOAT: left
}
.td_label {
	WIDTH: 150px
}
.uf_td_label {
	WIDTH: 150px
}
.ccs_textfield {
	WIDTH: 150px
}
.uf_textfield {
	WIDTH: 150px
}
#td_field INPUT {
	WIDTH: 150px
}
#td_field TEXTAREA {
	WIDTH: 150px
}
.form_capture_label {
	WIDTH: 200px; HEIGHT: 30px; VERTICAL-ALIGN: top
}
.ccs_textarea {
	WIDTH: 300px
}
#main_content {
	WIDTH: 936px; PADDING-TOP: 6px
}
#advanced_search {
	Z-INDEX: 1001; POSITION: absolute; PADDING-BOTTOM: 0px; MARGIN: 20px =
0px 0px 547px; PADDING-LEFT: 10px; WIDTH: 550px; PADDING-RIGHT: 0px; =
HEIGHT: 451px; PADDING-TOP: 13px
}
.nav_button H3 A {
	COLOR: #000; TEXT-DECORATION: none
}
#info_box A {
	COLOR: #333
}
INPUT {
	FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 12px
}
TEXTAREA {
	FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 12px
}
LI.site_map_section {
	LIST-STYLE-TYPE: none
}
#search_loader {
	MARGIN-LEFT: 15px
}
#result_bulk_functions_2 {
	CLEAR: both
}
.three_column {
	MARGIN: 0px 5px 10px; WIDTH: 300px; FLOAT: left
}
.three_column_detail {
	PADDING-BOTTOM: 8px; MARGIN: 0px 0px 0px 5px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; PADDING-TOP: 8px
}

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/templates//images/article_copyright_footer.gif

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
mZq5mZzZmZ75maAZmiUREAA7

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/ajax/scriptaculous/lib/prototype.js

/*  Prototype JavaScript framework, version 1.6.0.2=0A=
 *  (c) 2005-2008 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
 =
*------------------------------------------------------------------------=
--*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.6.0.2',=0A=
=0A=
  Browser: {=0A=
    IE:     !!(window.attachEvent && !window.opera),=0A=
    Opera:  !!window.opera,=0A=
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A=
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1,=0A=
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)=0A=
  },=0A=
=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate,=0A=
    ElementExtensions: !!window.HTMLElement,=0A=
    SpecificElementExtensions:=0A=
      document.createElement('div').__proto__ &&=0A=
      document.createElement('div').__proto__ !=3D=3D=0A=
        document.createElement('form').__proto__=0A=
  },=0A=
=0A=
  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',=0A=
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A=
=0A=
  emptyFunction: function() { },=0A=
  K: function(x) { return x }=0A=
};=0A=
=0A=
if (Prototype.Browser.MobileSafari)=0A=
  Prototype.BrowserFeatures.SpecificElementExtensions =3D false;=0A=
=0A=
=0A=
/* Based on Alex Arnell's inheritance implementation. */=0A=
var Class =3D {=0A=
  create: function() {=0A=
    var parent =3D null, properties =3D $A(arguments);=0A=
    if (Object.isFunction(properties[0]))=0A=
      parent =3D properties.shift();=0A=
=0A=
    function klass() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
=0A=
    Object.extend(klass, Class.Methods);=0A=
    klass.superclass =3D parent;=0A=
    klass.subclasses =3D [];=0A=
=0A=
    if (parent) {=0A=
      var subclass =3D function() { };=0A=
      subclass.prototype =3D parent.prototype;=0A=
      klass.prototype =3D new subclass;=0A=
      parent.subclasses.push(klass);=0A=
    }=0A=
=0A=
    for (var i =3D 0; i < properties.length; i++)=0A=
      klass.addMethods(properties[i]);=0A=
=0A=
    if (!klass.prototype.initialize)=0A=
      klass.prototype.initialize =3D Prototype.emptyFunction;=0A=
=0A=
    klass.prototype.constructor =3D klass;=0A=
=0A=
    return klass;=0A=
  }=0A=
};=0A=
=0A=
Class.Methods =3D {=0A=
  addMethods: function(source) {=0A=
    var ancestor   =3D this.superclass && this.superclass.prototype;=0A=
    var properties =3D Object.keys(source);=0A=
=0A=
    if (!Object.keys({ toString: true }).length)=0A=
      properties.push("toString", "valueOf");=0A=
=0A=
    for (var i =3D 0, length =3D properties.length; i < length; i++) {=0A=
      var property =3D properties[i], value =3D source[property];=0A=
      if (ancestor && Object.isFunction(value) &&=0A=
          value.argumentNames().first() =3D=3D "$super") {=0A=
        var method =3D value, value =3D Object.extend((function(m) {=0A=
          return function() { return ancestor[m].apply(this, arguments) =
};=0A=
        })(property).wrap(method), {=0A=
          valueOf:  function() { return method },=0A=
          toString: function() { return method.toString() }=0A=
        });=0A=
      }=0A=
      this.prototype[property] =3D value;=0A=
    }=0A=
=0A=
    return this;=0A=
  }=0A=
};=0A=
=0A=
var Abstract =3D { };=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source)=0A=
    destination[property] =3D source[property];=0A=
  return destination;=0A=
};=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (Object.isUndefined(object)) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : String(object);=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  toJSON: function(object) {=0A=
    var type =3D typeof object;=0A=
    switch (type) {=0A=
      case 'undefined':=0A=
      case 'function':=0A=
      case 'unknown': return;=0A=
      case 'boolean': return object.toString();=0A=
    }=0A=
=0A=
    if (object =3D=3D=3D null) return 'null';=0A=
    if (object.toJSON) return object.toJSON();=0A=
    if (Object.isElement(object)) return;=0A=
=0A=
    var results =3D [];=0A=
    for (var property in object) {=0A=
      var value =3D Object.toJSON(object[property]);=0A=
      if (!Object.isUndefined(value))=0A=
        results.push(property.toJSON() + ': ' + value);=0A=
    }=0A=
=0A=
    return '{' + results.join(', ') + '}';=0A=
  },=0A=
=0A=
  toQueryString: function(object) {=0A=
    return $H(object).toQueryString();=0A=
  },=0A=
=0A=
  toHTML: function(object) {=0A=
    return object && object.toHTML ? object.toHTML() : =
String.interpret(object);=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({ }, object);=0A=
  },=0A=
=0A=
  isElement: function(object) {=0A=
    return object && object.nodeType =3D=3D 1;=0A=
  },=0A=
=0A=
  isArray: function(object) {=0A=
    return object !=3D null && typeof object =3D=3D "object" &&=0A=
      'splice' in object && 'join' in object;=0A=
  },=0A=
=0A=
  isHash: function(object) {=0A=
    return object instanceof Hash;=0A=
  },=0A=
=0A=
  isFunction: function(object) {=0A=
    return typeof object =3D=3D "function";=0A=
  },=0A=
=0A=
  isString: function(object) {=0A=
    return typeof object =3D=3D "string";=0A=
  },=0A=
=0A=
  isNumber: function(object) {=0A=
    return typeof object =3D=3D "number";=0A=
  },=0A=
=0A=
  isUndefined: function(object) {=0A=
    return typeof object =3D=3D "undefined";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Function.prototype, {=0A=
  argumentNames: function() {=0A=
    var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").inv=
oke("strip");=0A=
    return names.length =3D=3D 1 && !names[0] ? [] : names;=0A=
  },=0A=
=0A=
  bind: function() {=0A=
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return =
this;=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function() {=0A=
      return __method.apply(object, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  bindAsEventListener: function() {=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function(event) {=0A=
      return __method.apply(object, [event || =
window.event].concat(args));=0A=
    }=0A=
  },=0A=
=0A=
  curry: function() {=0A=
    if (!arguments.length) return this;=0A=
    var __method =3D this, args =3D $A(arguments);=0A=
    return function() {=0A=
      return __method.apply(this, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  delay: function() {=0A=
    var __method =3D this, args =3D $A(arguments), timeout =3D =
args.shift() * 1000;=0A=
    return window.setTimeout(function() {=0A=
      return __method.apply(__method, args);=0A=
    }, timeout);=0A=
  },=0A=
=0A=
  wrap: function(wrapper) {=0A=
    var __method =3D this;=0A=
    return function() {=0A=
      return wrapper.apply(this, =
[__method.bind(this)].concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  methodize: function() {=0A=
    if (this._methodized) return this._methodized;=0A=
    var __method =3D this;=0A=
    return this._methodized =3D function() {=0A=
      return __method.apply(null, [this].concat($A(arguments)));=0A=
    };=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.defer =3D Function.prototype.delay.curry(0.01);=0A=
=0A=
Date.prototype.toJSON =3D function() {=0A=
  return '"' + this.getUTCFullYear() + '-' +=0A=
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +=0A=
    this.getUTCDate().toPaddedString(2) + 'T' +=0A=
    this.getUTCHours().toPaddedString(2) + ':' +=0A=
    this.getUTCMinutes().toPaddedString(2) + ':' +=0A=
    this.getUTCSeconds().toPaddedString(2) + 'Z"';=0A=
};=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) { }=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
};=0A=
=0A=
RegExp.prototype.match =3D RegExp.prototype.test;=0A=
=0A=
RegExp.escape =3D function(str) {=0A=
  return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create({=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    this.callback(this);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.execute();=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
Object.extend(String, {=0A=
  interpret: function(value) {=0A=
    return value =3D=3D null ? '' : String(value);=0A=
  },=0A=
  specialChar: {=0A=
    '\b': '\\b',=0A=
    '\t': '\\t',=0A=
    '\n': '\\n',=0A=
    '\f': '\\f',=0A=
    '\r': '\\r',=0A=
    '\\': '\\\\'=0A=
  }=0A=
});=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D Object.isUndefined(count) ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return String(this);=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D Object.isUndefined(truncation) ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : =
String(this);=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var self =3D arguments.callee;=0A=
    self.text.data =3D this;=0A=
    return self.div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D new Element('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return { };=0A=
=0A=
    return match[1].split(separator || '&').inject({ }, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var key =3D decodeURIComponent(pair.shift());=0A=
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A=
        if (value !=3D undefined) value =3D decodeURIComponent(value);=0A=
=0A=
        if (key in hash) {=0A=
          if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];=0A=
          hash[key].push(value);=0A=
        }=0A=
        else hash[key] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  times: function(count) {=0A=
    return count < 1 ? '' : new Array(count + 1).join(this);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function() {=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {=0A=
      var character =3D String.specialChar[match[0]];=0A=
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);=0A=
    });=0A=
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';=0A=
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return this.inspect(true);=0A=
  },=0A=
=0A=
  unfilterJSON: function(filter) {=0A=
    return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A=
  },=0A=
=0A=
  isJSON: function() {=0A=
    var str =3D this;=0A=
    if (str.blank()) return false;=0A=
    str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A=
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A=
  },=0A=
=0A=
  evalJSON: function(sanitize) {=0A=
    var json =3D this.unfilterJSON();=0A=
    try {=0A=
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A=
    } catch (e) { }=0A=
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
  },=0A=
=0A=
  include: function(pattern) {=0A=
    return this.indexOf(pattern) > -1;=0A=
  },=0A=
=0A=
  startsWith: function(pattern) {=0A=
    return this.indexOf(pattern) =3D=3D=3D 0;=0A=
  },=0A=
=0A=
  endsWith: function(pattern) {=0A=
    var d =3D this.length - pattern.length;=0A=
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;=0A=
  },=0A=
=0A=
  empty: function() {=0A=
    return this =3D=3D '';=0A=
  },=0A=
=0A=
  blank: function() {=0A=
    return /^\s*$/.test(this);=0A=
  },=0A=
=0A=
  interpolate: function(object, pattern) {=0A=
    return new Template(this, pattern).evaluate(object);=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {=0A=
  escapeHTML: function() {=0A=
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');=0A=
  },=0A=
  unescapeHTML: function() {=0A=
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (Object.isFunction(replacement)) return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
};=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
Object.extend(String.prototype.escapeHTML, {=0A=
  div:  document.createElement('div'),=0A=
  text: document.createTextNode('')=0A=
});=0A=
=0A=
with (String.prototype.escapeHTML) div.appendChild(text);=0A=
=0A=
var Template =3D Class.create({=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    if (Object.isFunction(object.toTemplateReplacements))=0A=
      object =3D object.toTemplateReplacements();=0A=
=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      if (object =3D=3D null) return '';=0A=
=0A=
      var before =3D match[1] || '';=0A=
      if (before =3D=3D '\\') return match[2];=0A=
=0A=
      var ctx =3D object, expr =3D match[3];=0A=
      var pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;=0A=
      match =3D pattern.exec(expr);=0A=
      if (match =3D=3D null) return before;=0A=
=0A=
      while (match !=3D null) {=0A=
        var comp =3D match[1].startsWith('[') ? match[2].gsub('\\\\]', =
']') : match[1];=0A=
        ctx =3D ctx[comp];=0A=
        if (null =3D=3D ctx || '' =3D=3D match[3]) break;=0A=
        expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);=0A=
        match =3D pattern.exec(expr);=0A=
      }=0A=
=0A=
      return before + String.interpret(ctx);=0A=
    });=0A=
  }=0A=
});=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
=0A=
var $break =3D { };=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator, context) {=0A=
    var index =3D 0;=0A=
    iterator =3D iterator.bind(context);=0A=
    try {=0A=
      this._each(function(value) {=0A=
        iterator(value, index++);=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.collect(iterator, context);=0A=
  },=0A=
=0A=
  all: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!iterator(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!iterator(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(filter, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
=0A=
    if (Object.isString(filter))=0A=
      filter =3D new RegExp(filter);=0A=
=0A=
    this.each(function(value, index) {=0A=
      if (filter.match(value))=0A=
        results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    if (Object.isFunction(this.indexOf))=0A=
      if (this.indexOf(object) !=3D -1) return true;=0A=
=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D Object.isUndefined(fillWith) ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D null || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D null || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      (iterator(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (Object.isFunction(args.last()))=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  filter:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray,=0A=
  every:   Enumerable.all,=0A=
  some:    Enumerable.any=0A=
});=0A=
function $A(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) return iterable.toArray();=0A=
  var length =3D iterable.length || 0, results =3D new Array(length);=0A=
  while (length--) results[length] =3D iterable[length];=0A=
  return results;=0A=
}=0A=
=0A=
if (Prototype.Browser.WebKit) {=0A=
  $A =3D function(iterable) {=0A=
    if (!iterable) return [];=0A=
    if (!(Object.isFunction(iterable) && iterable =3D=3D '[object =
NodeList]') &&=0A=
        iterable.toArray) return iterable.toArray();=0A=
    var length =3D iterable.length || 0, results =3D new Array(length);=0A=
    while (length--) results[length] =3D iterable[length];=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
Array.from =3D $A;=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse) Array.prototype._reverse =3D =
Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(Object.isArray(value) ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function(sorted) {=0A=
    return this.inject([], function(array, value, index) {=0A=
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))=0A=
        array.push(value);=0A=
      return array;=0A=
    });=0A=
  },=0A=
=0A=
  intersect: function(array) {=0A=
    return this.uniq().findAll(function(item) {=0A=
      return array.detect(function(value) { return item =3D=3D=3D value =
});=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    var results =3D [];=0A=
    this.each(function(object) {=0A=
      var value =3D Object.toJSON(object);=0A=
      if (!Object.isUndefined(value)) results.push(value);=0A=
    });=0A=
    return '[' + results.join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
// use native browser JS 1.6 implementation if available=0A=
if (Object.isFunction(Array.prototype.forEach))=0A=
  Array.prototype._each =3D Array.prototype.forEach;=0A=
=0A=
if (!Array.prototype.indexOf) Array.prototype.indexOf =3D function(item, =
i) {=0A=
  i || (i =3D 0);=0A=
  var length =3D this.length;=0A=
  if (i < 0) i =3D length + i;=0A=
  for (; i < length; i++)=0A=
    if (this[i] =3D=3D=3D item) return i;=0A=
  return -1;=0A=
};=0A=
=0A=
if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf =3D =
function(item, i) {=0A=
  i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;=0A=
  var n =3D this.slice(0, i).reverse().indexOf(item);=0A=
  return (n < 0) ? n : i - n - 1;=0A=
};=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string) {=0A=
  if (!Object.isString(string)) return [];=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if (Prototype.Browser.Opera){=0A=
  Array.prototype.concat =3D function() {=0A=
    var array =3D [];=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if (Object.isArray(arguments[i])) {=0A=
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  };=0A=
}=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    return this.toPaddedString(2, 16);=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  toPaddedString: function(length, radix) {=0A=
    var string =3D this.toString(radix || 10);=0A=
    return '0'.times(length - string.length) + string;=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return isFinite(this) ? this.toString() : 'null';=0A=
  }=0A=
});=0A=
=0A=
$w('abs round ceil floor').each(function(method){=0A=
  Number.prototype[method] =3D Math[method].methodize();=0A=
});=0A=
function $H(object) {=0A=
  return new Hash(object);=0A=
};=0A=
=0A=
var Hash =3D Class.create(Enumerable, (function() {=0A=
=0A=
  function toQueryPair(key, value) {=0A=
    if (Object.isUndefined(value)) return key;=0A=
    return key + '=3D' + encodeURIComponent(String.interpret(value));=0A=
  }=0A=
=0A=
  return {=0A=
    initialize: function(object) {=0A=
      this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);=0A=
    },=0A=
=0A=
    _each: function(iterator) {=0A=
      for (var key in this._object) {=0A=
        var value =3D this._object[key], pair =3D [key, value];=0A=
        pair.key =3D key;=0A=
        pair.value =3D value;=0A=
        iterator(pair);=0A=
      }=0A=
    },=0A=
=0A=
    set: function(key, value) {=0A=
      return this._object[key] =3D value;=0A=
    },=0A=
=0A=
    get: function(key) {=0A=
      return this._object[key];=0A=
    },=0A=
=0A=
    unset: function(key) {=0A=
      var value =3D this._object[key];=0A=
      delete this._object[key];=0A=
      return value;=0A=
    },=0A=
=0A=
    toObject: function() {=0A=
      return Object.clone(this._object);=0A=
    },=0A=
=0A=
    keys: function() {=0A=
      return this.pluck('key');=0A=
    },=0A=
=0A=
    values: function() {=0A=
      return this.pluck('value');=0A=
    },=0A=
=0A=
    index: function(value) {=0A=
      var match =3D this.detect(function(pair) {=0A=
        return pair.value =3D=3D=3D value;=0A=
      });=0A=
      return match && match.key;=0A=
    },=0A=
=0A=
    merge: function(object) {=0A=
      return this.clone().update(object);=0A=
    },=0A=
=0A=
    update: function(object) {=0A=
      return new Hash(object).inject(this, function(result, pair) {=0A=
        result.set(pair.key, pair.value);=0A=
        return result;=0A=
      });=0A=
    },=0A=
=0A=
    toQueryString: function() {=0A=
      return this.map(function(pair) {=0A=
        var key =3D encodeURIComponent(pair.key), values =3D pair.value;=0A=
=0A=
        if (values && typeof values =3D=3D 'object') {=0A=
          if (Object.isArray(values))=0A=
            return values.map(toQueryPair.curry(key)).join('&');=0A=
        }=0A=
        return toQueryPair(key, values);=0A=
      }).join('&');=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return '#<Hash:{' + this.map(function(pair) {=0A=
        return pair.map(Object.inspect).join(': ');=0A=
      }).join(', ') + '}>';=0A=
    },=0A=
=0A=
    toJSON: function() {=0A=
      return Object.toJSON(this.toObject());=0A=
    },=0A=
=0A=
    clone: function() {=0A=
      return new Hash(this);=0A=
    }=0A=
  }=0A=
})());=0A=
=0A=
Hash.prototype.toTemplateReplacements =3D Hash.prototype.toObject;=0A=
Hash.from =3D $H;=0A=
var ObjectRange =3D Class.create(Enumerable, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
};=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
};=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (Object.isFunction(responder[callback])) {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) { }=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate:   function() { Ajax.activeRequestCount++ },=0A=
  onComplete: function() { Ajax.activeRequestCount-- }=0A=
});=0A=
=0A=
Ajax.Base =3D Class.create({=0A=
  initialize: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   '',=0A=
      evalJSON:     true,=0A=
      evalJS:       true=0A=
    };=0A=
    Object.extend(this.options, options || { });=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
=0A=
    if (Object.isString(this.options.parameters))=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
    else if (Object.isHash(this.options.parameters))=0A=
      this.options.parameters =3D this.options.parameters.toObject();=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request =3D Class.create(Ajax.Base, {=0A=
  _complete: false,=0A=
=0A=
  initialize: function($super, url, options) {=0A=
    $super(options);=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D Object.clone(this.options.parameters);=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    this.parameters =3D params;=0A=
=0A=
    if (params =3D Object.toQueryString(params)) {=0A=
      // when GET, append parameters to URL=0A=
      if (this.method =3D=3D 'get')=0A=
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A=
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
        params +=3D '&_=3D';=0A=
    }=0A=
=0A=
    try {=0A=
      var response =3D new Ajax.Response(this);=0A=
      if (this.options.onCreate) this.options.onCreate(response);=0A=
      Ajax.Responders.dispatch('onCreate', this, response);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;=0A=
      this.transport.send(this.body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (Object.isFunction(extras.push))=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    var status =3D this.getStatus();=0A=
    return !status || (status >=3D 200 && status < 300);=0A=
  },=0A=
=0A=
  getStatus: function() {=0A=
    try {=0A=
      return this.transport.status || 0;=0A=
    } catch (e) { return 0 }=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + response.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(response, response.headerJSON);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      var contentType =3D response.getHeader('Content-type');=0A=
      if (this.options.evalJS =3D=3D 'force'=0A=
          || (this.options.evalJS && this.isSameOrigin() && contentType=0A=
          && =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))=0A=
        this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);=0A=
      Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  isSameOrigin: function() {=0A=
    var m =3D this.url.match(/^\s*https?:\/\/[^\/]*/);=0A=
    return !m || (m[0] =3D=3D =
'#{protocol}//#{domain}#{port}'.interpolate({=0A=
      protocol: location.protocol,=0A=
      domain: document.domain,=0A=
      port: location.port ? ':' + location.port : ''=0A=
    }));=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name) || null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval((this.transport.responseText || '').unfilterJSON());=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Response =3D Class.create({=0A=
  initialize: function(request){=0A=
    this.request =3D request;=0A=
    var transport  =3D this.transport  =3D request.transport,=0A=
        readyState =3D this.readyState =3D transport.readyState;=0A=
=0A=
    if((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D 4) =
{=0A=
      this.status       =3D this.getStatus();=0A=
      this.statusText   =3D this.getStatusText();=0A=
      this.responseText =3D String.interpret(transport.responseText);=0A=
      this.headerJSON   =3D this._getHeaderJSON();=0A=
    }=0A=
=0A=
    if(readyState =3D=3D 4) {=0A=
      var xml =3D transport.responseXML;=0A=
      this.responseXML  =3D Object.isUndefined(xml) ? null : xml;=0A=
      this.responseJSON =3D this._getResponseJSON();=0A=
    }=0A=
  },=0A=
=0A=
  status:      0,=0A=
  statusText: '',=0A=
=0A=
  getStatus: Ajax.Request.prototype.getStatus,=0A=
=0A=
  getStatusText: function() {=0A=
    try {=0A=
      return this.transport.statusText || '';=0A=
    } catch (e) { return '' }=0A=
  },=0A=
=0A=
  getHeader: Ajax.Request.prototype.getHeader,=0A=
=0A=
  getAllHeaders: function() {=0A=
    try {=0A=
      return this.getAllResponseHeaders();=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  getResponseHeader: function(name) {=0A=
    return this.transport.getResponseHeader(name);=0A=
  },=0A=
=0A=
  getAllResponseHeaders: function() {=0A=
    return this.transport.getAllResponseHeaders();=0A=
  },=0A=
=0A=
  _getHeaderJSON: function() {=0A=
    var json =3D this.getHeader('X-JSON');=0A=
    if (!json) return null;=0A=
    json =3D decodeURIComponent(escape(json));=0A=
    try {=0A=
      return json.evalJSON(this.request.options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  _getResponseJSON: function() {=0A=
    var options =3D this.request.options;=0A=
    if (!options.evalJSON || (options.evalJSON !=3D 'force' &&=0A=
      !(this.getHeader('Content-type') || =
'').include('application/json')) ||=0A=
        this.responseText.blank())=0A=
          return null;=0A=
    try {=0A=
      return this.responseText.evalJSON(options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create(Ajax.Request, {=0A=
  initialize: function($super, container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    };=0A=
=0A=
    options =3D Object.clone(options);=0A=
    var onComplete =3D options.onComplete;=0A=
    options.onComplete =3D (function(response, json) {=0A=
      this.updateContent(response.responseText);=0A=
      if (Object.isFunction(onComplete)) onComplete(response, json);=0A=
    }).bind(this);=0A=
=0A=
    $super(url, options);=0A=
  },=0A=
=0A=
  updateContent: function(responseText) {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'],=0A=
        options =3D this.options;=0A=
=0A=
    if (!options.evalScripts) responseText =3D =
responseText.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (options.insertion) {=0A=
        if (Object.isString(options.insertion)) {=0A=
          var insertion =3D { }; insertion[options.insertion] =3D =
responseText;=0A=
          receiver.insert(insertion);=0A=
        }=0A=
        else options.insertion(receiver, responseText);=0A=
      }=0A=
      else receiver.update(responseText);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {=0A=
  initialize: function($super, container, url, options) {=0A=
    $super(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D { };=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(response) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (response.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D response.responseText;=0A=
    }=0A=
    this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (Object.isString(element))=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(Element.extend(query.snapshotItem(i)));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Node) var Node =3D { };=0A=
=0A=
if (!Node.ELEMENT_NODE) {=0A=
  // DOM level 2 ECMAScript Language Binding=0A=
  Object.extend(Node, {=0A=
    ELEMENT_NODE: 1,=0A=
    ATTRIBUTE_NODE: 2,=0A=
    TEXT_NODE: 3,=0A=
    CDATA_SECTION_NODE: 4,=0A=
    ENTITY_REFERENCE_NODE: 5,=0A=
    ENTITY_NODE: 6,=0A=
    PROCESSING_INSTRUCTION_NODE: 7,=0A=
    COMMENT_NODE: 8,=0A=
    DOCUMENT_NODE: 9,=0A=
    DOCUMENT_TYPE_NODE: 10,=0A=
    DOCUMENT_FRAGMENT_NODE: 11,=0A=
    NOTATION_NODE: 12=0A=
  });=0A=
}=0A=
=0A=
(function() {=0A=
  var element =3D this.Element;=0A=
  this.Element =3D function(tagName, attributes) {=0A=
    attributes =3D attributes || { };=0A=
    tagName =3D tagName.toLowerCase();=0A=
    var cache =3D Element.cache;=0A=
    if (Prototype.Browser.IE && attributes.name) {=0A=
      tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';=0A=
      delete attributes.name;=0A=
      return Element.writeAttribute(document.createElement(tagName), =
attributes);=0A=
    }=0A=
    if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));=0A=
    return Element.writeAttribute(cache[tagName].cloneNode(false), =
attributes);=0A=
  };=0A=
  Object.extend(this.Element, element || { });=0A=
}).call(window);=0A=
=0A=
Element.cache =3D { };=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
    content =3D Object.toHTML(content);=0A=
    element.innerHTML =3D content.stripScripts();=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    else if (!Object.isElement(content)) {=0A=
      content =3D Object.toHTML(content);=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNode(element);=0A=
      content.evalScripts.bind(content).defer();=0A=
      content =3D range.createContextualFragment(content.stripScripts());=0A=
    }=0A=
    element.parentNode.replaceChild(content, element);=0A=
    return element;=0A=
  },=0A=
=0A=
  insert: function(element, insertions) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))=0A=
          insertions =3D {bottom:insertions};=0A=
=0A=
    var content, insert, tagName, childNodes;=0A=
=0A=
    for (var position in insertions) {=0A=
      content  =3D insertions[position];=0A=
      position =3D position.toLowerCase();=0A=
      insert =3D Element._insertionTranslations[position];=0A=
=0A=
      if (content && content.toElement) content =3D content.toElement();=0A=
      if (Object.isElement(content)) {=0A=
        insert(element, content);=0A=
        continue;=0A=
      }=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
=0A=
      tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')=0A=
        ? element.parentNode : element).tagName.toUpperCase();=0A=
=0A=
      childNodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
=0A=
      if (position =3D=3D 'top' || position =3D=3D 'after') =
childNodes.reverse();=0A=
      childNodes.each(insert.curry(element));=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
    }=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  wrap: function(element, wrapper, attributes) {=0A=
    element =3D $(element);=0A=
    if (Object.isElement(wrapper))=0A=
      $(wrapper).writeAttribute(attributes || { });=0A=
    else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);=0A=
    else wrapper =3D new Element('div', wrapper);=0A=
    if (element.parentNode)=0A=
      element.parentNode.replaceChild(wrapper, element);=0A=
    wrapper.appendChild(element);=0A=
    return wrapper;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $(element).select("*");=0A=
  },=0A=
=0A=
  firstDescendant: function(element) {=0A=
    element =3D $(element).firstChild;=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    return $(element);=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (Object.isString(selector))=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return $(element.parentNode);=0A=
    var ancestors =3D element.ancestors();=0A=
    return Object.isNumber(expression) ? ancestors[expression] :=0A=
      Selector.findElement(ancestors, expression, index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
    return Object.isNumber(expression) ? =
element.descendants()[expression] :=0A=
      element.select(expression)[index || 0];=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));=0A=
    var previousSiblings =3D element.previousSiblings();=0A=
    return Object.isNumber(expression) ? previousSiblings[expression] :=0A=
      Selector.findElement(previousSiblings, expression, index);=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));=0A=
    var nextSiblings =3D element.nextSiblings();=0A=
    return Object.isNumber(expression) ? nextSiblings[expression] :=0A=
      Selector.findElement(nextSiblings, expression, index);=0A=
  },=0A=
=0A=
  select: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  adjacent: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element.parentNode, =
args).without(element);=0A=
  },=0A=
=0A=
  identify: function(element) {=0A=
    element =3D $(element);=0A=
    var id =3D element.readAttribute('id'), self =3D arguments.callee;=0A=
    if (id) return id;=0A=
    do { id =3D 'anonymous_element_' + self.counter++ } while ($(id));=0A=
    element.writeAttribute('id', id);=0A=
    return id;=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (Prototype.Browser.IE) {=0A=
      var t =3D Element._attributeTranslations.read;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name]) name =3D t.names[name];=0A=
      if (name.include(':')) {=0A=
        return (!element.attributes || !element.attributes[name]) ? null =
:=0A=
         element.attributes[name].value;=0A=
      }=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  writeAttribute: function(element, name, value) {=0A=
    element =3D $(element);=0A=
    var attributes =3D { }, t =3D Element._attributeTranslations.write;=0A=
=0A=
    if (typeof name =3D=3D 'object') attributes =3D name;=0A=
    else attributes[name] =3D Object.isUndefined(value) ? true : value;=0A=
=0A=
    for (var attr in attributes) {=0A=
      name =3D t.names[attr] || attr;=0A=
      value =3D attributes[attr];=0A=
      if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
      if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
        element.removeAttribute(name);=0A=
      else if (value =3D=3D=3D true)=0A=
        element.setAttribute(name, name);=0A=
      else element.setAttribute(name, value);=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).getDimensions().height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return $(element).getDimensions().width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||=0A=
      new RegExp("(^|\\s)" + className + =
"(\\s|$)").test(elementClassName)));=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    if (!element.hasClassName(className))=0A=
      element.className +=3D (element.className ? ' ' : '') + className;=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    element.className =3D element.className.replace(=0A=
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    return element[element.hasClassName(className) ?=0A=
      'removeClassName' : 'addClassName'](className);=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.blank();=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    var originalAncestor =3D ancestor;=0A=
=0A=
    if (element.compareDocumentPosition)=0A=
      return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D 8;=0A=
=0A=
    if (element.sourceIndex && !Prototype.Browser.Opera) {=0A=
      var e =3D element.sourceIndex, a =3D ancestor.sourceIndex,=0A=
       nextAncestor =3D ancestor.nextSibling;=0A=
      if (!nextAncestor) {=0A=
        do { ancestor =3D ancestor.parentNode; }=0A=
        while (!(nextAncestor =3D ancestor.nextSibling) && =
ancestor.parentNode);=0A=
      }=0A=
      if (nextAncestor && nextAncestor.sourceIndex)=0A=
       return (e > a && e < nextAncestor.sourceIndex);=0A=
    }=0A=
=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D originalAncestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D element.cumulativeOffset();=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      var css =3D document.defaultView.getComputedStyle(element, null);=0A=
      value =3D css ? css[style] : null;=0A=
    }=0A=
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  getOpacity: function(element) {=0A=
    return $(element).getStyle('opacity');=0A=
  },=0A=
=0A=
  setStyle: function(element, styles) {=0A=
    element =3D $(element);=0A=
    var elementStyle =3D element.style, match;=0A=
    if (Object.isString(styles)) {=0A=
      element.style.cssText +=3D ';' + styles;=0A=
      return styles.include('opacity') ?=0A=
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : =
element;=0A=
    }=0A=
    for (var property in styles)=0A=
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property]);=0A=
      else=0A=
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?=0A=
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : =
'styleFloat') :=0A=
            property] =3D styles[property];=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  setOpacity: function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    var display =3D $(element).getStyle('display');=0A=
    if (display !=3D 'none' && display !=3D null) // Safari bug=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    var originalDisplay =3D els.display;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D 'block';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D originalDisplay;=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D Element.getStyle(element, 'overflow') || =
'auto';=0A=
    if (element._overflow !=3D=3D 'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if (element.tagName =3D=3D 'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p !=3D=3D 'static') break;=0A=
      }=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'absolute') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=0A=
    var offsets =3D element.positionedOffset();=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.width  =3D width + 'px';=0A=
    element.style.height =3D height + 'px';=0A=
    return element;=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'relative') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
    return element;=0A=
  },=0A=
=0A=
  cumulativeScrollOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  getOffsetParent: function(element) {=0A=
    if (element.offsetParent) return $(element.offsetParent);=0A=
    if (element =3D=3D document.body) return $(element);=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return $(element);=0A=
=0A=
    return $(document.body);=0A=
  },=0A=
=0A=
  viewportOffset: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent =3D=3D document.body &&=0A=
        Element.getStyle(element, 'position') =3D=3D 'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!Prototype.Browser.Opera || element.tagName =3D=3D 'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  clonePosition: function(element, source) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || { });=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D source.viewportOffset();=0A=
=0A=
    // find coordinate system to use=0A=
    element =3D $(element);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(element, 'position') =3D=3D 'absolute') {=0A=
      parent =3D element.getOffsetParent();=0A=
      delta =3D parent.viewportOffset();=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if (options.setLeft)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if (options.setWidth)  element.style.width =3D source.offsetWidth + =
'px';=0A=
    if (options.setHeight) element.style.height =3D source.offsetHeight =
+ 'px';=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.identify.counter =3D 1;=0A=
=0A=
Object.extend(Element.Methods, {=0A=
  getElementsBySelector: Element.Methods.select,=0A=
  childElements: Element.Methods.immediateDescendants=0A=
});=0A=
=0A=
Element._attributeTranslations =3D {=0A=
  write: {=0A=
    names: {=0A=
      className: 'class',=0A=
      htmlFor:   'for'=0A=
    },=0A=
    values: { }=0A=
  }=0A=
};=0A=
=0A=
if (Prototype.Browser.Opera) {=0A=
  Element.Methods.getStyle =3D Element.Methods.getStyle.wrap(=0A=
    function(proceed, element, style) {=0A=
      switch (style) {=0A=
        case 'left': case 'top': case 'right': case 'bottom':=0A=
          if (proceed(element, 'position') =3D=3D=3D 'static') return =
null;=0A=
        case 'height': case 'width':=0A=
          // returns '0px' for hidden elements; we want it to return null=0A=
          if (!Element.visible(element)) return null;=0A=
=0A=
          // returns the border-box dimensions rather than the =
content-box=0A=
          // dimensions, so we subtract padding and borders from the =
value=0A=
          var dim =3D parseInt(proceed(element, style), 10);=0A=
=0A=
          if (dim !=3D=3D element['offset' + style.capitalize()])=0A=
            return dim + 'px';=0A=
=0A=
          var properties;=0A=
          if (style =3D=3D=3D 'height') {=0A=
            properties =3D ['border-top-width', 'padding-top',=0A=
             'padding-bottom', 'border-bottom-width'];=0A=
          }=0A=
          else {=0A=
            properties =3D ['border-left-width', 'padding-left',=0A=
             'padding-right', 'border-right-width'];=0A=
          }=0A=
          return properties.inject(dim, function(memo, property) {=0A=
            var val =3D proceed(element, property);=0A=
            return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);=0A=
          }) + 'px';=0A=
        default: return proceed(element, style);=0A=
      }=0A=
    }=0A=
  );=0A=
=0A=
  Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(=0A=
    function(proceed, element, attribute) {=0A=
      if (attribute =3D=3D=3D 'title') return element.title;=0A=
      return proceed(element, attribute);=0A=
    }=0A=
  );=0A=
}=0A=
=0A=
else if (Prototype.Browser.IE) {=0A=
  // IE doesn't report offsets correctly for static elements, so we =
change them=0A=
  // to "relative" to get the values, then change them back.=0A=
  Element.Methods.getOffsetParent =3D =
Element.Methods.getOffsetParent.wrap(=0A=
    function(proceed, element) {=0A=
      element =3D $(element);=0A=
      var position =3D element.getStyle('position');=0A=
      if (position !=3D=3D 'static') return proceed(element);=0A=
      element.setStyle({ position: 'relative' });=0A=
      var value =3D proceed(element);=0A=
      element.setStyle({ position: position });=0A=
      return value;=0A=
    }=0A=
  );=0A=
=0A=
  $w('positionedOffset viewportOffset').each(function(method) {=0A=
    Element.Methods[method] =3D Element.Methods[method].wrap(=0A=
      function(proceed, element) {=0A=
        element =3D $(element);=0A=
        var position =3D element.getStyle('position');=0A=
        if (position !=3D=3D 'static') return proceed(element);=0A=
        // Trigger hasLayout on the offset parent so that IE6 reports=0A=
        // accurate offsetTop and offsetLeft values for position: fixed.=0A=
        var offsetParent =3D element.getOffsetParent();=0A=
        if (offsetParent && offsetParent.getStyle('position') =3D=3D=3D =
'fixed')=0A=
          offsetParent.setStyle({ zoom: 1 });=0A=
        element.setStyle({ position: 'relative' });=0A=
        var value =3D proceed(element);=0A=
        element.setStyle({ position: position });=0A=
        return value;=0A=
      }=0A=
    );=0A=
  });=0A=
=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];=0A=
=0A=
    if (style =3D=3D 'opacity') {=0A=
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if (value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
=0A=
    if (value =3D=3D 'auto') {=0A=
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))=0A=
        return element['offset' + style.capitalize()] + 'px';=0A=
      return null;=0A=
    }=0A=
    return value;=0A=
  };=0A=
=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    function stripAlpha(filter){=0A=
      return filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
    }=0A=
    element =3D $(element);=0A=
    var currentStyle =3D element.currentStyle;=0A=
    if ((currentStyle && !currentStyle.hasLayout) ||=0A=
      (!currentStyle && element.style.zoom =3D=3D 'normal'))=0A=
        element.style.zoom =3D 1;=0A=
=0A=
    var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
    if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
      (filter =3D stripAlpha(filter)) ?=0A=
        style.filter =3D filter : style.removeAttribute('filter');=0A=
      return element;=0A=
    } else if (value < 0.00001) value =3D 0;=0A=
    style.filter =3D stripAlpha(filter) +=0A=
      'alpha(opacity=3D' + (value * 100) + ')';=0A=
    return element;=0A=
  };=0A=
=0A=
  Element._attributeTranslations =3D {=0A=
    read: {=0A=
      names: {=0A=
        'class': 'className',=0A=
        'for':   'htmlFor'=0A=
      },=0A=
      values: {=0A=
        _getAttr: function(element, attribute) {=0A=
          return element.getAttribute(attribute, 2);=0A=
        },=0A=
        _getAttrNode: function(element, attribute) {=0A=
          var node =3D element.getAttributeNode(attribute);=0A=
          return node ? node.value : "";=0A=
        },=0A=
        _getEv: function(element, attribute) {=0A=
          attribute =3D element.getAttribute(attribute);=0A=
          return attribute ? attribute.toString().slice(23, -2) : null;=0A=
        },=0A=
        _flag: function(element, attribute) {=0A=
          return $(element).hasAttribute(attribute) ? attribute : null;=0A=
        },=0A=
        style: function(element) {=0A=
          return element.style.cssText.toLowerCase();=0A=
        },=0A=
        title: function(element) {=0A=
          return element.title;=0A=
        }=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.write =3D {=0A=
    names: Object.extend({=0A=
      cellpadding: 'cellPadding',=0A=
      cellspacing: 'cellSpacing'=0A=
    }, Element._attributeTranslations.read.names),=0A=
    values: {=0A=
      checked: function(element, value) {=0A=
        element.checked =3D !!value;=0A=
      },=0A=
=0A=
      style: function(element, value) {=0A=
        element.style.cssText =3D value ? value : '';=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.has =3D {};=0A=
=0A=
  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +=0A=
      'encType maxLength readOnly longDesc').each(function(attr) {=0A=
    Element._attributeTranslations.write.names[attr.toLowerCase()] =3D =
attr;=0A=
    Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;=0A=
  });=0A=
=0A=
  (function(v) {=0A=
    Object.extend(v, {=0A=
      href:        v._getAttr,=0A=
      src:         v._getAttr,=0A=
      type:        v._getAttr,=0A=
      action:      v._getAttrNode,=0A=
      disabled:    v._flag,=0A=
      checked:     v._flag,=0A=
      readonly:    v._flag,=0A=
      multiple:    v._flag,=0A=
      onload:      v._getEv,=0A=
      onunload:    v._getEv,=0A=
      onclick:     v._getEv,=0A=
      ondblclick:  v._getEv,=0A=
      onmousedown: v._getEv,=0A=
      onmouseup:   v._getEv,=0A=
      onmouseover: v._getEv,=0A=
      onmousemove: v._getEv,=0A=
      onmouseout:  v._getEv,=0A=
      onfocus:     v._getEv,=0A=
      onblur:      v._getEv,=0A=
      onkeypress:  v._getEv,=0A=
      onkeydown:   v._getEv,=0A=
      onkeyup:     v._getEv,=0A=
      onsubmit:    v._getEv,=0A=
      onreset:     v._getEv,=0A=
      onselect:    v._getEv,=0A=
      onchange:    v._getEv=0A=
    });=0A=
  })(Element._attributeTranslations.read.values);=0A=
}=0A=
=0A=
else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A=
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
else if (Prototype.Browser.WebKit) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
=0A=
    if (value =3D=3D 1)=0A=
      if(element.tagName =3D=3D 'IMG' && element.width) {=0A=
        element.width++; element.width--;=0A=
      } else try {=0A=
        var n =3D document.createTextNode(' ');=0A=
        element.appendChild(n);=0A=
        element.removeChild(n);=0A=
      } catch (e) { }=0A=
=0A=
    return element;=0A=
  };=0A=
=0A=
  // Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
  // positioned.  For performance reasons, redefine =
Element#cumulativeOffset for=0A=
  // KHTML/WebKit only.=0A=
  Element.Methods.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  };=0A=
}=0A=
=0A=
if (Prototype.Browser.IE || Prototype.Browser.Opera) {=0A=
  // IE and Opera are missing .innerHTML support for TABLE-related and =
SELECT elements=0A=
  Element.Methods.update =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
=0A=
    if (tagName in Element._insertionTranslations.tags) {=0A=
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });=0A=
      Element._getContentFromAnonymousElement(tagName, =
content.stripScripts())=0A=
        .each(function(node) { element.appendChild(node) });=0A=
    }=0A=
    else element.innerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
if ('outerHTML' in document.createElement('div')) {=0A=
  Element.Methods.replace =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) {=0A=
      element.parentNode.replaceChild(content, element);=0A=
      return element;=0A=
    }=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();=0A=
=0A=
    if (Element._insertionTranslations.tags[tagName]) {=0A=
      var nextSibling =3D element.next();=0A=
      var fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
      parent.removeChild(element);=0A=
      if (nextSibling)=0A=
        fragments.each(function(node) { parent.insertBefore(node, =
nextSibling) });=0A=
      else=0A=
        fragments.each(function(node) { parent.appendChild(node) });=0A=
    }=0A=
    else element.outerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
Element._returnOffset =3D function(l, t) {=0A=
  var result =3D [l, t];=0A=
  result.left =3D l;=0A=
  result.top =3D t;=0A=
  return result;=0A=
};=0A=
=0A=
Element._getContentFromAnonymousElement =3D function(tagName, html) {=0A=
  var div =3D new Element('div'), t =3D =
Element._insertionTranslations.tags[tagName];=0A=
  if (t) {=0A=
    div.innerHTML =3D t[0] + html + t[1];=0A=
    t[2].times(function() { div =3D div.firstChild });=0A=
  } else div.innerHTML =3D html;=0A=
  return $A(div.childNodes);=0A=
};=0A=
=0A=
Element._insertionTranslations =3D {=0A=
  before: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element);=0A=
  },=0A=
  top: function(element, node) {=0A=
    element.insertBefore(node, element.firstChild);=0A=
  },=0A=
  bottom: function(element, node) {=0A=
    element.appendChild(node);=0A=
  },=0A=
  after: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element.nextSibling);=0A=
  },=0A=
  tags: {=0A=
    TABLE:  ['<table>',                '</table>',                   1],=0A=
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],=0A=
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],=0A=
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],=0A=
    SELECT: ['<select>',               '</select>',                  1]=0A=
  }=0A=
};=0A=
=0A=
(function() {=0A=
  Object.extend(this.tags, {=0A=
    THEAD: this.tags.TBODY,=0A=
    TFOOT: this.tags.TBODY,=0A=
    TH:    this.tags.TD=0A=
  });=0A=
}).call(Element._insertionTranslations);=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    attribute =3D Element._attributeTranslations.has[attribute] || =
attribute;=0A=
    var node =3D $(element).getAttributeNode(attribute);=0A=
    return node && node.specified;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.ByTag =3D { };=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
if (!Prototype.BrowserFeatures.ElementExtensions &&=0A=
    document.createElement('div').__proto__) {=0A=
  window.HTMLElement =3D { };=0A=
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;=0A=
  Prototype.BrowserFeatures.ElementExtensions =3D true;=0A=
}=0A=
=0A=
Element.extend =3D (function() {=0A=
  if (Prototype.BrowserFeatures.SpecificElementExtensions)=0A=
    return Prototype.K;=0A=
=0A=
  var Methods =3D { }, ByTag =3D Element.Methods.ByTag;=0A=
=0A=
  var extend =3D Object.extend(function(element) {=0A=
    if (!element || element._extendedByPrototype ||=0A=
        element.nodeType !=3D 1 || element =3D=3D window) return element;=0A=
=0A=
    var methods =3D Object.clone(Methods),=0A=
      tagName =3D element.tagName, property, value;=0A=
=0A=
    // extend methods for specific tags=0A=
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);=0A=
=0A=
    for (property in methods) {=0A=
      value =3D methods[property];=0A=
      if (Object.isFunction(value) && !(property in element))=0A=
        element[property] =3D value.methodize();=0A=
    }=0A=
=0A=
    element._extendedByPrototype =3D Prototype.emptyFunction;=0A=
    return element;=0A=
=0A=
  }, {=0A=
    refresh: function() {=0A=
      // extend methods for all tags (Safari doesn't need this)=0A=
      if (!Prototype.BrowserFeatures.ElementExtensions) {=0A=
        Object.extend(Methods, Element.Methods);=0A=
        Object.extend(Methods, Element.Methods.Simulated);=0A=
      }=0A=
    }=0A=
  });=0A=
=0A=
  extend.refresh();=0A=
  return extend;=0A=
})();=0A=
=0A=
Element.hasAttribute =3D function(element, attribute) {=0A=
  if (element.hasAttribute) return element.hasAttribute(attribute);=0A=
  return Element.Methods.Simulated.hasAttribute(element, attribute);=0A=
};=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A=
=0A=
  if (!methods) {=0A=
    Object.extend(Form, Form.Methods);=0A=
    Object.extend(Form.Element, Form.Element.Methods);=0A=
    Object.extend(Element.Methods.ByTag, {=0A=
      "FORM":     Object.clone(Form.Methods),=0A=
      "INPUT":    Object.clone(Form.Element.Methods),=0A=
      "SELECT":   Object.clone(Form.Element.Methods),=0A=
      "TEXTAREA": Object.clone(Form.Element.Methods)=0A=
    });=0A=
  }=0A=
=0A=
  if (arguments.length =3D=3D 2) {=0A=
    var tagName =3D methods;=0A=
    methods =3D arguments[1];=0A=
  }=0A=
=0A=
  if (!tagName) Object.extend(Element.Methods, methods || { });=0A=
  else {=0A=
    if (Object.isArray(tagName)) tagName.each(extend);=0A=
    else extend(tagName);=0A=
  }=0A=
=0A=
  function extend(tagName) {=0A=
    tagName =3D tagName.toUpperCase();=0A=
    if (!Element.Methods.ByTag[tagName])=0A=
      Element.Methods.ByTag[tagName] =3D { };=0A=
    Object.extend(Element.Methods.ByTag[tagName], methods);=0A=
  }=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!Object.isFunction(value)) continue;=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D value.methodize();=0A=
    }=0A=
  }=0A=
=0A=
  function findDOMClass(tagName) {=0A=
    var klass;=0A=
    var trans =3D {=0A=
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A=
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",=0A=
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",=0A=
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A=
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":=0A=
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A=
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":=0A=
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A=
      "FrameSet", "IFRAME": "IFrame"=0A=
    };=0A=
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
=0A=
    window[klass] =3D { };=0A=
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;=0A=
    return window[klass];=0A=
  }=0A=
=0A=
  if (F.ElementExtensions) {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
  }=0A=
=0A=
  if (F.SpecificElementExtensions) {=0A=
    for (var tag in Element.Methods.ByTag) {=0A=
      var klass =3D findDOMClass(tag);=0A=
      if (Object.isUndefined(klass)) continue;=0A=
      copy(T[tag], klass.prototype);=0A=
    }=0A=
  }=0A=
=0A=
  Object.extend(Element, Element.Methods);=0A=
  delete Element.ByTag;=0A=
=0A=
  if (Element.extend.refresh) Element.extend.refresh();=0A=
  Element.cache =3D { };=0A=
};=0A=
=0A=
document.viewport =3D {=0A=
  getDimensions: function() {=0A=
    var dimensions =3D { };=0A=
    var B =3D Prototype.Browser;=0A=
    $w('width height').each(function(d) {=0A=
      var D =3D d.capitalize();=0A=
      dimensions[d] =3D (B.WebKit && !document.evaluate) ? self['inner' =
+ D] :=0A=
        (B.Opera) ? document.body['client' + D] : =
document.documentElement['client' + D];=0A=
    });=0A=
    return dimensions;=0A=
  },=0A=
=0A=
  getWidth: function() {=0A=
    return this.getDimensions().width;=0A=
  },=0A=
=0A=
  getHeight: function() {=0A=
    return this.getDimensions().height;=0A=
  },=0A=
=0A=
  getScrollOffsets: function() {=0A=
    return Element._returnOffset(=0A=
      window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,=0A=
      window.pageYOffset || document.documentElement.scrollTop || =
document.body.scrollTop);=0A=
  }=0A=
};=0A=
/* Portions of the Selector class are derived from Jack Slocum=E2=80=99s =
DomQuery,=0A=
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style=0A=
 * license.  Please see http://www.yui-ext.com/ for more information. */=0A=
=0A=
var Selector =3D Class.create({=0A=
  initialize: function(expression) {=0A=
    this.expression =3D expression.strip();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  shouldUseXPath: function() {=0A=
    if (!Prototype.BrowserFeatures.XPath) return false;=0A=
=0A=
    var e =3D this.expression;=0A=
=0A=
    // Safari 3 chokes on :*-of-type and :empty=0A=
    if (Prototype.Browser.WebKit &&=0A=
     (e.include("-of-type") || e.include(":empty")))=0A=
      return false;=0A=
=0A=
    // XPath can't do namespaced attributes, nor can it read=0A=
    // the "checked" property from DOM nodes=0A=
    if ((/(\[[\w-]*?:|:checked)/).test(this.expression))=0A=
      return false;=0A=
=0A=
    return true;=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    if (this.shouldUseXPath())=0A=
      return this.compileXPathMatcher();=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,=0A=
        c =3D Selector.criteria, le, p, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.matcher =3D Selector._cache[e];=0A=
      return;=0A=
    }=0A=
=0A=
    this.matcher =3D ["this.matcher =3D function(root) {",=0A=
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];=0A=
=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :=0A=
    	      new Template(c[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.matcher.push("return h.unique(n);\n}");=0A=
    eval(this.matcher.join('\n'));=0A=
    Selector._cache[this.expression] =3D this.matcher;=0A=
  },=0A=
=0A=
  compileXPathMatcher: function() {=0A=
    var e =3D this.expression, ps =3D Selector.patterns,=0A=
        x =3D Selector.xpath, le, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.xpath =3D Selector._cache[e]; return;=0A=
    }=0A=
=0A=
    this.matcher =3D ['.//*'];=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        if (m =3D e.match(ps[i])) {=0A=
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :=0A=
            new Template(x[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.xpath =3D this.matcher.join('');=0A=
    Selector._cache[this.expression] =3D this.xpath;=0A=
  },=0A=
=0A=
  findElements: function(root) {=0A=
    root =3D root || document;=0A=
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);=0A=
    return this.matcher(root);=0A=
  },=0A=
=0A=
  match: function(element) {=0A=
    this.tokens =3D [];=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, as =3D =
Selector.assertions;=0A=
    var le, p, m;=0A=
=0A=
    while (e && le !=3D=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          // use the Selector.assertions methods unless the selector=0A=
          // is too complex.=0A=
          if (as[i]) {=0A=
            this.tokens.push([i, Object.clone(m)]);=0A=
            e =3D e.replace(m[0], '');=0A=
          } else {=0A=
            // reluctantly do a document-wide search=0A=
            // and look for a match in the array=0A=
            return this.findElements(document).include(element);=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    var match =3D true, name, matches;=0A=
    for (var i =3D 0, token; token =3D this.tokens[i]; i++) {=0A=
      name =3D token[0], matches =3D token[1];=0A=
      if (!Selector.assertions[name](element, matches)) {=0A=
        match =3D false; break;=0A=
      }=0A=
    }=0A=
=0A=
    return match;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return "#<Selector:" + this.expression.inspect() + ">";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Selector, {=0A=
  _cache: { },=0A=
=0A=
  xpath: {=0A=
    descendant:   "//*",=0A=
    child:        "/*",=0A=
    adjacent:     "/following-sibling::*[1]",=0A=
    laterSibling: '/following-sibling::*',=0A=
    tagName:      function(m) {=0A=
      if (m[1] =3D=3D '*') return '';=0A=
      return "[local-name()=3D'" + m[1].toLowerCase() +=0A=
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";=0A=
    },=0A=
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",=0A=
    id:           "[@id=3D'#{1}']",=0A=
    attrPresence: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      return new Template("[@#{1}]").evaluate(m);=0A=
    },=0A=
    attr: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      m[3] =3D m[5] || m[6];=0A=
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      var h =3D Selector.xpath.pseudos[m[1]];=0A=
      if (!h) return '';=0A=
      if (Object.isFunction(h)) return h(m);=0A=
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A=
    },=0A=
    operators: {=0A=
      '=3D':  "[@#{1}=3D'#{3}']",=0A=
      '!=3D': "[@#{1}!=3D'#{3}']",=0A=
      '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A=
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",=0A=
      '*=3D': "[contains(@#{1}, '#{3}')]",=0A=
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A=
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A=
    },=0A=
    pseudos: {=0A=
      'first-child': '[not(preceding-sibling::*)]',=0A=
      'last-child':  '[not(following-sibling::*)]',=0A=
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',=0A=
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",=0A=
      'checked':     "[@checked]",=0A=
      'disabled':    "[@disabled]",=0A=
      'enabled':     "[not(@disabled)]",=0A=
      'not': function(m) {=0A=
        var e =3D m[6], p =3D Selector.patterns,=0A=
            x =3D Selector.xpath, le, v;=0A=
=0A=
        var exclusion =3D [];=0A=
        while (e && le !=3D e && (/\S/).test(e)) {=0A=
          le =3D e;=0A=
          for (var i in p) {=0A=
            if (m =3D e.match(p[i])) {=0A=
              v =3D Object.isFunction(x[i]) ? x[i](m) : new =
Template(x[i]).evaluate(m);=0A=
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");=0A=
              e =3D e.replace(m[0], '');=0A=
              break;=0A=
            }=0A=
          }=0A=
        }=0A=
        return "[not(" + exclusion.join(" and ") + ")]";=0A=
      },=0A=
      'nth-child':      function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-last-child': function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-of-type':    function(m) {=0A=
        return Selector.xpath.pseudos.nth("position() ", m);=0A=
      },=0A=
      'nth-last-of-type': function(m) {=0A=
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);=0A=
      },=0A=
      'first-of-type':  function(m) {=0A=
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);=0A=
      },=0A=
      'last-of-type':   function(m) {=0A=
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);=0A=
      },=0A=
      'only-of-type':   function(m) {=0A=
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);=0A=
      },=0A=
      nth: function(fragment, m) {=0A=
        var mm, formula =3D m[6], predicate;=0A=
        if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
        if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
        if (mm =3D formula.match(/^(\d+)$/)) // digit only=0A=
          return '[' + fragment + "=3D " + mm[1] + ']';=0A=
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b=0A=
          if (mm[1] =3D=3D "-") mm[1] =3D -1;=0A=
          var a =3D mm[1] ? Number(mm[1]) : 1;=0A=
          var b =3D mm[2] ? Number(mm[2]) : 0;=0A=
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +=0A=
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";=0A=
          return new Template(predicate).evaluate({=0A=
            fragment: fragment, a: a, b: b });=0A=
        }=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  criteria: {=0A=
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);      c =3D false;',=0A=
    className:    'n =3D h.className(n, r, "#{1}", c);    c =3D false;',=0A=
    id:           'n =3D h.id(n, r, "#{1}", c);           c =3D false;',=0A=
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}", c); c =3D false;',=0A=
    attr: function(m) {=0A=
      m[3] =3D (m[5] || m[6]);=0A=
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}", =
c); c =3D false;').evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');=0A=
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    descendant:   'c =3D "descendant";',=0A=
    child:        'c =3D "child";',=0A=
    adjacent:     'c =3D "adjacent";',=0A=
    laterSibling: 'c =3D "laterSibling";'=0A=
  },=0A=
=0A=
  patterns: {=0A=
    // combinators must be listed first=0A=
    // (and descendant needs to be last combinator)=0A=
    laterSibling: /^\s*~\s*/,=0A=
    child:        /^\s*>\s*/,=0A=
    adjacent:     /^\s*\+\s*/,=0A=
    descendant:   /^\s/,=0A=
=0A=
    // selectors follow=0A=
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,=0A=
    id:           /^#([\w\-\*]+)(\b|$)/,=0A=
    className:    /^\.([\w\-\*]+)(\b|$)/,=0A=
    pseudo:=0A=
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|(?=3D\s|[:+~>]))/,=0A=
    attrPresence: /^\[([\w]+)\]/,=0A=
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^'"][^=
\]]*?)))?\]/=0A=
  },=0A=
=0A=
  // for Selector.match and Element#match=0A=
  assertions: {=0A=
    tagName: function(element, matches) {=0A=
      return matches[1].toUpperCase() =3D=3D =
element.tagName.toUpperCase();=0A=
    },=0A=
=0A=
    className: function(element, matches) {=0A=
      return Element.hasClassName(element, matches[1]);=0A=
    },=0A=
=0A=
    id: function(element, matches) {=0A=
      return element.id =3D=3D=3D matches[1];=0A=
    },=0A=
=0A=
    attrPresence: function(element, matches) {=0A=
      return Element.hasAttribute(element, matches[1]);=0A=
    },=0A=
=0A=
    attr: function(element, matches) {=0A=
      var nodeValue =3D Element.readAttribute(element, matches[1]);=0A=
      return nodeValue && Selector.operators[matches[2]](nodeValue, =
matches[5] || matches[6]);=0A=
    }=0A=
  },=0A=
=0A=
  handlers: {=0A=
    // UTILITY FUNCTIONS=0A=
    // joins two collections=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // marks an array of nodes for counting=0A=
    mark: function(nodes) {=0A=
      var _true =3D Prototype.emptyFunction;=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._countedByPrototype =3D _true;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._countedByPrototype =3D undefined;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    // mark each child node with its position (for nth calls)=0A=
    // "ofType" flag indicates whether we're indexing for nth-of-type=0A=
    // rather than nth-child=0A=
    index: function(parentNode, reverse, ofType) {=0A=
      parentNode._countedByPrototype =3D Prototype.emptyFunction;=0A=
      if (reverse) {=0A=
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {=0A=
          var node =3D nodes[i];=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;=0A=
        }=0A=
      } else {=0A=
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;=0A=
      }=0A=
    },=0A=
=0A=
    // filters out duplicates and extends all nodes=0A=
    unique: function(nodes) {=0A=
      if (nodes.length =3D=3D 0) return nodes;=0A=
      var results =3D [], n;=0A=
      for (var i =3D 0, l =3D nodes.length; i < l; i++)=0A=
        if (!(n =3D nodes[i])._countedByPrototype) {=0A=
          n._countedByPrototype =3D Prototype.emptyFunction;=0A=
          results.push(Element.extend(n));=0A=
        }=0A=
      return Selector.handlers.unmark(results);=0A=
    },=0A=
=0A=
    // COMBINATOR FUNCTIONS=0A=
    descendant: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, node.getElementsByTagName('*'));=0A=
      return results;=0A=
    },=0A=
=0A=
    child: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        for (var j =3D 0, child; child =3D node.childNodes[j]; j++)=0A=
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    adjacent: function(nodes) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        var next =3D this.nextElementSibling(node);=0A=
        if (next) results.push(next);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    laterSibling: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, Element.nextSiblings(node));=0A=
      return results;=0A=
    },=0A=
=0A=
    nextElementSibling: function(node) {=0A=
      while (node =3D node.nextSibling)=0A=
	      if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    previousElementSibling: function(node) {=0A=
      while (node =3D node.previousSibling)=0A=
        if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    // TOKEN FUNCTIONS=0A=
    tagName: function(nodes, root, tagName, combinator) {=0A=
      var uTagName =3D tagName.toUpperCase();=0A=
      var results =3D [], h =3D Selector.handlers;=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          // fastlane for ordinary descendant combinators=0A=
          if (combinator =3D=3D "descendant") {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              h.concat(results, node.getElementsByTagName(tagName));=0A=
            return results;=0A=
          } else nodes =3D this[combinator](nodes);=0A=
          if (tagName =3D=3D "*") return nodes;=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.tagName.toUpperCase() =3D=3D=3D uTagName) =
results.push(node);=0A=
        return results;=0A=
      } else return root.getElementsByTagName(tagName);=0A=
    },=0A=
=0A=
    id: function(nodes, root, id, combinator) {=0A=
      var targetNode =3D $(id), h =3D Selector.handlers;=0A=
      if (!targetNode) return [];=0A=
      if (!nodes && root =3D=3D document) return [targetNode];=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          if (combinator =3D=3D 'child') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (targetNode.parentNode =3D=3D node) return [targetNode];=0A=
          } else if (combinator =3D=3D 'descendant') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];=0A=
          } else if (combinator =3D=3D 'adjacent') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)=0A=
                return [targetNode];=0A=
          } else nodes =3D h[combinator](nodes);=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node =3D=3D targetNode) return [targetNode];=0A=
        return [];=0A=
      }=0A=
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];=0A=
    },=0A=
=0A=
    className: function(nodes, root, className, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      return Selector.handlers.byClassName(nodes, root, className);=0A=
    },=0A=
=0A=
    byClassName: function(nodes, root, className) {=0A=
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);=0A=
      var needle =3D ' ' + className + ' ';=0A=
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {=0A=
        nodeClassName =3D node.className;=0A=
        if (nodeClassName.length =3D=3D 0) continue;=0A=
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    attrPresence: function(nodes, root, attr, combinator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      var results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        if (Element.hasAttribute(node, attr)) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    attr: function(nodes, root, attr, value, operator, combinator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      var handler =3D Selector.operators[operator], results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        var nodeValue =3D Element.readAttribute(node, attr);=0A=
        if (nodeValue =3D=3D=3D null) continue;=0A=
        if (handler(nodeValue, value)) results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    pseudo: function(nodes, name, value, root, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      return Selector.pseudos[name](nodes, value, root);=0A=
    }=0A=
  },=0A=
=0A=
  pseudos: {=0A=
    'first-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.previousElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'last-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.nextElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'only-child': function(nodes, value, root) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))=0A=
          results.push(node);=0A=
      return results;=0A=
    },=0A=
    'nth-child':        function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root);=0A=
    },=0A=
    'nth-last-child':   function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true);=0A=
    },=0A=
    'nth-of-type':      function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, false, true);=0A=
    },=0A=
    'nth-last-of-type': function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true, true);=0A=
    },=0A=
    'first-of-type':    function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, false, true);=0A=
    },=0A=
    'last-of-type':     function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, true, true);=0A=
    },=0A=
    'only-of-type':     function(nodes, formula, root) {=0A=
      var p =3D Selector.pseudos;=0A=
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);=0A=
    },=0A=
=0A=
    // handles the an+b logic=0A=
    getIndices: function(a, b, total) {=0A=
      if (a =3D=3D 0) return b > 0 ? [b] : [];=0A=
      return $R(1, total).inject([], function(memo, i) {=0A=
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);=0A=
        return memo;=0A=
      });=0A=
    },=0A=
=0A=
    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type=0A=
    nth: function(nodes, formula, root, reverse, ofType) {=0A=
      if (nodes.length =3D=3D 0) return [];=0A=
      if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
      if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;=0A=
      h.mark(nodes);=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        if (!node.parentNode._countedByPrototype) {=0A=
          h.index(node.parentNode, reverse, ofType);=0A=
          indexed.push(node.parentNode);=0A=
        }=0A=
      }=0A=
      if (formula.match(/^\d+$/)) { // just a number=0A=
        formula =3D Number(formula);=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.nodeIndex =3D=3D formula) results.push(node);=0A=
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b=0A=
        if (m[1] =3D=3D "-") m[1] =3D -1;=0A=
        var a =3D m[1] ? Number(m[1]) : 1;=0A=
        var b =3D m[2] ? Number(m[2]) : 0;=0A=
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);=0A=
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {=0A=
          for (var j =3D 0; j < l; j++)=0A=
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);=0A=
        }=0A=
      }=0A=
      h.unmark(nodes);=0A=
      h.unmark(indexed);=0A=
      return results;=0A=
    },=0A=
=0A=
    'empty': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        // IE treats comments as element nodes=0A=
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;=0A=
        results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    'not': function(nodes, selector, root) {=0A=
      var h =3D Selector.handlers, selectorType, m;=0A=
      var exclusions =3D new Selector(selector).findElements(root);=0A=
      h.mark(exclusions);=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node._countedByPrototype) results.push(node);=0A=
      h.unmark(exclusions);=0A=
      return results;=0A=
    },=0A=
=0A=
    'enabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'disabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'checked': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.checked) results.push(node);=0A=
      return results;=0A=
    }=0A=
  },=0A=
=0A=
  operators: {=0A=
    '=3D':  function(nv, v) { return nv =3D=3D v; },=0A=
    '!=3D': function(nv, v) { return nv !=3D v; },=0A=
    '^=3D': function(nv, v) { return nv.startsWith(v); },=0A=
    '$=3D': function(nv, v) { return nv.endsWith(v); },=0A=
    '*=3D': function(nv, v) { return nv.include(v); },=0A=
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },=0A=
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }=0A=
  },=0A=
=0A=
  split: function(expression) {=0A=
    var expressions =3D [];=0A=
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, =
function(m) {=0A=
      expressions.push(m[1].strip());=0A=
    });=0A=
    return expressions;=0A=
  },=0A=
=0A=
  matchElements: function(elements, expression) {=0A=
    var matches =3D $$(expression), h =3D Selector.handlers;=0A=
    h.mark(matches);=0A=
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)=0A=
      if (element._countedByPrototype) results.push(element);=0A=
    h.unmark(matches);=0A=
    return results;=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (Object.isNumber(expression)) {=0A=
      index =3D expression; expression =3D false;=0A=
    }=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    expressions =3D Selector.split(expressions.join(','));=0A=
    var results =3D [], h =3D Selector.handlers;=0A=
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {=0A=
      selector =3D new Selector(expressions[i].strip());=0A=
      h.concat(results, selector.findElements(element));=0A=
    }=0A=
    return (l > 1) ? h.unique(results) : results;=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.IE) {=0A=
  Object.extend(Selector.handlers, {=0A=
    // IE returns comment nodes on getElementsByTagName("*").=0A=
    // Filter them out.=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        if (node.tagName !=3D=3D "!") a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node.removeAttribute('_countedByPrototype');=0A=
      return nodes;=0A=
    }=0A=
  });=0A=
}=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, options) {=0A=
    if (typeof options !=3D 'object') options =3D { hash: !!options };=0A=
    else if (Object.isUndefined(options.hash)) options.hash =3D true;=0A=
    var key, value, submitted =3D false, submit =3D options.submit;=0A=
=0A=
    var data =3D elements.inject({ }, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        key =3D element.name; value =3D $(element).getValue();=0A=
        if (value !=3D null && (element.type !=3D 'submit' || =
(!submitted &&=0A=
            submit !=3D=3D false && (!submit || key =3D=3D submit) && =
(submitted =3D true)))) {=0A=
          if (key in result) {=0A=
            // a key is already present; construct an array of values=0A=
            if (!Object.isArray(result[key])) result[key] =3D =
[result[key]];=0A=
            result[key].push(value);=0A=
          }=0A=
          else result[key] =3D value;=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
=0A=
    return options.hash ? data : Object.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, options) {=0A=
    return Form.serializeElements(Form.getElements(form), options);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('disable');=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('enable');=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    var elements =3D $(form).getElements().findAll(function(element) {=0A=
      return 'hidden' !=3D element.type && !element.disabled;=0A=
    });=0A=
    var firstByIndex =3D elements.findAll(function(element) {=0A=
      return element.hasAttribute('tabIndex') && element.tabIndex >=3D 0;=0A=
    }).sortBy(function(element) { return element.tabIndex }).first();=0A=
=0A=
    return firstByIndex ? firstByIndex : elements.find(function(element) =
{=0A=
      return ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  },=0A=
=0A=
  request: function(form, options) {=0A=
    form =3D $(form), options =3D Object.clone(options || { });=0A=
=0A=
    var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';=0A=
    if (action.blank()) action =3D window.location.href;=0A=
    options.parameters =3D form.serialize(true);=0A=
=0A=
    if (params) {=0A=
      if (Object.isString(params)) params =3D params.toQueryParams();=0A=
      Object.extend(options.parameters, params);=0A=
    }=0A=
=0A=
    if (form.hasAttribute('method') && !options.method)=0A=
      options.method =3D form.method;=0A=
=0A=
    return new Ajax.Request(action, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D { };=0A=
        pair[element.name] =3D value;=0A=
        return Object.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  setValue: function(element, value) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    Form.Element.Serializers[method](element, value);=0A=
    return element;=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    try {=0A=
      element.focus();=0A=
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||=0A=
          !['button', 'reset', 'submit'].include(element.type)))=0A=
        element.select();=0A=
    } catch (e) { }=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element, value) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element, value);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element, value);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element, value) {=0A=
    if (Object.isUndefined(value)) return element.checked ? =
element.value : null;=0A=
    else element.checked =3D !!value;=0A=
  },=0A=
=0A=
  textarea: function(element, value) {=0A=
    if (Object.isUndefined(value)) return element.value;=0A=
    else element.value =3D value;=0A=
  },=0A=
=0A=
  select: function(element, index) {=0A=
    if (Object.isUndefined(index))=0A=
      return this[element.type =3D=3D 'select-one' ?=0A=
        'selectOne' : 'selectMany'](element);=0A=
    else {=0A=
      var opt, value, single =3D !Object.isArray(index);=0A=
      for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
        opt =3D element.options[i];=0A=
        value =3D this.optionValue(opt);=0A=
        if (single) {=0A=
          if (value =3D=3D index) {=0A=
            opt.selected =3D true;=0A=
            return;=0A=
          }=0A=
        }=0A=
        else opt.selected =3D index.include(value);=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(this.optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  },=0A=
=0A=
  optionValue: function(opt) {=0A=
    // extend element because hasAttribute may not be native=0A=
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {=0A=
  initialize: function($super, element, frequency, callback) {=0A=
    $super(callback, frequency);=0A=
    this.element   =3D $(element);=0A=
    this.lastValue =3D this.getValue();=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    var value =3D this.getValue();=0A=
    if (Object.isString(this.lastValue) && Object.isString(value) ?=0A=
        this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value)) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D Class.create({=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    Form.getElements(this.element).each(this.registerCallback, this);=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) var Event =3D { };=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
  KEY_INSERT:   45,=0A=
=0A=
  cache: { },=0A=
=0A=
  relatedTarget: function(event) {=0A=
    var element;=0A=
    switch(event.type) {=0A=
      case 'mouseover': element =3D event.fromElement; break;=0A=
      case 'mouseout':  element =3D event.toElement;   break;=0A=
      default: return null;=0A=
    }=0A=
    return Element.extend(element);=0A=
  }=0A=
});=0A=
=0A=
Event.Methods =3D (function() {=0A=
  var isButton;=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    var buttonMap =3D { 0: 1, 1: 4, 2: 2 };=0A=
    isButton =3D function(event, code) {=0A=
      return event.button =3D=3D buttonMap[code];=0A=
    };=0A=
=0A=
  } else if (Prototype.Browser.WebKit) {=0A=
    isButton =3D function(event, code) {=0A=
      switch (code) {=0A=
        case 0: return event.which =3D=3D 1 && !event.metaKey;=0A=
        case 1: return event.which =3D=3D 1 && event.metaKey;=0A=
        default: return false;=0A=
      }=0A=
    };=0A=
=0A=
  } else {=0A=
    isButton =3D function(event, code) {=0A=
      return event.which ? (event.which =3D=3D=3D code + 1) : =
(event.button =3D=3D=3D code);=0A=
    };=0A=
  }=0A=
=0A=
  return {=0A=
    isLeftClick:   function(event) { return isButton(event, 0) },=0A=
    isMiddleClick: function(event) { return isButton(event, 1) },=0A=
    isRightClick:  function(event) { return isButton(event, 2) },=0A=
=0A=
    element: function(event) {=0A=
      var node =3D Event.extend(event).target;=0A=
      return Element.extend(node.nodeType =3D=3D Node.TEXT_NODE ? =
node.parentNode : node);=0A=
    },=0A=
=0A=
    findElement: function(event, expression) {=0A=
      var element =3D Event.element(event);=0A=
      if (!expression) return element;=0A=
      var elements =3D [element].concat(element.ancestors());=0A=
      return Selector.findElement(elements, expression, 0);=0A=
    },=0A=
=0A=
    pointer: function(event) {=0A=
      return {=0A=
        x: event.pageX || (event.clientX +=0A=
          (document.documentElement.scrollLeft || =
document.body.scrollLeft)),=0A=
        y: event.pageY || (event.clientY +=0A=
          (document.documentElement.scrollTop || =
document.body.scrollTop))=0A=
      };=0A=
    },=0A=
=0A=
    pointerX: function(event) { return Event.pointer(event).x },=0A=
    pointerY: function(event) { return Event.pointer(event).y },=0A=
=0A=
    stop: function(event) {=0A=
      Event.extend(event);=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
      event.stopped =3D true;=0A=
    }=0A=
  };=0A=
})();=0A=
=0A=
Event.extend =3D (function() {=0A=
  var methods =3D Object.keys(Event.Methods).inject({ }, function(m, =
name) {=0A=
    m[name] =3D Event.Methods[name].methodize();=0A=
    return m;=0A=
  });=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    Object.extend(methods, {=0A=
      stopPropagation: function() { this.cancelBubble =3D true },=0A=
      preventDefault:  function() { this.returnValue =3D false },=0A=
      inspect: function() { return "[object Event]" }=0A=
    });=0A=
=0A=
    return function(event) {=0A=
      if (!event) return false;=0A=
      if (event._extendedByPrototype) return event;=0A=
=0A=
      event._extendedByPrototype =3D Prototype.emptyFunction;=0A=
      var pointer =3D Event.pointer(event);=0A=
      Object.extend(event, {=0A=
        target: event.srcElement,=0A=
        relatedTarget: Event.relatedTarget(event),=0A=
        pageX:  pointer.x,=0A=
        pageY:  pointer.y=0A=
      });=0A=
      return Object.extend(event, methods);=0A=
    };=0A=
=0A=
  } else {=0A=
    Event.prototype =3D Event.prototype || =
document.createEvent("HTMLEvents").__proto__;=0A=
    Object.extend(Event.prototype, methods);=0A=
    return Prototype.K;=0A=
  }=0A=
})();=0A=
=0A=
Object.extend(Event, (function() {=0A=
  var cache =3D Event.cache;=0A=
=0A=
  function getEventID(element) {=0A=
    if (element._prototypeEventID) return element._prototypeEventID[0];=0A=
    arguments.callee.id =3D arguments.callee.id || 1;=0A=
    return element._prototypeEventID =3D [++arguments.callee.id];=0A=
  }=0A=
=0A=
  function getDOMEventName(eventName) {=0A=
    if (eventName && eventName.include(':')) return "dataavailable";=0A=
    return eventName;=0A=
  }=0A=
=0A=
  function getCacheForID(id) {=0A=
    return cache[id] =3D cache[id] || { };=0A=
  }=0A=
=0A=
  function getWrappersForEventName(id, eventName) {=0A=
    var c =3D getCacheForID(id);=0A=
    return c[eventName] =3D c[eventName] || [];=0A=
  }=0A=
=0A=
  function createWrapper(element, eventName, handler) {=0A=
    var id =3D getEventID(element);=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    if (c.pluck("handler").include(handler)) return false;=0A=
=0A=
    var wrapper =3D function(event) {=0A=
      if (!Event || !Event.extend ||=0A=
        (event.eventName && event.eventName !=3D eventName))=0A=
          return false;=0A=
=0A=
      Event.extend(event);=0A=
      handler.call(element, event);=0A=
    };=0A=
=0A=
    wrapper.handler =3D handler;=0A=
    c.push(wrapper);=0A=
    return wrapper;=0A=
  }=0A=
=0A=
  function findWrapper(id, eventName, handler) {=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    return c.find(function(wrapper) { return wrapper.handler =3D=3D =
handler });=0A=
  }=0A=
=0A=
  function destroyWrapper(id, eventName, handler) {=0A=
    var c =3D getCacheForID(id);=0A=
    if (!c[eventName]) return false;=0A=
    c[eventName] =3D c[eventName].without(findWrapper(id, eventName, =
handler));=0A=
  }=0A=
=0A=
  function destroyCache() {=0A=
    for (var id in cache)=0A=
      for (var eventName in cache[id])=0A=
        cache[id][eventName] =3D null;=0A=
  }=0A=
=0A=
  if (window.attachEvent) {=0A=
    window.attachEvent("onunload", destroyCache);=0A=
  }=0A=
=0A=
  return {=0A=
    observe: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var name =3D getDOMEventName(eventName);=0A=
=0A=
      var wrapper =3D createWrapper(element, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.addEventListener) {=0A=
        element.addEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.attachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    stopObserving: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var id =3D getEventID(element), name =3D =
getDOMEventName(eventName);=0A=
=0A=
      if (!handler && eventName) {=0A=
        getWrappersForEventName(id, eventName).each(function(wrapper) {=0A=
          element.stopObserving(eventName, wrapper.handler);=0A=
        });=0A=
        return element;=0A=
=0A=
      } else if (!eventName) {=0A=
        Object.keys(getCacheForID(id)).each(function(eventName) {=0A=
          element.stopObserving(eventName);=0A=
        });=0A=
        return element;=0A=
      }=0A=
=0A=
      var wrapper =3D findWrapper(id, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.removeEventListener) {=0A=
        element.removeEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.detachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      destroyWrapper(id, eventName, handler);=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    fire: function(element, eventName, memo) {=0A=
      element =3D $(element);=0A=
      if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)=0A=
        element =3D document.documentElement;=0A=
=0A=
      var event;=0A=
      if (document.createEvent) {=0A=
        event =3D document.createEvent("HTMLEvents");=0A=
        event.initEvent("dataavailable", true, true);=0A=
      } else {=0A=
        event =3D document.createEventObject();=0A=
        event.eventType =3D "ondataavailable";=0A=
      }=0A=
=0A=
      event.eventName =3D eventName;=0A=
      event.memo =3D memo || { };=0A=
=0A=
      if (document.createEvent) {=0A=
        element.dispatchEvent(event);=0A=
      } else {=0A=
        element.fireEvent(event.eventType, event);=0A=
      }=0A=
=0A=
      return Event.extend(event);=0A=
    }=0A=
  };=0A=
})());=0A=
=0A=
Object.extend(Event, Event.Methods);=0A=
=0A=
Element.addMethods({=0A=
  fire:          Event.fire,=0A=
  observe:       Event.observe,=0A=
  stopObserving: Event.stopObserving=0A=
});=0A=
=0A=
Object.extend(document, {=0A=
  fire:          Element.Methods.fire.methodize(),=0A=
  observe:       Element.Methods.observe.methodize(),=0A=
  stopObserving: Element.Methods.stopObserving.methodize(),=0A=
  loaded:        false=0A=
});=0A=
=0A=
(function() {=0A=
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,=0A=
     Matthias Miller, Dean Edwards and John Resig. */=0A=
=0A=
  var timer;=0A=
=0A=
  function fireContentLoadedEvent() {=0A=
    if (document.loaded) return;=0A=
    if (timer) window.clearInterval(timer);=0A=
    document.fire("dom:loaded");=0A=
    document.loaded =3D true;=0A=
  }=0A=
=0A=
  if (document.addEventListener) {=0A=
    if (Prototype.Browser.WebKit) {=0A=
      timer =3D window.setInterval(function() {=0A=
        if (/loaded|complete/.test(document.readyState))=0A=
          fireContentLoadedEvent();=0A=
      }, 0);=0A=
=0A=
      Event.observe(window, "load", fireContentLoadedEvent);=0A=
=0A=
    } else {=0A=
      document.addEventListener("DOMContentLoaded",=0A=
        fireContentLoadedEvent, false);=0A=
    }=0A=
=0A=
  } else {=0A=
    document.write("<script id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");=0A=
    $("__onDOMContentLoaded").onreadystatechange =3D function() {=0A=
      if (this.readyState =3D=3D "complete") {=0A=
        this.onreadystatechange =3D null;=0A=
        fireContentLoadedEvent();=0A=
      }=0A=
    };=0A=
  }=0A=
})();=0A=
/*------------------------------- DEPRECATED =
-------------------------------*/=0A=
=0A=
Hash.toQueryString =3D Object.toQueryString;=0A=
=0A=
var Toggle =3D { display: Element.toggle };=0A=
=0A=
Element.Methods.childOf =3D Element.Methods.descendantOf;=0A=
=0A=
var Insertion =3D {=0A=
  Before: function(element, content) {=0A=
    return Element.insert(element, {before:content});=0A=
  },=0A=
=0A=
  Top: function(element, content) {=0A=
    return Element.insert(element, {top:content});=0A=
  },=0A=
=0A=
  Bottom: function(element, content) {=0A=
    return Element.insert(element, {bottom:content});=0A=
  },=0A=
=0A=
  After: function(element, content) {=0A=
    return Element.insert(element, {after:content});=0A=
  }=0A=
};=0A=
=0A=
var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');=0A=
=0A=
// This should be moved to script.aculo.us; notice the deprecated methods=0A=
// further below, that map to the newer Element methods.=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D Element.cumulativeScrollOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  // Deprecation layer -- use newer Element methods now (1.5.2).=0A=
=0A=
  cumulativeOffset: Element.Methods.cumulativeOffset,=0A=
=0A=
  positionedOffset: Element.Methods.positionedOffset,=0A=
=0A=
  absolutize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.absolutize(element);=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.relativize(element);=0A=
  },=0A=
=0A=
  realOffset: Element.Methods.cumulativeScrollOffset,=0A=
=0A=
  offsetParent: Element.Methods.getOffsetParent,=0A=
=0A=
  page: Element.Methods.viewportOffset,=0A=
=0A=
  clone: function(source, target, options) {=0A=
    options =3D options || { };=0A=
    return Element.clonePosition(target, source, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){=0A=
  function iter(name) {=0A=
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' =
" + name + " ')]";=0A=
  }=0A=
=0A=
  instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?=0A=
  function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') =
: iter(className);=0A=
    return cond ? document._getElementsByXPath('.//*' + cond, element) : =
[];=0A=
  } : function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);=0A=
    if (!classNames && !className) return elements;=0A=
=0A=
    var nodes =3D $(element).getElementsByTagName('*');=0A=
    className =3D ' ' + className + ' ';=0A=
=0A=
    for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {=0A=
      if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||=0A=
          (classNames && classNames.all(function(name) {=0A=
            return !name.toString().blank() && cn.include(' ' + name + ' =
');=0A=
          }))))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  };=0A=
=0A=
  return function(className, parentElement) {=0A=
    return $(parentElement || =
document.body).getElementsByClassName(className);=0A=
  };=0A=
}(Element.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/ajax/scriptaculous/src/scriptaculous.js

// script.aculo.us scriptaculous.js v1.7.1_beta3, Fri May 25 17:19:41 =
+0200 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Scriptaculous =3D {=0A=
  Version: '1.7.1_beta3',=0A=
  require: function(libraryName) {=0A=
    // inserting via DOM fails in Safari 2.0, so brute force approach=0A=
    document.write('<script type=3D"text/javascript" =
src=3D"'+libraryName+'"></script>');=0A=
  },=0A=
  REQUIRED_PROTOTYPE: '1.5.1',=0A=
  load: function() {=0A=
    function convertVersionString(versionString){=0A=
      var r =3D versionString.split('.');=0A=
      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + =
parseInt(r[2]);=0A=
    }=0A=
 =0A=
    if((typeof Prototype=3D=3D'undefined') || =0A=
       (typeof Element =3D=3D 'undefined') || =0A=
       (typeof Element.Methods=3D=3D'undefined') ||=0A=
       (convertVersionString(Prototype.Version) < =0A=
        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))=0A=
       throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D " +=0A=
        Scriptaculous.REQUIRED_PROTOTYPE);=0A=
    =0A=
    $A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
    }).each( function(s) {=0A=
      var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
      var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
      (includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider,sound').split(',').each(=0A=
       function(include) { Scriptaculous.require(path+include+'.js') });=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Scriptaculous.load();
------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/utils.js

var slert=3Dalert;=0A=
=0A=
function debug(obj) {=0A=
   var x =3D 'Dump of ' + obj + '\r\n';=0A=
   for (i in obj) {=0A=
      x +=3D i + ' =3D ' + obj[i] + '\r\n';=0A=
   }=0A=
=0A=
   prompt('Object dump - copy & paste into text editor', x);=0A=
}=0A=
=0A=
/*=0A=
 =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A=
	 Javascript Inheritance, see =
http://javascript.crockford.com/inheritance.html=0A=
	 Also read :=0A=
		http://www.webreference.com/js/column79/=0A=
			(Object-Oriented Programming with JavaScript, Part I: Inheritance)=0A=
		http://www.webreference.com/js/column80/=0A=
			(Object-Oriented Programming with JavaScript, Part II: Methods)=0A=
		http://w3future.com/html/stories/=0A=
*/=0A=
  // The following from =
http://www.u.arizona.edu/~jscully/javafication.html=0A=
  var inherits =3D "extends";=0A=
  var br =3D "<br>";=0A=
  //This method was deviously invented by Douglas Crockford.=0A=
  Function.prototype.method =3D function (name, func)=0A=
  {=0A=
     this.prototype[name] =3D func;=0A=
     return this;=0A=
  };=0A=
=0A=
  // And this one was deviously invented by me, after finding out how =
cool javascript=0A=
  // really was from Douglas Crockford's website.=0A=
  Function.prototype['extends'] =3D function (Parent)=0A=
  {=0A=
     var prototypeExists =3D false;=0A=
     var isOpera =3D (navigator.userAgent.toLowerCase().indexOf("opera") =
!=3D -1);=0A=
     var self =3D this;=0A=
     self.prototype.base =3D function()=0A=
     {=0A=
        var s =3D "";=0A=
        var parentClass;=0A=
=0A=
        for (var i =3D 0; i < arguments.length-1;i++)=0A=
        {=0A=
           if (typeof(arguments[i]) =3D=3D 'string')=0A=
              s +=3D "'"+arguments[i]+"'";=0A=
=0A=
           else s +=3D arguments[i];=0A=
=0A=
           s +=3D",";=0A=
        }=0A=
=0A=
        if (typeof(arguments[arguments.length-1]) =3D=3D 'string')=0A=
           s +=3D "'"+arguments[arguments.length-1]+"'";=0A=
=0A=
        else s +=3D arguments[arguments.length-1];=0A=
=0A=
        parentClass =3D eval("new Parent("+s+")");=0A=
=0A=
=0A=
        for (var i in parentClass)=0A=
        {=0A=
           prototypeExists =3D false;=0A=
           if (isOpera =3D=3D true && i.indexOf('toString') !=3D -1) =
/*Then do nothing*/ ;=0A=
           else=0A=
           {=0A=
              for (var ii in self.prototype)=0A=
              {=0A=
                 if (i.indexOf(ii) !=3D -1) prototypeExists =3D true;=0A=
              }=0A=
              if (!prototypeExists) self.prototype[i] =3D parentClass[i];=0A=
           }=0A=
        }=0A=
=0A=
        if ((self.prototype.toString).toString().indexOf("[native =
code]") !=3D -1)=0A=
          self.prototype['toString'] =3D parentClass.toString;=0A=
=0A=
        return parentClass;=0A=
     };=0A=
=0A=
  };=0A=
=0A=
	// "swiss" function for multiple inheritance=0A=
	// copies parent member variables and methods into the function=0A=
	Function.method('swiss', function (parent) {=0A=
	    for (var i =3D 1; i < arguments.length; i +=3D 1) {=0A=
	        var name =3D arguments[i];=0A=
	        this.prototype[name] =3D parent.prototype[name];=0A=
	    }=0A=
	    return this;=0A=
	});=0A=
=0A=
=0A=
	// from http://www.webreference.com/js/column79/7.html=0A=
	function instanceOf(object, constructorFunction) {=0A=
	  while (object !=3D null) {=0A=
	    if (object =3D=3D constructorFunction.prototype)=0A=
	     {return true}=0A=
	    object =3D object.__proto__;=0A=
	  }=0A=
	  return false;=0A=
	}=0A=
// =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A=
=0A=
/*=0A=
Internet Explorer holds references to objects which are not JavaScript =
objects, and=0A=
which produce errors if they are treated as JavaScript objects. This is =
a problem because=0A=
typeof identifies them as JavaScript objects. The isAlien() function =
will return true if a=0A=
is one of those alien objects.=0A=
*/=0A=
function isAlien(a) {=0A=
   return isObject(a) && typeof a.constructor !=3D 'function';=0A=
}=0A=
=0A=
/*=0A=
isArray() returns true if a is an array, meaning that it was produced by =
the Array constructor=0A=
or by using the [ ] array literal notation.=0A=
*/=0A=
function isArray(a) {=0A=
    return isObject(a) && a.constructor =3D=3D Array;=0A=
}=0A=
=0A=
/*=0A=
isBoolean(a) returns true if a is one of the boolean values, true or =
false.=0A=
*/=0A=
function isBoolean(a) {=0A=
    return typeof a =3D=3D 'boolean';=0A=
}=0A=
=0A=
/*=0A=
isEmpty(a) returns true if a is an object or array or function =
containing no enumerable members.=0A=
*/=0A=
function isEmpty(o) {=0A=
    var i, v;=0A=
    if (isObject(o)) {=0A=
        for (i in o) {=0A=
            v =3D o[i];=0A=
            if (isUndefined(v) && isFunction(v)) {=0A=
                return false;=0A=
            }=0A=
        }=0A=
    }=0A=
    return true;=0A=
}=0A=
=0A=
/*=0A=
isFunction(a) returns true if a is a function. Beware that some native =
functions in IE were=0A=
made to look like objects instead of functions. This function does not =
detect that.=0A=
*/=0A=
function isFunction(a) {=0A=
    return typeof a =3D=3D 'function';=0A=
}=0A=
=0A=
/*=0A=
isNull(a) returns true if a is the null value.=0A=
*/=0A=
function isNull(a) {=0A=
    return typeof a =3D=3D 'object' && !a;=0A=
}=0A=
=0A=
/*=0A=
sNumber(a) returns true if a is a finite number. It returns false if a =
is NaN or Infinite.=0A=
It also returns false if a is a string that could be converted to a =
number.=0A=
*/=0A=
function isNumber(a) {=0A=
    return typeof a =3D=3D 'number' && isFinite(a);=0A=
}=0A=
=0A=
/*=0A=
isObject(a) returns true if a is an object, and array, or a function. It =
returns false if=0A=
 a is a string, a number, a boolean, or null, or undefined.=0A=
*/=0A=
function isObject(a) {=0A=
    return (a && typeof a =3D=3D 'object') || isFunction(a);=0A=
}=0A=
=0A=
/*=0A=
isString(a) returns true if a is a string.=0A=
*/=0A=
function isString(a) {=0A=
    return typeof a =3D=3D 'string';=0A=
}=0A=
=0A=
/*=0A=
isUndefined(a) returns true if a is the undefined value. You can get the =
undefined value=0A=
from an uninitialized variable or from a missing member of an object.=0A=
*/=0A=
function isUndefined(a) {=0A=
    return typeof a =3D=3D 'undefined';=0A=
}=0A=
=0A=
with (String) {=0A=
=0A=
/*=0A=
entityify() produces a string in which '<', '>', and '&' are replaced =
with their HTML entity equivalents.=0A=
This is essential for placing arbitrary strings into HTML texts. So,=0A=
=0A=
    "if (a < b && b > c) {".entityify()=0A=
=0A=
produces=0A=
=0A=
    "if (a &lt; b &amp;&amp; b &gt; c) {"=0A=
=0A=
*/=0A=
    method('entityify', function () {=0A=
        return this.replace(/&/g, "&amp;").replace(/</g,=0A=
            "&lt;").replace(/>/g, "&gt;");=0A=
    });=0A=
=0A=
/*=0A=
quote() produces a quoted string. This method returns a string which is =
like the original string except=0A=
that it is wrapped in quotes and all quote and backslash characters are =
preceded with backslash.=0A=
*/=0A=
    method('quote', function () {=0A=
        var c, i, l =3D this.length, o =3D '"';=0A=
        for (i =3D 0; i < l; i +=3D 1) {=0A=
            c =3D this.charAt(i);=0A=
            if (c >=3D ' ') {=0A=
                if (c =3D=3D '\\' || c =3D=3D '"') {=0A=
                    o +=3D '\\';=0A=
                }=0A=
                o +=3D c;=0A=
            } else {=0A=
                switch (c) {=0A=
                case '\b':=0A=
                    o +=3D '\\b';=0A=
                    break;=0A=
                case '\f':=0A=
                    o +=3D '\\f';=0A=
                    break;=0A=
                case '\n':=0A=
                    o +=3D '\\n';=0A=
                    break;=0A=
                case '\r':=0A=
                    o +=3D '\\r';=0A=
                    break;=0A=
                case '\t':=0A=
                    o +=3D '\\t';=0A=
                    break;=0A=
                default:=0A=
                    c =3D c.charCodeAt();=0A=
                    o +=3D '\\u00' + Math.floor(c / 16).toString(16) +=0A=
                        (c % 16).toString(16);=0A=
                }=0A=
            }=0A=
        }=0A=
        return o + '"';=0A=
    });=0A=
=0A=
/*=0A=
supplant() does variable substitution on the string. It scans through =
the string looking for expressions=0A=
enclosed in { } braces. If an expression is found, use it as a key on =
the object, and if the key has a=0A=
string value or number value, it is substituted for the bracket =
expression and it repeats. This is useful=0A=
for automatically fixing URLs. So=0A=
=0A=
param =3D {domain: 'valvion.com', media: 'http://media.{domain}/'};=0A=
url =3D "{media}logo.gif".supplant(param);=0A=
=0A=
produces a url containing "http://media.valvion.com/logo.gif".=0A=
*/=0A=
    method('supplant', function (o) {=0A=
        var i, j, s =3D this, v;=0A=
        for (;;) {=0A=
            i =3D s.lastIndexOf('{');=0A=
            if (i < 0) {=0A=
                break;=0A=
            }=0A=
            j =3D s.indexOf('}', i);=0A=
            if (i + 1 >=3D j) {=0A=
                break;=0A=
            }=0A=
            v =3D o[s.substring(i + 1, j)];=0A=
            if (!isString(v) && !isNumber(v)) {=0A=
                break;=0A=
            }=0A=
            s =3D s.substring(0, i) + v + s.substring(j + 1);=0A=
        }=0A=
        return s;=0A=
    });=0A=
=0A=
/*=0A=
The trim() method removes whitespace characters from the beginning and =
end of the string.=0A=
*/=0A=
    method('trim', function () {=0A=
        return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
apply() is a method of a function which calls the function as though it =
is a method of the=0A=
object. The this variable will be bound to the object. args is an =
optional array of values=0A=
which will be used as the function's arguments.=0A=
*/=0A=
if (!isFunction(Function.apply)) {=0A=
    Function.method('apply', function (o, a) {=0A=
        var r, x =3D '____apply';=0A=
        if (!isObject(o)) {=0A=
            o =3D {};=0A=
        }=0A=
        o[x] =3D this;=0A=
        switch ((a && a.length) || 0) {=0A=
        case 0:=0A=
            r =3D o[x]();=0A=
            break;=0A=
        case 1:=0A=
            r =3D o[x](a[0]);=0A=
            break;=0A=
        case 2:=0A=
            r =3D o[x](a[0], a[1]);=0A=
            break;=0A=
        case 3:=0A=
            r =3D o[x](a[0], a[1], a[2]);=0A=
            break;=0A=
        case 4:=0A=
            r =3D o[x](a[0], a[1], a[2], a[3]);=0A=
            break;=0A=
        case 5:=0A=
            r =3D o[x](a[0], a[1], a[2], a[3], a[4]);=0A=
            break;=0A=
        case 6:=0A=
            r =3D o[x](a[0], a[1], a[2], a[3], a[4], a[5]);=0A=
            break;=0A=
        default:=0A=
            alert('Too many arguments to apply.');=0A=
        }=0A=
        delete o[x];=0A=
        return r;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
These array methods are required by the ECMAScript Specification, but =
they did not make it=0A=
into IE 5.0, so we will add them ourselves. The push and pop methods =
allow use to use an array=0A=
as a stack. The shift and unshift methods allow us to use an array as a =
double-ended queue.=0A=
The splice method allows us to use an array as a string of values.All of =
these methods modify the array.=0A=
=0A=
JavaScript arrays are implemented as hashtables, but when using these =
methods, it is easier to=0A=
think about traditional arrays, which are a contiguous series of =
numbered slots.=0A=
*/=0A=
=0A=
/*=0A=
The pop() method removes the last item from an array and returns it.=0A=
*/=0A=
if (!isFunction(Array.prototype.pop)) {=0A=
    Array.method('pop', function () {=0A=
        return this.splice(this.length - 1, 1)[0];=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
The push() method appends one or more elements to the end of an array. =
The new length of the array is returned.=0A=
*/=0A=
if (!isFunction(Array.prototype.push)) {=0A=
    Array.method('push', function () {=0A=
        this.splice.apply(this,=0A=
            [this.length, =
0].concat(Array.prototype.slice.apply(arguments)));=0A=
        return this.length;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
The shift() method removes the [0] element from the array and returns =
it. It also reduces the subscripts of all=0A=
of the remaining elements in the array by one.=0A=
*/=0A=
if (!isFunction(Array.prototype.shift)) {=0A=
    Array.method('shift', function () {=0A=
        return this.splice(0, 1)[0];=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
The splice() method deletes elements starting at the start  index, and =
inserts new elements at the same point.=0A=
It returns an array containing the deleted values. Do not confuse the =
splice() method with the slice()  method=0A=
or the split() method.=0A=
*/=0A=
if (!isFunction(Array.prototype.splice)) {=0A=
    Array.method('splice', function (s, d) {=0A=
        var max =3D Math.max,=0A=
            min =3D Math.min,=0A=
            a =3D [], // The return value array=0A=
            e,  // element=0A=
            i =3D max(arguments.length - 2, 0),   // insert count=0A=
            k =3D 0,=0A=
            l =3D this.length,=0A=
            n,  // new length=0A=
            v,  // delta=0A=
            x;  // shift count=0A=
=0A=
        s =3D s || 0;=0A=
        if (s < 0) {=0A=
            s +=3D l;=0A=
        }=0A=
        s =3D max(min(s, l), 0);  // start point=0A=
        d =3D max(min(isNumber(d) ? d : l, l - s), 0);    // delete count=0A=
        v =3D i - d;=0A=
        n =3D l + v;=0A=
        while (k < d) {=0A=
            e =3D this[s + k];=0A=
            if (!isUndefined(e)) {=0A=
                a[k] =3D e;=0A=
            }=0A=
            k +=3D 1;=0A=
        }=0A=
        x =3D l - s - d;=0A=
        if (v < 0) {=0A=
            k =3D s + i;=0A=
            while (x) {=0A=
                this[k] =3D this[k - v];=0A=
                k +=3D 1;=0A=
                x -=3D 1;=0A=
            }=0A=
            this.length =3D n;=0A=
        } else if (v > 0) {=0A=
            k =3D 1;=0A=
            while (x) {=0A=
                this[n - k] =3D this[l - k];=0A=
                k +=3D 1;=0A=
                x -=3D 1;=0A=
            }=0A=
        }=0A=
        for (k =3D 0; k < i; ++k) {=0A=
            this[s + k] =3D arguments[k + 2];=0A=
        }=0A=
        return a;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
The unshift() method inserts new elements to the beginning of an array. =
The new length of the array is returned.=0A=
*/=0A=
if (!isFunction(Array.prototype.unshift)) {=0A=
    Array.method('unshift', function () {=0A=
        this.splice.apply(this,=0A=
            [0, 0].concat(Array.prototype.slice.apply(arguments)));=0A=
        return this.length;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
   The each() method iterates over each element in the array and =
executes the closure passed to it=0A=
   by Toby Kurien=0A=
*/=0A=
if (!isFunction(Array.prototype.each)) {=0A=
    Array.method('each', function (f) {=0A=
      if (!isFunction(f)) return;=0A=
      if (this.length =3D=3D 0) return;=0A=
=0A=
      for (var i=3D0; i < this.length; i++) {=0A=
         f(this[i], i, i=3D=3D(this.length-1));=0A=
      }=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
   The collect() method iterates over each element in the array and =
executes the closure passed to it and returns=0A=
   a new array with the function applied=0A=
   by Toby Kurien=0A=
*/=0A=
if (!isFunction(Array.prototype.collect)) {=0A=
    Array.method('collect', function (f) {=0A=
      var newArray =3D new Array(this.length);=0A=
      if (!isFunction(f)) return newArray;=0A=
      if (this.length =3D=3D 0) return newArray;=0A=
=0A=
      for (var i=3D0; i < this.length; i++) {=0A=
         newArray[i] =3D f(this[i], i, i=3D=3D(this.length-1));=0A=
      }=0A=
      return newArray;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
   The indexOf() method iterates over each element in the array and =
returns the index of where the =0A=
   item occurs in the array, or -1 if it doesn't=0A=
   by Toby Kurien=0A=
*/=0A=
if (!isFunction(Array.prototype.indexOf)) {=0A=
    Array.method('indexOf', function (obj) {=0A=
      if (this.length =3D=3D 0) return -1;=0A=
=0A=
      for (var i=3D0; i < this.length; i++) {=0A=
         if (this[i] =3D=3D obj) return i;=0A=
      }=0A=
      =0A=
      return -1;=0A=
    });=0A=
}=0A=
=0A=
/*=0A=
   The find() method iterates over each element in the array and returns =
the index of where the =0A=
   supplied function returns true, or -1 if it doesn't=0A=
   by Toby Kurien=0A=
*/=0A=
if (!isFunction(Array.prototype.find)) {=0A=
    Array.method('find', function (func) {=0A=
      if (this.length =3D=3D 0) return -1;=0A=
=0A=
      for (var i=3D0; i < this.length; i++) {=0A=
         if (func(this[i])) return i;=0A=
      }=0A=
      =0A=
      return -1;=0A=
    });=0A=
}=0A=
=0A=
=0A=
/*=0A=
	From http://www.crockford.com/javascript/memory/leak.html=0A=
	To avoid memory leaks in IE when deleting DOM objects=0A=
=0A=
   The purge function takes a reference to a DOM element as an argument. =
It loops through the element's=0A=
   attributes. If it finds any functions, it nulls them out. This breaks =
the cycle, allowing memory to be reclaimed.=0A=
   It will also look at all of the element's descendent elements, and =
clear out all of their cycles as well. The=0A=
   purge function is harmless on Mozilla and Opera. It is essential on =
IE. The purge function should be called before=0A=
   removing any element, either by the removeChild method, or by setting =
the innerHTML property.=0A=
*/=0A=
function purge(d) {=0A=
    var a =3D d.attributes, i, l, n;=0A=
    if (a) {=0A=
        l =3D a.length;=0A=
        for (i =3D 0; i < l; i +=3D 1) {=0A=
            n =3D a[i].name;=0A=
            if (typeof d[n] =3D=3D=3D 'function') {=0A=
                d[n] =3D null;=0A=
            }=0A=
        }=0A=
    }=0A=
    a =3D d.childNodes;=0A=
    if (a) {=0A=
        l =3D a.length;=0A=
        for (i =3D 0; i < l; i +=3D 1) {=0A=
            purge(d.childNodes[i]);=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
// =
*************************************************************************=
**********=0A=
// The following functions return the top, left, height and width of an =
html element=0A=
function getTop(element) {=0A=
   var top =3D element.offsetTop;=0A=
   if (element.offsetParent !=3D null) {=0A=
      return top + getTop(element.offsetParent);            =0A=
   }=0A=
   return top;=0A=
}=0A=
=0A=
function getLeft(element) {=0A=
   var left =3D element.offsetLeft;=0A=
   if (element.offsetParent !=3D null) {=0A=
      return left + getLeft(element.offsetParent);            =0A=
   }=0A=
   return left;=0A=
}=0A=
=0A=
function getHeight(element) {=0A=
   var height =3D element.offsetTop;=0A=
   if (element.offsetParent !=3D null) {=0A=
      return height + getHeight(element.offsetParent);            =0A=
   }=0A=
   return height;=0A=
}=0A=
=0A=
function getWidth(element) {=0A=
   var width =3D element.offsetTop;=0A=
   if (element.offsetParent !=3D null) {=0A=
      return width + getWidth(element.offsetParent);            =0A=
   }=0A=
   return width;=0A=
}=0A=
=0A=
// =
*************************************************************************=
**********=0A=
// expandCode() - replaces templates containing [$variable$] with values =
of the variable =0A=
function expandCode(str, hash) {=0A=
   var start =3D str.indexOf('[$');=0A=
   if (start >=3D 0) {=0A=
      end =3D str.indexOf('$]', start);=0A=
      if (end > 0) {=0A=
         var prefix =3D str.substring(0, start);=0A=
         var code =3D str.substring(start+2, end);=0A=
         var suffix =3D str.substring(end+2);=0A=
         var codeOutput =3D "";=0A=
         try {=0A=
            if (hash !=3D null) {=0A=
               codeOutput =3D hash.eval(code);              =0A=
            } else {=0A=
               codeOutput =3D eval(code);               =0A=
            }=0A=
         } catch (ex) {=0A=
            codeOutput =3D "Error: " + ex;=0A=
         }=0A=
         str =3D prefix + codeOutput + suffix;=0A=
      } else {=0A=
         var prefix =3D str.substring(0, start);=0A=
         var suffix =3D str.substring(start+2);=0A=
         str =3D prefix +  suffix;=0A=
      }=0A=
   }=0A=
   =0A=
   var start =3D str.indexOf('[$');=0A=
   if (start >=3D 0) {=0A=
      return expandCode(str, hash);=0A=
   } else {=0A=
      return str;=0A=
   }=0A=
}=0A=
=0A=
/**=0A=
 * From http://peter.michaux.ca/article/3556=0A=
 * This method uses the "lazy definition" technique to redefine itself =
after it's been called once.=0A=
 * It returns the amount that the web page has scrolled by, with =
cross-browser support=0A=
 */=0A=
var getScrollY =3D function() {=0A=
    if (typeof window.pageYOffset =3D=3D 'number') {=0A=
=0A=
        getScrollY =3D function() {=0A=
            return window.pageYOffset;=0A=
        };=0A=
=0A=
    } else if ((typeof document.compatMode =3D=3D 'string') &&=0A=
               (document.compatMode.indexOf('CSS') >=3D 0) &&=0A=
               (document.documentElement) &&=0A=
               (typeof document.documentElement.scrollTop =3D=3D =
'number')) {=0A=
=0A=
        getScrollY =3D function() {=0A=
            return document.documentElement.scrollTop;=0A=
        };=0A=
=0A=
    } else if ((document.body) &&=0A=
               (typeof document.body.scrollTop =3D=3D 'number')) {=0A=
=0A=
      getScrollY =3D function() {=0A=
          return document.body.scrollTop;=0A=
      }=0A=
=0A=
    } else {=0A=
=0A=
      getScrollY =3D function() {=0A=
          return NaN;=0A=
      };=0A=
=0A=
    }=0A=
=0A=
    return getScrollY();=0A=
}=0A=
=0A=
/**=0A=
*=0A=
* URL encode / decode=0A=
* http://www.webtoolkit.info/=0A=
*=0A=
**/=0A=
=0A=
var Url =3D {=0A=
=0A=
    // public method for url encoding=0A=
    encode : function (string) {=0A=
        return escape(this._utf8_encode(string));=0A=
    },=0A=
=0A=
    // public method for url decoding=0A=
    decode : function (string) {=0A=
        return this._utf8_decode(unescape(string));=0A=
    },=0A=
=0A=
    // private method for UTF-8 encoding=0A=
    _utf8_encode : function (string) {=0A=
        string =3D string.replace(/\r\n/g,"\n");=0A=
        var utftext =3D "";=0A=
=0A=
        for (var n =3D 0; n < string.length; n++) {=0A=
=0A=
            var c =3D string.charCodeAt(n);=0A=
=0A=
            if (c < 128) {=0A=
                utftext +=3D String.fromCharCode(c);=0A=
            }=0A=
            else if((c > 127) && (c < 2048)) {=0A=
                utftext +=3D String.fromCharCode((c >> 6) | 192);=0A=
                utftext +=3D String.fromCharCode((c & 63) | 128);=0A=
            }=0A=
            else {=0A=
                utftext +=3D String.fromCharCode((c >> 12) | 224);=0A=
                utftext +=3D String.fromCharCode(((c >> 6) & 63) | 128);=0A=
                utftext +=3D String.fromCharCode((c & 63) | 128);=0A=
            }=0A=
=0A=
        }=0A=
=0A=
        return utftext;=0A=
    },=0A=
=0A=
    // private method for UTF-8 decoding=0A=
    _utf8_decode : function (utftext) {=0A=
        var string =3D "";=0A=
        var i =3D 0;=0A=
        var c =3D c1 =3D c2 =3D 0;=0A=
=0A=
        while ( i < utftext.length ) {=0A=
=0A=
            c =3D utftext.charCodeAt(i);=0A=
=0A=
            if (c < 128) {=0A=
                string +=3D String.fromCharCode(c);=0A=
                i++;=0A=
            }=0A=
            else if((c > 191) && (c < 224)) {=0A=
                c2 =3D utftext.charCodeAt(i+1);=0A=
                string +=3D String.fromCharCode(((c & 31) << 6) | (c2 & =
63));=0A=
                i +=3D 2;=0A=
            }=0A=
            else {=0A=
                c2 =3D utftext.charCodeAt(i+1);=0A=
                c3 =3D utftext.charCodeAt(i+2);=0A=
                string +=3D String.fromCharCode(((c & 15) << 12) | ((c2 =
& 63) << 6) | (c3 & 63));=0A=
                i +=3D 3;=0A=
            }=0A=
=0A=
        }=0A=
=0A=
        return string;=0A=
    }=0A=
=0A=
}=0A=
=0A=
// Alternative to window.onload - this one runs the script before all =
images have been loaded (but HTML is ready). =0A=
// Call domPageReady() at the end of the page so that other scripts =
don't overwrite the window.onload method. =0A=
// @see http://www.hunlock.com/blogs/Are_you_ready_for_this =0A=
// To register on load listeners, use registerOnLoad(function)=0A=
if (!window.registerOnLoad) {=0A=
   var ranOnload=3Dfalse; // Flag to determine if we've ran the starting =
stack already.=0A=
   startStack=3Dfunction() { };  // A stack of functions to run =
onload/domready=0A=
   =0A=
   window.registerOnLoad =3D function(func) {=0A=
      var orgOnLoad =3D startStack;=0A=
      startStack =3D function () {=0A=
         orgOnLoad();=0A=
         func();=0A=
         return;=0A=
      }=0A=
   }=0A=
   =0A=
   if (document.addEventListener) {=0A=
     // Mozilla actually has a DOM READY event.=0A=
      document.addEventListener("DOMContentLoaded", function(){if =
(!ranOnload) {ranOnload=3Dtrue; startStack();}}, false);=0A=
   }  else if (document.all && !window.opera) {=0A=
     // This is the IE style which exploits a property of the (standards =
defined) defer attribute=0A=
     document.write("<scr" + "ipt id=3D'DOMReady' defer=3Dtrue " + =
"src=3D//:><\/scr" + "ipt>");  =0A=
     document.getElementById("DOMReady").onreadystatechange=3Dfunction(){=0A=
       if (this.readyState=3D=3D"complete"&&(!ranOnload)){=0A=
         ranOnload=3Dtrue;=0A=
         startStack();=0A=
       }=0A=
     }=0A=
   }=0A=
}=0A=
=0A=
function domPageReady() {=0A=
   var orgOnLoad=3Dwindow.onload;=0A=
   registerOnLoad(orgOnLoad);=0A=
   window.onload=3Dfunction() {=0A=
      if (!ranOnload) {=0A=
        ranOnload=3Dtrue;=0A=
        startStack();=0A=
      }=0A=
   }=0A=
}=0A=
=0A=
/**=0A=
 * Sets a Cookie with the given name and value.=0A=
 * <p/>=0A=
 * name       Name of the cookie=0A=
 * value      Value of the cookie=0A=
 * [expires]  Expiration date of the cookie (default: end of current =
session)=0A=
 * [path]     Path where the cookie is valid (default: path of calling =
document)=0A=
 * [domain]   Domain where the cookie is valid=0A=
 * (default: domain of calling document)=0A=
 * [secure]   Boolean value indicating if the cookie transmission =
requires a=0A=
 * secure transmission=0A=
 */=0A=
function setCookie(name, value, expires, path, domain, secure) {=0A=
   document.cookie =3D name + "=3D" + escape(value) +=0A=
         ((expires) ? "; expires=3D" + expires.toGMTString() : "") +=0A=
         ((path) ? "; path=3D" + path : "") +=0A=
         ((domain) ? "; domain=3D" + domain : "") +=0A=
         ((secure) ? "; secure" : "");=0A=
}=0A=
=0A=
/**=0A=
 * Gets the value of the specified cookie.=0A=
 * <p/>=0A=
 * name  Name of the desired cookie.=0A=
 * <p/>=0A=
 * Returns a string containing value of specified cookie,=0A=
 * or null if cookie does not exist.=0A=
 */=0A=
function getCookie(name) {=0A=
   var dc =3D document.cookie;=0A=
   var prefix =3D name + "=3D";=0A=
   var begin =3D dc.indexOf("; " + prefix);=0A=
   if (begin =3D=3D -1) {=0A=
      begin =3D dc.indexOf(prefix);=0A=
      if (begin !=3D 0) return null;=0A=
   } else {=0A=
      begin +=3D 2;=0A=
   }=0A=
   var end =3D document.cookie.indexOf(";", begin);=0A=
   if (end =3D=3D -1) {=0A=
      end =3D dc.length;=0A=
   }=0A=
   return unescape(dc.substring(begin + prefix.length, end));=0A=
}=0A=
=0A=
/**=0A=
 * Deletes the specified cookie.=0A=
 * <p/>=0A=
 * name      name of the cookie=0A=
 * [path]    path of the cookie (must be same as path used to create =
cookie)=0A=
 * [domain]  domain of the cookie (must be same as domain used to create =
cookie)=0A=
 */=0A=
function deleteCookie(name, path, domain) {=0A=
   if (getCookie(name)) {=0A=
      document.cookie =3D name + "=3D" +=0A=
            ((path) ? "; path=3D" + path : "") +=0A=
            ((domain) ? "; domain=3D" + domain : "") +=0A=
            "; expires=3DThu, 01-Jan-70 00:00:01 GMT";=0A=
   }=0A=
}=0A=
=0A=
function loadScript(scriptUrl) {=0A=
   // Load the plugin script asynchronously=0A=
   var head =3D document.getElementsByTagName("head")[0];=0A=
   script =3D document.createElement('script');=0A=
   script.type =3D 'text/javascript';=0A=
   script.src =3D ccs.contextPath + scriptUrl;=0A=
   head.appendChild(script);                     =0A=
}=0A=
=0A=
/**=0A=
 * Create a console object for browsers that don't have one=0A=
 */=0A=
if (!window.console) {=0A=
	window.console =3D {};=0A=
	window.console.log =3D function(message) {=0A=
	}=0A=
	window.console.trace =3D function(params) {=0A=
	}=0A=
}=0A=

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/ajax/behaviour.js

/*
   Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work
   of Simon Willison (see comments by Simon below).

   Description:
   =09
   	Uses css selectors to apply javascript behaviours to enable
   	unobtrusive javascript in html documents.
   =09
   Usage:  =20
  =20
	var myrules =3D {
		'b.someclass' : function(element){
			element.onclick =3D function(){
				alert(this.innerHTML);
			}
		},
		'#someid u' : function(element){
			element.onmouseover =3D function(){
				this.innerHTML =3D "BLAH!";
			}
		}
	};
=09
	Behaviour.register(myrules);
=09
	// Call Behaviour.apply() to re-apply the rules (if you
	// update the dom, etc).

   License:
  =20
   	This file is entirely BSD licensed.=0A=
   =09
   More information:
   =09
   	http://bennolan.com/behaviour/
  =20
*/  =20

var Behaviour =3D {
	list : new Array,
=09
	register : function(sheet){
		Behaviour.list.push(sheet);
	},
=09
	start : function(){
		Behaviour.addLoadEvent(function(){
			Behaviour.apply();
		});
	},
=09
	apply : function(){
		for (h=3D0;sheet=3DBehaviour.list[h];h++){
			for (selector in sheet){
				list =3D document.getElementsBySelector(selector);
			=09
				if (!list){
					continue;
				}

				for (i=3D0;element=3Dlist[i];i++){
					sheet[selector](element);
				}
			}
		}
	},
=09
	addLoadEvent : function(func){
		var oldonload =3D window.onload;
	=09
		if (typeof window.onload !=3D 'function') {
			window.onload =3D func;
		} else {
			window.onload =3D function() {
				oldonload();
				func();
			}
		}
	}
}

Behaviour.start();

/*
   The following code is Copyright (C) Simon Willison 2004.

   document.getElementsBySelector(selector)
   - returns an array of element objects from the current document
     matching the CSS selector. Selectors can contain element names,=20
     class names and ids and can be nested. For example:
    =20
       elements =3D document.getElementsBySelect('div#main p =
a.external')
    =20
     Will return an array of all 'a' elements with 'external' in their=20
     class attribute that are contained inside 'p' elements that are=20
     contained inside the 'div' element which has id=3D"main"

   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
   See http://www.w3.org/TR/css3-selectors/#attribute-selectors

   Version 0.4 - Simon Willison, March 25th 2003
   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, =
Internet Explorer 5 on Windows
   -- Opera 7 fails=20
*/

function getAllChildren(e) {
  // Returns all children of element. Workaround required for =
IE5/Windows. Ugh.
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector =3D function(selector) {
  // Attempt to fail gracefully in lesser browsers
  if (!document.getElementsByTagName) {
    return new Array();
  }
  // Split selector in to tokens
  var tokens =3D selector.split(' ');
  var currentContext =3D new Array(document);
  for (var i =3D 0; i < tokens.length; i++) {
    token =3D tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
      // Token is an ID selector
      var bits =3D token.split('#');
      var tagName =3D bits[0];
      var id =3D bits[1];
      var element =3D document.getElementById(id);
      if (tagName && element.nodeName.toLowerCase() !=3D tagName) {
        // tag with that ID not found, return false
        return new Array();
      }
      // Set currentContext to contain just this element
      currentContext =3D new Array(element);
      continue; // Skip to next token
    }
    if (token.indexOf('.') > -1) {
      // Token contains a class selector
      var bits =3D token.split('.');
      var tagName =3D bits[0];
      var className =3D bits[1];
      if (!tagName) {
        tagName =3D '*';
      }
      // Get elements matching tag, filter them for class selector
      var found =3D new Array;
      var foundCount =3D 0;
      for (var h =3D 0; h < currentContext.length; h++) {
        var elements;
        if (tagName =3D=3D '*') {
            elements =3D getAllChildren(currentContext[h]);
        } else {
            elements =3D =
currentContext[h].getElementsByTagName(tagName);
        }
        for (var j =3D 0; j < elements.length; j++) {
          found[foundCount++] =3D elements[j];
        }
      }
      currentContext =3D new Array;
      var currentContextIndex =3D 0;
      for (var k =3D 0; k < found.length; k++) {
        if (found[k].className && found[k].className.match(new =
RegExp('\\b'+className+'\\b'))) {
          currentContext[currentContextIndex++] =3D found[k];
        }
      }
      continue; // Skip to next token
    }
    // Code to deal with attribute selectors
    if =
(token.match(/^(\w*)\[(\w+)([=3D~\|\^\$\*]?)=3D?"?([^\]"]*)"?\]$/)) {
      var tagName =3D RegExp.$1;
      var attrName =3D RegExp.$2;
      var attrOperator =3D RegExp.$3;
      var attrValue =3D RegExp.$4;
      if (!tagName) {
        tagName =3D '*';
      }
      // Grab all of the tagName elements within current context
      var found =3D new Array;
      var foundCount =3D 0;
      for (var h =3D 0; h < currentContext.length; h++) {
        var elements;
        if (tagName =3D=3D '*') {
            elements =3D getAllChildren(currentContext[h]);
        } else {
            elements =3D =
currentContext[h].getElementsByTagName(tagName);
        }
        for (var j =3D 0; j < elements.length; j++) {
          found[foundCount++] =3D elements[j];
        }
      }
      currentContext =3D new Array;
      var currentContextIndex =3D 0;
      var checkFunction; // This function will be used to filter the =
elements
      switch (attrOperator) {
        case '=3D': // Equality
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName) =3D=3D attrValue); };
          break;
        case '~': // Match one of space seperated words=20
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
          break;
        case '|': // Match start with value followed by optional hyphen
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
          break;
        case '^': // Match starts with value
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName).indexOf(attrValue) =3D=3D 0); };
          break;
        case '$': // Match ends with value - fails with "Warning" in =
Opera 7
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName).lastIndexOf(attrValue) =3D=3D =
e.getAttribute(attrName).length - attrValue.length); };
          break;
        case '*': // Match ends with value
          checkFunction =3D function(e) { return =
(e.getAttribute(attrName).indexOf(attrValue) > -1); };
          break;
        default :
          // Just test for existence of attribute
          checkFunction =3D function(e) { return =
e.getAttribute(attrName); };
      }
      currentContext =3D new Array;
      var currentContextIndex =3D 0;
      for (var k =3D 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] =3D found[k];
        }
      }
      // alert('Attribute Selector: '+tagName+' '+attrName+' =
'+attrOperator+' '+attrValue);
      continue; // Skip to next token
    }
   =20
    if (!currentContext[0]){
    	return;
    }
   =20
    // If we get here, token is JUST an element (not a class or ID =
selector)
    tagName =3D token;
    var found =3D new Array;
    var foundCount =3D 0;
    for (var h =3D 0; h < currentContext.length; h++) {
      var elements =3D currentContext[h].getElementsByTagName(tagName);
      for (var j =3D 0; j < elements.length; j++) {
        found[foundCount++] =3D elements[j];
      }
    }
    currentContext =3D found;
  }
  return currentContext;
}

/* That revolting regular expression explained=20
/^(\w+)\[(\w+)([=3D~\|\^\$\*]?)=3D?"?([^\]"]*)"?\]$/
  \---/  \---/\-------------/    \-------/
    |      |         |               |
    |      |         |           The value
    |      |    ~,|,^,$,* or =3D
    |   Attribute=20
   Tag
*/

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0011_01CBC458.D9DEBB10"


------=_NextPart_001_0011_01CBC458.D9DEBB10
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page19268?article_page_id=1821270&highlight=PIASA

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML><HEAD><TITLE>View Article</TITLE>
<META content=3D"text/html; charset=3DUTF-8" =
http-equiv=3DContent-Type><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor=
/templates/css/format.css"><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor=
/templates/css/position.css"><!-- Scriptaculous http://script.aculo.us/ =
-->
<SCRIPT type=3Dtext/javascript>var ccs =3D { contextPath: =
'/newsmonitor', appName: 'newsmonitor', languageCode: 'en', languageId: =
'1', minisite: '', templatePath: =
'/newsmonitor/applications/newsmonitor/templates/', templateRootPath: =
'/newsmonitor/applications/newsmonitor/templates/' }</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/scriptaculous/lib/prototype.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/scriptaculous/src/scriptaculous.js"></SCRIPT>
<!-- Rico http://openrico.org/rico/demos.page --><!-- only used for =
rounded div's at the moment=0A=
	<script src=3D"/newsmonitor/shared/client_scripts/ajax/rico/rico.js" =
type=3D"text/javascript"></script>=0A=
	--><!-- Our own utils -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/uti=
ls.js"></SCRIPT>
<!-- Behaviour http://bennolan.com/behaviour/ -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/behaviour.js"></SCRIPT>

<SCRIPT language=3DJavaScript>logimg =3D new Image();logimg.src =3D =
'/newsmonitor/eventLogServlet?type=3Dview_page&pageid=3D19268&sectionid=3D=
549&editmode=3Dfalse&firstview=3Dfalse';</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18928"></HEAD>
<BODY>
<DIV id=3Dcontainer>
<DIV style=3D"TEXT-ALIGN: left">
<SCRIPT language=3Djavascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/men=
us/drop_down1/sniffer.js">=0A=
   //Top Navigational Bar III v3.4.1 (By BrotherCake @ =
cake@brothercake.net)=0A=
   </SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page1=
9268?ccs_jsp=3Dbrothercake&amp;pageId=3D19268&amp;clipId=3D&amp;lid=3D1">=
</SCRIPT>

<SCRIPT language=3Djavascript1.2=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/men=
us/drop_down1/style.js"></SCRIPT>

<SCRIPT language=3Djavascript1.2=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/men=
us/drop_down1/menu.js"></SCRIPT>
</DIV>
<DIV id=3Dheader>
<DIV id=3Dheader_links><A=20
style=3D"MARGIN-TOP: 5px; MARGIN-RIGHT: 10px; TEXT-DECORATION: none">- =
&nbsp;Call=20
Lindy or Chris on 011 781 5133</A> <A style=3D"MARGIN-TOP: 5px"=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page=
18766">Contact=20
Us</A>=20
<DIV style=3D"CLEAR: both"></DIV></DIV>
<DIV id=3Dlogo><IMG alt=3DNewsmonitor=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/=
templates//images/newsmonitor.jpg"=20
width=3D195 height=3D148></DIV>
<DIV id=3Dbg_image>
<DIV id=3Dinfo_box></DIV></DIV>
<DIV id=3Dnav></DIV></DIV>
<DIV id=3Dmain_content=20
onclick=3D"new Effect.Fade('advanced_search', {duration: 1});">
<DIV id=3Dbreadcrumb>Newsmonitor &gt; <A=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page=
558">News</A>=20
&gt; <A=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page=
19268">View=20
Article</A> </DIV>
<DIV id=3Dmain_heading>View Article </DIV>
<DIV id=3Dmain_template_content>
<DIV class=3Dmain_copy>
<SCRIPT language=3Djavascript type=3Dtext/javascript>=0A=
	function Popup(url) {  =0A=
	 =
lrgWindow=3Dwindow.open(url,"pic","scrollbars=3Dyes,menubar=3Dno,width=3D=
810,height=3D700,resizable=3Dyes");  =0A=
	}=0A=
	function PopupSmall(url) {  =0A=
	 =
lrgWindow=3Dwindow.open(url,"pic","scrollbars=3Dyes,menubar=3Dno,width=3D=
550,height=3D350,resizable=3Dyes");  =0A=
	}=0A=
</SCRIPT>

<DIV>
<TABLE width=3D"100%" align=3Dleft>
  <TBODY>
  <TR>
    <TD colSpan=3D2>
      <H1 style=3D"FONT-SIZE: 14px">Drug registration team ends =
task</H1></TD></TR>
  <TR>
    <TD>
      <P>Date: 01 February 2011 </P></TD>
    <TD>
      <P>Publication: THE STAR, BUSINESS REPORT</P></TD></TR>
  <TR>
    <TD>
      <P>Page Number: 4</P></TD>
    <TD>
      <P>Author: Slindile Khanyile</P></TD></TR>
  <TR>
    <TD>
      <P>Language: English</P></TD></TR>
  <TR>
    <TD>Current Categories:=20
      <LI>Pharmaceuticals &amp; Biotechnology - General </LI></TD></TR>
  <TR>
    <TD colSpan=3D2>
      <DIV id=3Dnavigation></DIV><A=20
      =
href=3D"javascript:Popup('page277212?print=3Dtrue&amp;article_page_id=3D1=
821270&amp;sn=3Dpopup');">Print=20
      the article</A> | <A=20
      =
href=3D"javascript:PopupSmall('page19148?email_page_request=3Demail_page&=
amp;page_url=3Dhttp%3A%2F%2Fwww.newsmonitor.co.za%2Fnewsmonitor%2Fview%2F=
newsmonitor%2Fen%2Fpage19268%3Farticle_page_id%3D1821270&amp;object=3D182=
1270');">Email=20
      Page</A> | <A href=3D"javascript:history.go(-1)">Back</A> =
</TD></TR>
  <TR>
    <TD colSpan=3D2><IFRAME id=3Darticledisplay onload=3Dstretch(this) =
border=3D0=20
      =
src=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page2=
8457?oid=3D1821270&amp;sn=3DArticle =
Detail&amp;pid=3D19268&amp;highlight=3DPIASA"=20
      frameBorder=3D0 width=3D"100%" =
name=3Darticledisplay></IFRAME></TD></TR>
  <TR>
    <TD><A =
href=3D"javascript:history.go(-1)">Back</A></TD></TR></TBODY></TABLE></DI=
V>
<SCRIPT language=3Djavascript>=0A=
	function stretch(el) {=0A=
	try {=0A=
	if (el.style.display !=3D '') el.style.display =3D '';=0A=
	if (el.style.height !=3D '') el.style.height =3D '';=0A=
	document.getElementById(el.id).height =3D null;=0A=
	document.getElementById(el.id).height =3D =
window.frames[el.name].document.body.scrollHeight;=0A=
	document.getElementById(el.id).width =3D el.parentNode.offsetWidth - 4;=0A=
	} catch(err) {alert("error") }=0A=
	}=0A=
</SCRIPT>
</DIV></DIV>
<DIV style=3D"CLEAR: both"></DIV></DIV>
<DIV id=3Dfooter>
<DIV id=3Dfooter_links>=C2=A9 Fri Feb 04 10:12:19 SAST 2011 The News =
Monitor. All=20
rights reserved.&nbsp; <A=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page=
18772">Privacy=20
Policy</A> | <A=20
href=3D"http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page=
18773">Site=20
map</A> </DIV></DIV></DIV>
<DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
		var gaJsHost =3D (("https:" =3D=3D document.location.protocol) ? =
"https://ssl." : "http://www.");=0A=
		document.write(unescape("%3Cscript src=3D'" + gaJsHost + =
"google-analytics.com/ga.js' type=3D'text/javascript'%3E%3C/script%3E"));=0A=
	</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
		try {=0A=
			var pageTracker =3D _gat._getTracker("UA-7315106-1");=0A=
				pageTracker._trackPageview();=0A=
		} catch(err) {}=0A=
	</SCRIPT>
<!--Page generated by Cambrient Contentsuite in 0.0 seconds [ served =
from cache ]--></BODY></HTML>

------=_NextPart_001_0011_01CBC458.D9DEBB10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page28457?oid=1821270&sn=Article Detail&pid=19268&highlight=PIASA

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- Scriptaculous http://script.aculo.us/ --><HTML><HEAD>
<SCRIPT type=3Dtext/javascript>var ccs =3D { contextPath: =
'/newsmonitor', appName: 'newsmonitor', languageCode: 'en', languageId: =
'1', minisite: '', templatePath: =
'/newsmonitor/applications/newsmonitor/templates/', templateRootPath: '' =
}</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/scriptaculous/lib/prototype.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/scriptaculous/src/scriptaculous.js"></SCRIPT>
<!-- Rico http://openrico.org/rico/demos.page --><!-- only used for =
rounded div's at the moment=0A=
	<script src=3D"/newsmonitor/shared/client_scripts/ajax/rico/rico.js" =
type=3D"text/javascript"></script>=0A=
	--><!-- Our own utils -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/uti=
ls.js"></SCRIPT>
<!-- Behaviour http://bennolan.com/behaviour/ -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/aja=
x/behaviour.js"></SCRIPT>

<META content=3D"text/html; charset=3DUTF-8" http-equiv=3DContent-Type>
<SCRIPT language=3DJavaScript>logimg =3D new Image();logimg.src =3D =
'/newsmonitor/eventLogServlet?type=3Dview_page&pageid=3D28457&sectionid=3D=
549&editmode=3Dfalse&firstview=3Dfalse';</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18928"></HEAD>
<BODY>
<STYLE type=3Dtext/css>TABLE.main {
=09
}
TR.row {
=09
}
TD.cell {
=09
}
DIV.block {
=09
}
DIV.paragraph {
=09
}
.font0 {
	FONT: 8pt "Arial", sans-serif
}
.font1 {
	FONT: 26pt "Arial", sans-serif
}
</STYLE>

<P>&nbsp;</P>
<TABLE style=3D"WIDTH: 437.76pt; TABLE-LAYOUT: fixed" class=3Dmain =
border=3D0=20
rules=3Dnone cellSpacing=3D0 cellPadding=3D0 frame=3Dbox>
  <TBODY>
  <TR class=3Drow>
    <TD style=3D"WIDTH: 0pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 156.6pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 135.72pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 145.44pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 0pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 437.76pt" class=3Dcell vAlign=3Dtop colSpan=3D3>
      <DIV style=3D"WIDTH: 437.76pt; HEIGHT: 24.48pt" class=3Dblock>
      <DIV class=3Dparagraph></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 437.76pt" class=3Dcell vAlign=3Dtop colSpan=3D3>
      <DIV style=3D"WIDTH: 437.76pt; HEIGHT: 26.64pt" class=3Dblock>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; PADDING-LEFT: =
21.24pt; PADDING-RIGHT: 0pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN=20
      style=3D"LINE-HEIGHT: 26.64pt; LETTER-SPACING: -1pt; COLOR: =
#656565"=20
      class=3Dfont1><B>Drug registration team ends =
task</B></SPAN></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 437.76pt" class=3Dcell vAlign=3Dtop colSpan=3D3>
      <DIV style=3D"WIDTH: 437.76pt; HEIGHT: 25.92pt" class=3Dblock>
      <DIV class=3Dparagraph></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 156.6pt" class=3Dcell vAlign=3Dtop>
      <DIV style=3D"WIDTH: 156.6pt; HEIGHT: 21.24pt" class=3Dblock>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; PADDING-LEFT: =
20.52pt; PADDING-RIGHT: 0pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN class=3Dfont0><B>Slindile=20
      Khanyile</B></SPAN></DIV></DIV></TD>
    <TD style=3D"WIDTH: 135.72pt" class=3Dcell vAlign=3Dtop rowSpan=3D2>
      <DIV style=3D"WIDTH: 135.72pt; HEIGHT: 348.84pt" class=3Dblock>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; PADDING-LEFT: 0pt; =
PADDING-RIGHT: 17.28pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>as=20
      quickly as possible and the potential savings offered by generic=20
      medicines. The restruc&shy;turing of the MCC should be prioritised =
as a=20
      matter of ur&shy;gency," Inderlall said.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.08pt; PADDING-LEFT: 0pt; PADDING-RIGHT: 14.4pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Kirti=20
      Narsai, the head of scientific and regulatory affairs at the=20
      Pharmaceutical Industry Association of SA (<SPAN=20
      style=3D"BACKGROUND-COLOR: yellow">Piasa</SPAN>), said the =
association would=20
      like to see sustained improvement in MCC operational=20
      efficiencies.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
9.72pt; PADDING-LEFT: 0.72pt; PADDING-RIGHT: 14.4pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Narsai=20
      said a <SPAN style=3D"BACKGROUND-COLOR: yellow">Piasa</SPAN> =
survey on=20
      clinical research showed there were "distinct differences in =
review and=20
      approval times between the MCC and ethics committees, with MCC =
times being=20
      longer".</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.08pt; PADDING-LEFT: 0.72pt; PADDING-RIGHT: 17.28pt; PADDING-TOP: 0pt" =

      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>She said:=20
      "We look forward to their proposed changes. We have noted an =
increase in=20
      the number of products registered in 2010, however, (there was) no =

      significant improvement in the time to =
registration."</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.08pt; PADDING-LEFT: 1.08pt; PADDING-RIGHT: 11.16pt; PADDING-TOP: 0pt" =

      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Stavros=20
      Nicolaou, the chair&shy;man of Pharmaceuticals Made in SA, said: =
"We have=20
      detected some improvements, but (there is) still some way to go on =
the=20
      backlogs. I think the main result of the task team work is that it =
has=20
      rekindled... meetings</B></SPAN></DIV></DIV></TD>
    <TD style=3D"WIDTH: 145.44pt" class=3Dcell vAlign=3Dtop rowSpan=3D2>
      <DIV style=3D"WIDTH: 145.44pt; HEIGHT: 348.84pt" class=3Dblock>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; PADDING-LEFT: 0pt; =
PADDING-RIGHT: 24.48pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>between=20
      the MCC senior offi&shy;cials and the pharmaceutical industry. =
These=20
      meetings should futuristically enable us to moni&shy;tor=20
      progress."</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
9.72pt; PADDING-LEFT: 0.36pt; PADDING-RIGHT: 23.76pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Val=20
      Beaumont, the executive director at Innovative Medicines SA, said: =
"The=20
      backlog project has had as a benefit the forma&shy;tion of the =
valuable=20
      industry task group platform for engage&shy;ment between industry =
and the=20
      MCC on technical and policy issues. There is still much work to be =
done=20
      and we see it as work in progress."</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.08pt; PADDING-LEFT: 0.72pt; PADDING-RIGHT: 28.8pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Crisp=20
      said the government was setting up the SA Health Products =
Regulatory=20
      Authority to eventually replace the MCC. It would aim to register =
new=20
      medicines within <I>a </I>year and generics within six=20
      months.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.44pt; PADDING-LEFT: 1.08pt; PADDING-RIGHT: 23.4pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>"We=20
      started in December and we have project funding in place. Approval =
takes=20
      time and I think the final setting up will take a full year," =
Crisp=20
      said.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.44pt; PADDING-LEFT: 1.08pt; PADDING-RIGHT: 23.4pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Fidel=20
      Hadebe, the spokesman for the Department of Health, said: "The =
public=20
      consultation must still take place and a decision must be taken in =
terms=20
      of what structure can best serve this =
purpose."</B></SPAN></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 156.6pt" class=3Dcell vAlign=3Dtop>
      <DIV style=3D"WIDTH: 156.6pt; HEIGHT: 327.6pt" class=3Dblock>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; PADDING-LEFT: =
20.52pt; PADDING-RIGHT: 15.84pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>THE TASK=20
      team that assisted the Medicines Control Council (MCC) to clear =
backlogs=20
      has finished its work, but role players in the pharmaceutical =
industry say=20
      while there have been some improvements, there is still a long way =
to=20
      go.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
9.72pt; PADDING-LEFT: 21.24pt; PADDING-RIGHT: 12.24pt; PADDING-TOP: 0pt" =

      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>The task=20
      team led by Nicholas Crisp was roped in about 18 months ago, when =
medicine=20
      registrations were taking as long as three years to be finalised. =
Once=20
      companies have been granted a licence to produce a medicine, they =
must=20
      register the drugs with the MCC before they can sell=20
them.</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
9.72pt; PADDING-LEFT: 21.6pt; PADDING-RIGHT: 15.48pt; PADDING-TOP: 0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>When=20
      Crisp and his team began their work, they found that there were =
more than=20
      4 OOO registration delays. Some were lodged before 2000, but the =
bulk of=20
      applications were made between 2001 and 2007</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: justify; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.08pt; PADDING-LEFT: 21.6pt; PADDING-RIGHT: 16.56pt; PADDING-TOP: =
0.36pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>Raseela=20
      Inderlall, the execu&shy;tive director of the National Association =
of=20
      Pharmaceutical Manufacturers, said time lines for the registration =
of=20
      generic medicines remained a concern-</B></SPAN></DIV>
      <DIV=20
      style=3D"TEXT-ALIGN: left; PADDING-BOTTOM: 0pt; TEXT-INDENT: =
10.44pt; PADDING-LEFT: 21.96pt; PADDING-RIGHT: 11.88pt; PADDING-TOP: =
0pt"=20
      class=3Dparagraph><SPAN style=3D"LINE-HEIGHT: 9.72pt" =
class=3Dfont0><B>"It=20
      impacts on patients and their ability to access=20
      medicines</B></SPAN></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow vAlign=3Dtop>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 437.76pt" class=3Dcell vAlign=3Dtop colSpan=3D3>
      <DIV style=3D"WIDTH: 437.76pt; HEIGHT: 24.12pt" class=3Dblock>
      <DIV class=3Dparagraph></DIV></DIV></TD>
    <TD style=3D"WIDTH: 0pt" class=3Dcell vAlign=3Dtop></TD></TR>
  <TR class=3Drow>
    <TD style=3D"WIDTH: 0pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 156.6pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 135.72pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 145.44pt; HEIGHT: 0pt" class=3Dcell =
vAlign=3Dtop></TD>
    <TD style=3D"WIDTH: 0pt; HEIGHT: 0pt" class=3Dcell=20
vAlign=3Dtop></TD></TR></TBODY></TABLE><BR><IMG alt=3DCopyright=20
src=3D"http://www.newsmonitor.co.za/newsmonitor/applications/newsmonitor/=
templates//images/article_copyright_footer.gif">
<SCRIPT type=3Dtext/javascript>=0A=
		var gaJsHost =3D (("https:" =3D=3D document.location.protocol) ? =
"https://ssl." : "http://www.");=0A=
		document.write(unescape("%3Cscript src=3D'" + gaJsHost + =
"google-analytics.com/ga.js' type=3D'text/javascript'%3E%3C/script%3E"));=0A=
	</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
		try {=0A=
			var pageTracker =3D _gat._getTracker("UA-7315106-1");=0A=
				pageTracker._trackPageview();=0A=
		} catch(err) {}=0A=
	</SCRIPT>
 <!--Page generated by Cambrient Contentsuite in 0.0010 seconds [ served =
from cache ]--></BODY></HTML>

------=_NextPart_001_0011_01CBC458.D9DEBB10--

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/menus/drop_down1/sniffer.js

//UDMv3.4.1.1b=0D=0D=0D=0Dvar exclude=3Dtrue; =0Dvar =
agt=3Dnavigator.userAgent.toLowerCase();=0Dvar win=3Dfalse;var =
mac=3Dfalse;var =
lin=3Dtrue;=0Dif(agt.indexOf('win')!=3D-true){win=3Dtrue;lin=3Dfalse;}=0D=
if(agt.indexOf('mac')!=3D-true){mac=3Dtrue;lin=3Dfalse;}=0Dvar =
lnx=3Dfalse;if(lin){lnx=3Dtrue;}=0Dvar ice=3Dfalse;=0Dvar ie=3Dfalse;var =
ie4=3Dfalse;var ie5=3Dfalse;var ie6=3Dfalse;var com=3Dfalse;var =
dcm;=0Dvar op5=3Dfalse;var op6=3Dfalse;var op7=3Dfalse;=0Dvar =
ns4=3Dfalse;var ns6=3Dfalse;var ns7=3Dfalse;var mz7=3Dfalse;var =
kde=3Dfalse;var saf=3Dfalse;=0Dif(typeof =
navigator.vendor!=3D"undefined"){=0Dif =
(navigator.vendor=3D=3D"KDE"){=0Dvar thisKDE=3Dagt;=0Dvar =
splitKDE=3DthisKDE.split("konqueror/");=0Dvar =
aKDE=3DsplitKDE[true].split("; ");=0Dvar =
KDEn=3DparseFloat(aKDE[false]);=0Dif(KDEn>2.2){=0Dkde=3Dtrue;=0Dns6=3Dtru=
e;=0Dexclude=3Dfalse;=0D}=0D}=0D}=0D=0Dif(typeof =
navigator.__ice_version!=3D"undefined"){=0Dexclude=3Dfalse;=0Dice=3Dtrue;=
=0Die=3Dtrue;=0Die4=3Dtrue; =0D}=0D=0Delse =
if(agt.indexOf('webtv')!=3D-true){exclude=3Dtrue;}=0Delse if(typeof =
window.opera!=3D"undefined"){=0Dexclude=3Dfalse;=0Dif(agt.indexOf("opera/=
5")!=3D-true||agt.indexOf("opera =
5")!=3D-true){op5=3Dtrue;}=0Dif(agt.indexOf("opera/6")!=3D-true||agt.inde=
xOf("opera =
6")!=3D-true){op6=3Dtrue;}=0Dif(agt.indexOf("opera/7")!=3D-true||agt.inde=
xOf("opera 7")!=3D-true){op7=3Dtrue;}=0D}=0Delse if(typeof =
document.all!=3D"undefined"&&!kde){=0Dexclude=3Dfalse;=0Die=3Dtrue;=0Dif(=
typeof =
document.getElementById!=3D"undefined"){=0Die5=3Dtrue;=0Dif(agt.indexOf("=
msie =
6")!=3D-true){=0Die6=3Dtrue;=0Ddcm=3Ddocument.compatMode;=0Dif(dcm!=3D"Ba=
ckCompat"){com=3Dtrue;}=0D}=0D}=0Delse{ie4=3Dtrue;}=0D}=0Delse if(typeof =
document.getElementById!=3D"undefined"){=0Dexclude=3Dfalse;=0Dif(agt.inde=
xOf("netscape/6")!=3D-true||agt.indexOf("netscape6")!=3D-true){ns6=3Dtrue=
;}=0Delse =
if(agt.indexOf("netscape/7")!=3D-true||agt.indexOf("netscape7")!=3D-true)=
{ns6=3Dtrue;ns7=3Dtrue;}=0Delse =
if(agt.indexOf("gecko")!=3D-true){ns6=3Dtrue;mz7=3Dtrue;}=0D}=0Delse =
if((agt.indexOf('mozilla')!=3D-true)&&(parseInt(navigator.appVersion)>=3D=
4)){=0Dexclude=3Dfalse;=0Dns4=3Dtrue; =0D//this eliminates espial escape =
[and omniweb in ns4 spoofing mode?]=0Dif(typeof =
navigator.mimeTypes['*']=3D=3D"undefined"){=0Dexclude=3Dtrue;=0Dns4=3Dfal=
se;=0D}=0D}=0Dif(agt.indexOf('escape')!=3D-true){exclude=3Dtrue;ns4=3Dfal=
se;}=0D//identify safari past its user-agent spoofing (this property was =
suggested by PPK)=0Dif(typeof =
navigator.productSub!=3D"undefined"&&navigator.productSub=3D=3D20021225){=
=0Dns6=3Dtrue;ns7=3Dfalse;mz7=3Dfalse;win=3Dfalse;mac=3Dtrue;saf=3Dtrue;=0D=
}=0Dif(agt.indexOf('icab')!=3D-true){exclude=3Dtrue;ie=3Dfalse;ie5=3Dfals=
e;}=0D=0D=0D=0D=0D// array building functions for custom.js=0Dvar =
mu=3D"mu";var m=3D0;var sm=3D0;var cm=3D0;var sp=3D0;=0Dvar mI=3Dnew =
Array;=0Dvar sP=3Dnew Array;=0Dvar sI=3Dnew Array;=0Dvar cP=3Dnew =
Array;=0Dvar cI=3Dnew Array;=0D=0Dfunction =
addMainItem(ma,mb,mc,md,me,mf,mg,mh,mi){=0Dsm=3D0;=0Dif(ma=3D=3D"virtual"=
) { =
ma=3D"";mb=3D"";mc=3D0;md=3D"";me=3D"";mf=3D"";mg=3D0;mh=3D0;mi=3D""; =
}=0Dif(!mb||mb=3D=3D""){mb=3D"&nbsp;";}=0Dwhile(mb.indexOf('<BR>')!=3D-1)=
{mb=3Dmb.replace('<BR>','<br>');}=0Dwhile(mb.indexOf('<Br>')!=3D-1){mb=3D=
mb.replace('<Br>','<br>');}=0Dwhile(mb.indexOf('<br =
/>')!=3D-1){mb=3Dmb.replace('<br =
/>','<br>');}=0Dif(!mc||mc=3D=3D""){mc=3D"left";}=0Dif(!md||md=3D=3D""){m=
d=3D"left";}=0Dif(!me||me=3D=3D""){me=3D"_self";}=0Dif(!mf||mf=3D=3D""||a=
ltDISPLAY=3D=3D""){mf=3D"none";if(ie5){mf=3D"";}}=0Dif(!mg){mg=3D0;}if(!m=
h){mh=3D0;}=0Dif(!mi||mi=3D=3D""||mi=3D=3D"c"||mi=3D=3D"C"){mi=3D"-";}=0D=
if(mi!=3D"-"){mi=3Dmi.toLowerCase();}=0DmI[m]=3Dnew =
Array(ma,mb,mc,md,me,mf,mg,mh,mi);=0Dm++;=0D}=0D=0Dfunction =
defineSubmenuProperties(spa,spb,spc,spd,spe,spf){=0Dif(!ie5){spa+=3D(sbSI=
ZE*2); =
}=0Dif(!spb||spb=3D=3D""){spb=3D"left";}=0Dif(!spc||spc=3D=3D""){spc=3D"l=
eft";}=0Dif(!spd){spd=3D0;}=0Dif(!spe){spe=3D0;}=0Dif(!spf){spf=3D"";}=0D=
sP[(m-1)]=3Dnew =
Array(spa,spb,spc,spd,spe,spf);=0Dif(sm=3D=3D0){=0DsI[(m-1)]=3Dnew =
Array; cP[(m-1)]=3Dnew Array; cI[(m-1)]=3Dnew =
Array;=0D}=0D}=0D=0Dfunction =
addSubmenuItem(sma,smb,smc,smd){=0Dcm=3D0;var =
sme=3Dtrue;=0Dif(sme&&sma=3D=3D"~"){sme=3Dfalse;if(!(win&&ie5)){sma=3D"";=
}smc=3D"";}=0Dif(!sma||sma=3D=3D""){sma=3D"#";}=0Dif(!smb||smb=3D=3D""){s=
mb=3D"&nbsp;";}=0Dwhile(smb.indexOf('<BR>')!=3D-1){smb=3Dsmb.replace('<BR=
>','<br>');}=0Dwhile(smb.indexOf('<Br>')!=3D-1){smb=3Dsmb.replace('<Br>',=
'<br>');}=0Dwhile(smb.indexOf('<br />')!=3D-1){smb=3Dsmb.replace('<br =
/>','<br>');}=0Dif(!smc||smc=3D=3D""){smc=3D"_self";}=0Dif(!smd||smd=3D=3D=
""||altDISPLAY=3D=3D""){smd=3D"none";if(ie5){smd=3D"";}}=0DsI[(m-1)][sm]=3D=
new Array(sma,smb,smc,smd,sme);=0Dsm++;=0D}=0D=0Dfunction =
defineChildmenuProperties(cpa,cpb,cpc,cpd,cpe,cpf){=0Dif(!ie5){cpa+=3D(sb=
SIZE*2); =
}=0Dif(!cpb||cpb=3D=3D""){cpb=3D"left";}=0Dif(!cpc||cpc=3D=3D""){cpc=3D"l=
eft";}=0Dif(!cpd){cpd=3D0;}=0Dif(!cpe){cpe=3D0;}=0Dif(!cpf){cpf=3D"";}=0D=
cP[(m-1)][(sm-1)]=3Dnew =
Array(cpa,cpb,cpc,cpd,cpe,cpf);=0DcI[(m-1)][(sm-1)]=3Dnew =
Array;=0D}=0D=0Dfunction addChildmenuItem(cma,cmb,cmc,cmd){=0Dvar =
cme=3Dtrue;=0Dif(cma&&cma=3D=3D"~"){cme=3Dfalse;if(!(win&&ie5)){cma=3D"";=
}cmc=3D"";}=0Dif(!cma||cma=3D=3D""){cma=3D"#";}=0Dif(!cmb||cmb=3D=3D""){c=
mb=3D"&nbsp;";}=0Dwhile(cmb.indexOf('<BR>')!=3D-1){cmb=3Dcmb.replace('<BR=
>','<br>');}=0Dwhile(cmb.indexOf('<Br>')!=3D-1){cmb=3Dcmb.replace('<Br>',=
'<br>');}=0Dwhile(cmb.indexOf('<br />')!=3D-1){cmb=3Dcmb.replace('<br =
/>','<br>');}=0Dif(!cmc||cmc=3D=3D""){cmc=3D"_self";}=0Dif(!cmd||cmd=3D=3D=
""||altDISPLAY=3D=3D""){cmd=3D"none";if(ie5){cmd=3D"";}}=0DcI[(m-1)][(sm-=
1)][cm]=3Dnew Array(cma,cmb,cmc,cmd,cme);=0Dcm++;=0D}=0D// custom =
upgrade backup definitions=0Dvar keepSubLIT=3Dtrue;var chvOFFSET=3D0;var =
chhOFFSET=3D-5;var openTIMER=3D0;var closeTIMER=3D330;var =
cellCLICK=3Dtrue;var aCURSOR=3D"hand";var =
remoteTRIGGERING=3Dfalse;=0Dvar altDISPLAY=3D"";var =
allowRESIZE=3Dtrue;var redGRID=3Dfalse;var gridWIDTH=3D0;var =
gridHEIGHT=3D0;var documentWIDTH=3D0;var hideSELECT=3Dfalse;var =
allowForSCALING=3Dfalse;=0D=0D// custom window opening function=0Dvar =
nUrl,nW,nH;=0Dvar nWin=3Dnew Array;=0Dvar nw=3D0;=0Dfunction =
openWindow(nUrl,nW,nH){=0DnWin[nw] =3D open(nUrl, =
"","width=3D"+nW+",height=3D"+nH+",status=3Dyes,scrollbars=3Dno,scrolling=
=3Dno,toolbar=3Dno,menubar=3Dno,location=3Dno,resizable=3Dyes");=0Dnw++;=0D=
}=0D=0D//remote menu opening function=0Dfunction remoteTrigger(rts) =
{=0Dif(menuALIGN=3D=3D"virtual"){return false;}=0Dif(ie4||ie5||ns6||mz7) =
{ =
mainCell(rts,false);if(ie&&hideSELECT){hideSelects();}}=0Dif(ns4||op5||(o=
p6&&((typeof =
oR[1][rts]!=3D"undefined"&&oR[1][rts].style.visibility=3D=3D"hidden")))) =
{ oM(rts,false); }=0Dreturn true;=0D}=0D
------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/view/newsmonitor/en/page19268?ccs_jsp=brothercake&pageId=19268&clipId=&lid=1

=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
                                                  =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
     =0A=
=0A=
 =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
      =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
   =0A=
   =0A=
=0A=
   =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
                                                  =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
     =0A=
=0A=
 =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
      =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
   =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
   =0A=
=0A=
   =0A=
   =0A=
      function new_popup(url,width,height) {=0A=
      =
window.open(url,'_blank','scrollbars=3Dyes,toolbar=3Dyes,menubar=3Dyes,wi=
dth=3D'+width+',height=3D'+height);=0A=
      }=0A=
=0A=
      if (!exclude) { //********=0A=
=0A=
      =
/////////////////////////////////////////////////////////////////////////=
//=0A=
      //=0A=
      // ULTIMATE DROPDOWN MENU VERSION 3.5 by Brothercake=0A=
      // http://www.brothercake.com/dropdown/=0A=
      //=0A=
      // Link-wrapping routine by Brendan Armstrong=0A=
      // KDE modifications by David Joham=0A=
      // Opera reload/resize routine by Michael Wallner=0A=
      // http://www.wallner-software.com/=0A=
      //=0A=
      // This script featured on Dynamic Drive =
(http://www.dynamicdrive.com)=0A=
      =
/////////////////////////////////////////////////////////////////////////=
//=0A=
=0A=
=0A=
      var baseHREF =
=3D"/newsmonitor/shared/client_scripts/menus/drop_down1/"; // base path =
to .js files for the script (ie: resources/)=0A=
=0A=
      // *** POSITIONING AND STYLES =
*********************************************=0A=
=0A=
        var menuALIGN =3D "left";  // alignment=0A=
  var absLEFT =3D 155;  // absolute left or right position (if menu is =
left or right aligned)=0A=
  var absTOP =3D  135;   // absolute top position=0A=
  var staticMENU =3D false;  // static positioning mode (ie5,ie6 and ns4 =
only)=0A=
  var stretchMENU =3D true;  // show empty cells=0A=
  var showBORDERS =3D false;  // show empty cell borders=0A=
  var zORDER =3D  1000;  // base z-order of nav structure (not ns4)=0A=
  var mCOLOR =3D  ""; // main nav cell color=0A=
  var rCOLOR =3D  ""; // main nav cell rollover color=0A=
  var bSIZE =3D  1;  // main nav border size=0A=
  var bCOLOR =3D  ""; // main nav border color=0A=
  var aLINK =3D  "#666666"; // main nav link color=0A=
  var aHOVER =3D  "#FE6402";  // main nav link hover-color (dual purpose)=0A=
  var aDEC =3D  "none";  // main nav link decoration=0A=
  var fFONT =3D  "Arial, Helvetica, sans-serif"; // main nav font face=0A=
  var fSIZE =3D  12;  // main nav font size (pixels)=0A=
  var fWEIGHT =3D  "bold";  // main nav font weight=0A=
  var tINDENT =3D  0;  // main nav text indent (if text is left or right =
aligned)=0A=
  var vPADDING =3D  0;  // main nav vertical cell padding=0A=
  var vtOFFSET =3D  0;  // main nav vertical text offset (+/- pixels =
from middle)=0A=
  var keepLIT =3D true;  // keep rollover color when browsing menu=0A=
  var vOFFSET =3D  15;  // shift the submenus vertically=0A=
  var hOFFSET =3D  0;  // shift the submenus horizontally **=0A=
  var smCOLOR =3D  "#E9E9E9"; // submenu cell color=0A=
  var srCOLOR =3D  "#FFFFFF"; // submenu cell rollover color=0A=
  var sbSIZE =3D  1;  // submenu border size **=0A=
  var sbCOLOR =3D  "#C6C6C6" // submenu border color=0A=
  var saLINK =3D  "#666666"; // submenu link color=0A=
  var saHOVER =3D  "#FE6402";  // submenu link hover-color (dual purpose)=0A=
  var saDEC =3D  "none";  // submenu link decoration=0A=
  var sfFONT =3D  "arial";// submenu font face=0A=
  var sfSIZE =3D  12;  // submenu font size (pixels)=0A=
  var sfWEIGHT =3D  "bold"; // submenu font weight=0A=
  var stINDENT =3D  5;  // submenu text indent (if text is left or right =
aligned)=0A=
  var svPADDING =3D 12;  // submenu vertical cell padding=0A=
  var svtOFFSET =3D 0;  // submenu vertical text offset (+/- pixels from =
middle)=0A=
  var shSIZE =3D 1;  // submenu drop shadow size **=0A=
  var shCOLOR =3D "#666666"; // submenu drop shadow color **=0A=
  var shOPACITY =3D 100;  // submenu drop shadow opacity (not ie4,ns4 or =
opera)=0A=
  var keepSubLIT =3D true;  // keep submenu rollover color when browsing =
child menu=0A=
  var chvOFFSET =3D 0;  // shift the child menus vertically **=0A=
  var chhOFFSET =3D 51;  // shift the child menus horizontally **=0A=
  var closeTIMER =3D 330;  // menu closing delay time=0A=
  var cellCLICK =3D true;  // links activate on TD click=0A=
  var aCURSOR =3D "hand";  // cursor for active links (not ns4 or opera)=0A=
  var altDISPLAY =3D "";  // where to display alt text=0A=
  var allowRESIZE =3D false;  // allow resize/reload=0A=
  var redGRID =3D false;  // show a red grid=0A=
  var gridWIDTH =3D 0;  // override grid width=0A=
  var gridHEIGHT =3D 0;  // override grid height=0A=
  var documentWIDTH =3D document.width - 20;  // override document width=0A=
  var hideSELECT =3D true;  // auto-hide select boxes when menus open =
(ie only)=0A=
  var allowForSCALING =3D false; // allow for text scaling in mozilla 5=0A=
         =0A=
=0A=
      //** LINKS =
***********************************************************=0A=
      =0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page550","Home",110,"center","","",0,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page553","Our company ",110,"center","","",40,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page554","Our services",110,"center","","",80,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page555","Testimonials",110,"center","","",120,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page556","FAQ",110,"center","","",160,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page18815","What's New?",110,"center","","",200,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
		=0A=
=0A=
			=0A=
			addMainItem("page18766","Contact us",110,"center","","",240,0,"");=0A=
			=0A=
			defineSubmenuProperties(200,"left","left",-4,0,"");=0A=
		=0A=
		=0A=
		=0A=
=0A=
		=0A=
	=0A=
	=0A=
	=0A=
      =0A=
         =0A=
         =0A=
	=0A=
=0A=
	=0A=
	=0A=
	=0A=
      =0A=
      =0A=
      //**DO NOT EDIT THIS *****=0A=
      }//***********************=0A=
      //************************=0A=
       1=0A=
   =0A=
=0A=
=0A=

------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/menus/drop_down1/style.js

//UDMv3.4.1.1b=0D=0D=0D//**DO NOT EDIT THIS =
******************************************=0D//**************************=
***********************************=0Dif(!exclude){=0D// document object =
variable=0Dvar d=3Ddocument;=0D// adjust for font size =
discrepancy=0Dif((!mac&&ns4)||(mac&&op5)){fSIZE+=3D1;sfSIZE+=3D1;}=0D// =
filter for unuseable =
definitions=0Dif(bSIZE<0)bSIZE=3D0;if(fSIZE<5)fSIZE=3D5;if(tINDENT<0)tIND=
ENT=3D0;if(vPADDING<0)vPADDING=3D0;if(sbSIZE<0)sbSIZE=3D0;if(sfSIZE<5) =
sfSIZE=3D5;if(stINDENT<0)stINDENT=3D0;if(svPADDING<0)svPADDING=3D0;if(fWE=
IGHT=3D=3D"")fWEIGHT=3D"normal";if(sfWEIGHT=3D=3D"")sfWEIGHT=3D"normal";i=
f(shSIZE<0){shSIZE=3D0;}if(cellCLICK=3D=3Dmu){cellCLICK=3Dtrue;}=0D//acti=
ve remote =
triggering=0Dif(menuALIGN=3D=3D"virtual"){remoteTRIGGERING=3Dtrue;menuALI=
GN=3D"left";allowRESIZE=3Dtrue;staticMENU=3Dfalse;}=0D// link style =
definitions=0Dvar =
stySTR=3D'';=0Dif(ns4){stySTR+=3D'<style><!--';stySTR+=3D'.translink\{bac=
kground-color:transparent\;\}';stySTR+=3D'.mTD A =
\{color:'+aLINK+'\;font-weight:'+fWEIGHT+'\;\}';stySTR+=3D'.mTD A:Link =
\{color:'+aLINK+'\}';stySTR+=3D'.mTD A:Visited =
\{color:'+aLINK+'\}';stySTR+=3D'.mTD A:Active,.mTD A:Link,.mTD =
A:Visited,.mTD =
A:Hover\{font-weight:'+fWEIGHT+'\;font-size:'+fSIZE+'px\;font-family:'+fF=
ONT+'\;text-decoration:'+aDEC+'\;position:relative\;\}';stySTR+=3D'.SUBmT=
D A \{ =
color:'+saLINK+'\;font-weight:'+sfWEIGHT+'\;\}';stySTR+=3D'.SUBmTD =
A:Link \{color:'+saLINK+'\}';stySTR+=3D'.SUBmTD A:Visited =
\{color:'+saLINK+' \}';stySTR+=3D'.SUBmTD A:Active,.SUBmTD =
A:Link,.SUBmTD A:Visited,.SUBmTD =
A:Hover\{font-weight:'+sfWEIGHT+'\;font-size:'+sfSIZE+'px\;font-family:'+=
sfFONT+'\;text-decoration:'+saDEC+'\;\}';}=0Delse{stySTR+=3D'<style><!--'=
;stySTR+=3D'.mTD,.mTD A =
\{white-space:nowrap;color:'+aLINK+'\;font-weight:'+fWEIGHT+'\;\}';stySTR=
+=3D'.mTD,.mTD A:Link \{color:'+aLINK+'\}';stySTR+=3D'.mTD A:Visited =
\{color:'+aLINK+'\}';stySTR+=3D'.mTD,.mTD A:Active,.mTD A:Link,.mTD =
A:Visited,.mTD =
A:Hover\{font-weight:'+fWEIGHT+'\;font-size:'+fSIZE+'px\;font-family:'+fF=
ONT+'\;text-decoration:'+aDEC+'\;position:relative\;\}';stySTR+=3D'.SUBmT=
D,.SUBmTD A \{ =
white-space:nowrap;color:'+saLINK+'\;font-weight:'+sfWEIGHT+'\;\}';stySTR=
+=3D'.SUBmTD,.SUBmTD A:Link \{color:'+saLINK+'\}';stySTR+=3D'.SUBmTD =
A:Visited \{color:'+saLINK+' \}';stySTR+=3D'.SUBmTD,.SUBmTD =
A:Active,.SUBmTD A:Link,.SUBmTD A:Visited,.SUBmTD =
A:Hover\{font-weight:'+sfWEIGHT+'\;font-size:'+sfSIZE+'px\;font-family:'+=
sfFONT+'\;text-decoration:'+saDEC+'\;\}';if(ie&&hideSELECT){stySTR+=3D'se=
lect\{visibility:visible\;\}';}if(ie5){stySTR+=3D'.u\{text-decoration:und=
erline\;\}';}}=0D//******************************************************=
*******=0D//****##### USE THIS SPACE FOR NEW STYLE DEFINITIONS =
#####*****=0D=0D=0D=0D=0D=0D=0Dvar cl=3D'#0000cc'; var =
fs=3D14;=0Dif((win&&ns4)||(mac&&op5)){fs=3D15;if(ns4){cl=3D'#009600';}}=0D=
stySTR+=3D'.roman \{font-size:'+fs+'px\; color:'+cl+'\; =
background-color:white\; font-family:times new roman\; =
\}';=0D=0D=0D=0D=0D=0D=0D=0D//** DO NOT EDIT THIS =
****************************************=0DstySTR+=3D'//--></style>';d.wr=
ite(stySTR);}=0Dfunction genericOnloadFunction() =
{=0D//*************************************************************=0D//*=
***##### USE THIS SPACE TO DEFINE ONLOAD FUNCTIONS =
#####****=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D//** DO NOT EDIT THIS =
*****************************************=0D//***************************=
**********************************=0Dif(ns4){nsinit();}}=0D//************=
*************************************************=0D
------=_NextPart_000_0000_01CBC458.D9DC4A10
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.newsmonitor.co.za/newsmonitor/shared/client_scripts/menus/drop_down1/menu.js

//UDMv3.8=0D=0D//*** DO NOT EDIT =
*************************************************************************=
*=0Dvar tempEl;function =
getRealLeft(imgElem){if(ns4){xPos=3DimgElem.x;}else =
if(!exclude){xPos=3Deval(imgElem).offsetLeft;tempEl=3Deval(imgElem).offse=
tParent;while(tempEl!=3Dnull){xPos+=3DtempEl.offsetLeft;tempEl=3DtempEl.o=
ffsetParent;}}if(mac&&ie5){xPos+=3DparseInt(document.body.leftMargin);}re=
turn xPos;};function getRealTop(imgElem){if(ns4){yPos=3DimgElem.y;}else =
if(!exclude){yPos=3Deval(imgElem).offsetTop;tempEl=3Deval(imgElem).offset=
Parent;while(tempEl!=3Dnull){yPos+=3DtempEl.offsetTop;tempEl=3DtempEl.off=
setParent;}}if(mac&&ie5){yPos+=3DparseInt(document.body.topMargin);}retur=
n yPos;};/*get offset position based on a function from =
http://www.webreference.com/js/column33/image.html*/var xPos=3D0;var =
yPos=3D0;var rImg;var rPosition=3Dnew Array;if(typeof =
document.images['anchor']!=3D"undefined"&&typeof =
document.images['anchor']!=3Dnull){rImg=3Ddocument.images['anchor'];};var=
 fAry=3Dnew Array;var fj=3D0;var fImgs=3Ddocument.images;var =
faryl=3D0;if(!exclude){faryl=3DfImgs.length;}for(var =
i=3D0;i<faryl;i++){if(fImgs[i].name=3D=3D"freeanchor"){fAry[fj]=3DfImgs[i=
];fj++;}};var usingR=3D0;var =
usingRF=3D0;if(!exclude&&rImg){usingR=3D1;if((mac&&ie4)||kde){ie4=3D0;ie=3D=
0;kde=3D0;exclude=3D1;}else =
if(ns4){xPos=3DgetRealLeft(rImg);yPos=3DgetRealTop(rImg);if(menuALIGN!=3D=
"free"){menuALIGN=3D"left";}absLEFT=3DxPos;absTOP=3DyPos;}else{xPos=3Dget=
RealLeft(rImg);yPos=3DgetRealTop(rImg);if(menuALIGN!=3D"free"){menuALIGN=3D=
"left";}absLEFT=3DxPos;absTOP=3DyPos;}}faryl=3DfAry.length;if(faryl>0&&me=
nuALIGN=3D=3D"free"){usingRF=3D1;if((mac&&ie4)||kde){ie4=3D0;ie=3D0;kde=3D=
0;exclude=3D1;}else =
if(ns4){for(i=3D0;i<faryl;i++){xPos=3DgetRealLeft(fAry[i]);yPos=3DgetReal=
Top(fAry[i]);if(typeof =
mI[i]!=3D"undefined"){mI[i][7]=3DxPos;mI[i][6]=3DyPos;}absLEFT=3D0;absTOP=
=3D0;}}else{for(i=3D0;i<faryl;i++){xPos=3DgetRealLeft(fAry[i]);yPos=3Dget=
RealTop(fAry[i]);if(typeof =
mI[i]!=3D"undefined"){mI[i][7]=3DxPos;mI[i][6]=3DyPos;}absLEFT=3D0;absTOP=
=3D0;}}};var brTok=3D"";if(ie4||(mac&&ie5)){brTok=3D"ie4";}else =
if(ie5){brTok=3D"ie5";}if(ns6||op7||kde){brTok=3D"moz";}if(op6){brTok=3D"=
op6";}if(op5){brTok=3D"op5";}if(ns4){brTok=3D"ns4";}if(!exclude){document=
.write('<script language=3D"javascript1.2" type=3D"text/javascript" =
src=3D"'+baseHREF+'menu_'+brTok+'.js"></script>');}
------=_NextPart_000_0000_01CBC458.D9DC4A10--

