From: =?Windows-1252?Q?Enregistr=E9_par_Windows_Internet_Explorer=A07?=
Subject: Catalogue collectif
Date: Wed, 10 Dec 2008 01:59:30 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0013_01C95A6A.F09EEC30"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545
This is a multi-part message in MIME format.
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://opac.rero.ch/gateway?skin=rero&lng=fr-ch&inst=consortium&conf=.%2fchameleon.conf&host=sarasvati.rero.ch%2b8891%2bDEFAULT&search=KEYWORD&function=CARDSCR&SourceScreen=INITREQ&elementcount=5&t1=Hirsch&u1=1003&op1=0&t2=Pierre&u2=1003&op2=0&pos=9&itempos=1&rootsearch=KEYWORD
=EF=BB=BF
Catalogue collectif
=20
=20
=20
Notice 9 sur 34
Votre recherche: - Auteur: Hirsch ET Auteur: =
Pierre=20
Titre
Jean-Paul=20
Zimmermann : =C3=A9tudes, documents, t=C3=A9moignages / =
textes de Karin=20
Vuilleumier-Tobler et Pierre =
Hirsch ; t=C3=A9moignages de =
Jean-Paul Borel,=20
Jean-Paul Boss, Samuel Roller et Louis-Albert Zbinden. Suivi =
de: Un=20
=C3=A9change de correspondance entre Jean-Paul Zimmermann et =
Georges=20
Pirou=C3=A9
Lieu / Dates =
Neuch=C3=A2tel : Nouvelle revue neuch=C3=A2teloise, 1989 =
(La=20
Chaux-de-Fonds : Impr. Typoffset Dynamic)
Collation
63 p. : ill. ; 23 cm
Collection
Nouvelle revue neuch=C3=A2teloise ; no 24
D=C3=A9crit dans =
Neue Z=C3=BCrcher Zeitung. - Zurich. - Nr. 32, 8. Februar =
1990, S. 30=20
(Rudolf Maurer)
Titre uniforme =
Zimmermann =
Sujet
Zimmermann, Jean-Paul
GENEVE
Ville.=20
Biblioth=C3=A8que art et arch=C3=A9ologie [Ge 46] =
NEUCHATEL
BPU=20
Neuch=C3=A2tel - Fonds d'=C3=A9tude [Ne V] Biblioth=C3=A8que=20
Ville de La Chaux-de-Fonds [CF V] Biblioth=C3=A8que=20
de la Ville du Locle [LL1]
No RERO
1182666
Autre auteur =
Hirsch , Pierre
Autre auteur =
Vuilleumier-Tobler,=20
Karin
Autre auteur =
Bore=
l,=20
Jean-Paul
Autre auteur =
Boss,=
=20
Jean-Paul
Autre auteur =
Roller=
,=20
Samuel
Autre auteur =
=
Zbinden,=20
Louis-Albert
Autre auteur =
=
Zimmermann,=20
Jean-Paul
Autre auteur =
=
Pirou=C3=A9,=20
Georges
Collection
Nouvelle=20
revue neuch=C3=A2teloise
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://opac.rero.ch/images/exclamation.png
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJPSURBVDjLpZPLS5RhFMYfv9QJlelTQZwR
b2OKlKuINuHGLlBEBEOLxAu46oL0F0QQFdWizUCrWnjBaDHgThCMoiKkhUONTqmjmDp2GZ0UnWbm
fc/ztrC+GbM2dXbv4ZzfeQ7vefKMMfifyP89IbevNNCYdkN2kawkCZKfSPZTOGTf6Y/m1uflKlC3
LvsNTWArr9BT2LAf+W73dn5jHclIBFZyfYWU3or7T4K7AJmbl/yG7EtX1BQXNTVCYgtgbAEAYHlq
YHlrsTEVQWr63RZFuqsfDAcdQPrGRR/JF5nKGm9xUxMyr0YBAEXXHgIANq/3ADQobD2J9fAkNiMT
MSFb9z8ambMAQER3JC1XttkYGGZXoyZEGyTHRuBuPgBTUu7VSnUAgAUAWutOV2MjZGkehgYUA6O5
A0AlkAyRnotiX3MLlFKduYCqAtuGXpyH0XQmOj+TIURt51OzURTYZdBKV2UBSsOIcRp/TVTT4ewK
6idECAihtUKOArWcjq/B8tQ6UkUR31+OYXP4sTOdisivrkMyHodWejlXwcC38Fvs8dY5xaIId89V
lJy7ACpCNCFCuOp8+BJ6A631gANQSg1mVmOxxGQYRW2nHMha4B5WA3chsv22T5/B13AIicWZmNZ6
cMchTXUe81Okzz54pLi0uQWp+TmkZqMwxsBV74Or3od4OISPr0e3SHa3PX0f3HXKofNH/UIG9pZ5
PeUth+CyS2EMkEqs4fPEOBJLsyske48/+xD8oxcAYPzs4QaS7RR2kbLTTOTQieczfzfTv8QPldGv
TGoF6/8AAAAASUVORK5CYII=
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://opac.rero.ch/images/help.png
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BPaK3matVq
ndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjhVbPt6o01nMvZ
Wge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOmPfaZArWT5sw60iFP
+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36IxpyoH1lHF7EBgyMKV4jC
J5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRIrVCuhmD3JdA6SQabx12srGB0
KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYugTmoVZgV9cyHSxXTtJjZR3WNCVfcK
/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWXdgeTEEosqPxoBK/TwDzWY9rowy51gJ1d
Gr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg
98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUx
AL0jgsoOQzYYS+wjskcjTzSToVAkA7Hqg4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl
+BXOb5jAsMYNjSWAm9VjwesPR1knFilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNq
xefU5QdDnFNX+Y5Qxrn9bDLUR6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe
4g9SuVwpdaFsgDxf2i84V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://resolver.rero.ch/rero/sfx.gif
R0lGODlhQwARAPf2AMbGxoyMjC4uLj4+Pjs7O5ubnHh4eMvLy7a2t8PDxB8fH+rq6ldXV21tbaio
qcTExMXFxdDQ0SkpKR4eHnt7e7i4uJOTk35+fgAAAIKDg2tra7S0tG9vb9LS0oqKimJiY3R0dPvz
8ywsLJmZmTw8PH19fQ4ODlxcXA8PDx0dHdTU1Pj4+NfX16+wsLC2tbO2tuKfn8h3djg4OZ+7uxsb
G7W1tcHBwcPDwzc3N9LS06+ys/37+8OdnODk5OHh4mhoae3Pz73Gxeje3nomKOTd39WhoYl4eXst
LVtcXIsdHaEvL3x9ffTo6KUUFOrMzIolJb7GxqysrJGSkotgYUZGRvXk5JaWlncHB66vr9vP0LRo
aIA7PHBxcbljY2BgYZ46OtmtrbpgX3V1dZF5eYYyMrJCQ9mqq5ssLK+vr5cpKa6ur243OJCQkcqg
oPDb2/br68XOzrDS0vbs7L+npvHp6dvMzPv09CoqKqanp6amp92ur72+vtPU1LJyceeuroVrbIRu
bcFwcNbIyfP4+M3NzX8FBZqamqJbXD09PZiYmWlCQpcsLK6urt+bnH5gYS0tLfDy8trb2/js7ZUe
HpWhoDg4ONWUlHUtLodCQdCqqs2Iid3r7LxRUYAoKNbf329QUdTb25EDA8vMzIk7OqpjY8rb293P
z58ZGisrK8m2t56enooODrNiY9uysqysrfLg4Jqbm71XV6WlpsRxcWMmJszMzIUHB5GRkapISLS0
tZycnHpDQ9K/u93d3YIJCaU3N4gNDciFhautrYlOTtGXl46Oj58iIqm7vdutrbq6uqGhoRwcHDo6
Or29vXR1da+wsfXw8IeNi7u7u76/wLCwsPf393wWF+G4uI0aGsRjY6ZdXJQFBa1MTJo+PmVlZZM1
NpqbnL6+vo8nKHp7e798fMfIyN7e3/r6+vDw8fb29unp6dHR0vz8/P39/b+/wP7+/qmqq5CRkqio
qOPj46mpqf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAPYALAAAAABDABEA
AAj/AFfMG0iwoMGDCBMqXKhwgT16yuRJnEixosWLGDNqxGhBRYBq9UKKHEmypMmTKEnuCBHiHUoI
AAKknEmzpkg7QCzNCqRH0kmYAd4JHUq0qNGjSJMOrRLjjLUjmL6Rk3MUaLurWBkpwKBAFdavYMNe
uBC2LFY3Sq4omuHJSSttvMo+iMmurl0UzdgRQtHLrt+/gAMLZvcmTKFPcWBweyIujRZogOcGOEe5
soIolA8sOLdggOfN0hQM0NVg8gEB50qUoNxAgIADrF3Dpnxt0pBjjcgAEjbnCzAelSvfiJmuuHEW
SCYMMFRcw4h0I06kqzCheDkB6TR4SEeBQjp6iKaP//sunUX14sRWTdmUqdSgV3SQnRoFynhxGzHR
6dfv44H+DiJYgQ4JIhBAwA/obEDCfink8EgH6BhgQIQT7mdACgYSsB8Y2HSTBSRM+NFFHUU0sQUc
++kXTkzqtNiiKCbU0iIDGajDgBTqRLKHOlgw46I3YqDSIgggqJMBA+qg4Yw6tyCpTgsuCsGKLb9k
g0snY5jCSSh/9OBii8nEZM6YZHqAgQzLSBCBORvQwMUdiZiDBw5k5mLCEmNywIE5EUjwQSV58Okn
FV6QaQ4RhwyziyMuCBLLNrQEYeiYNcS0zqWYrpNAAQ5kuikClybQKaYFJHApAqBeWkCqqo6aaTCk
tGdhhiZl+LIGOHxkeqkaMbnj66/ABivssMQW+2sqfSxiTBKXGKHDNMPKEhM81FZr7bXYZqvtttY+
80I0lEDhyrawAGABG/Gkq+667Lbr7rvwxvtuMQCoQM+9+Oar77789uvvv/5Ss0JAADs=
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://opac.rero.ch/images/logo_rero.png
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
AAAASUVORK5CYII=
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://opac.rero.ch/scripts/prototype.js
/* Prototype JavaScript framework, version 1.5.0_rc1=0A=
* (c) 2005 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://prototype.conio.net/=0A=
*=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
Version: '1.5.0_rc1',=0A=
ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)',=0A=
=0A=
emptyFunction: function() {},=0A=
K: function(x) {return x}=0A=
}=0A=
=0A=
var Class =3D {=0A=
create: function() {=0A=
return function() {=0A=
this.initialize.apply(this, arguments);=0A=
}=0A=
}=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
for (var property in source) {=0A=
destination[property] =3D source[property];=0A=
}=0A=
return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
inspect: function(object) {=0A=
try {=0A=
if (object =3D=3D undefined) return 'undefined';=0A=
if (object =3D=3D null) return 'null';=0A=
return object.inspect ? object.inspect() : object.toString();=0A=
} catch (e) {=0A=
if (e instanceof RangeError) return '...';=0A=
throw e;=0A=
}=0A=
},=0A=
=0A=
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=
=0A=
Function.prototype.bind =3D function() {=0A=
var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
return function() {=0A=
return __method.apply(object, args.concat($A(arguments)));=0A=
}=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
return function(event) {=0A=
return __method.apply(object, [( event || =
window.event)].concat(args).concat($A(arguments)));=0A=
}=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
toColorPart: function() {=0A=
var digits =3D this.toString(16);=0A=
if (this < 16) return '0' + digits;=0A=
return digits;=0A=
},=0A=
=0A=
succ: function() {=0A=
return this + 1;=0A=
},=0A=
=0A=
times: function(iterator) {=0A=
$R(0, this, true).each(iterator);=0A=
return this;=0A=
}=0A=
});=0A=
=0A=
var Try =3D {=0A=
these: function() {=0A=
var returnValue;=0A=
=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
var lambda =3D arguments[i];=0A=
try {=0A=
returnValue =3D lambda();=0A=
break;=0A=
} catch (e) {}=0A=
}=0A=
=0A=
return returnValue;=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
initialize: function(callback, frequency) {=0A=
this.callback =3D callback;=0A=
this.frequency =3D frequency;=0A=
this.currentlyExecuting =3D false;=0A=
=0A=
this.registerCallback();=0A=
},=0A=
=0A=
registerCallback: function() {=0A=
this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=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.callback(this);=0A=
} finally {=0A=
this.currentlyExecuting =3D false;=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 (replacement(match) || '').toString();=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 count =3D=3D=3D undefined ? 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 this;=0A=
},=0A=
=0A=
truncate: function(length, truncation) {=0A=
length =3D length || 30;=0A=
truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
return this.length > length ?=0A=
this.slice(0, length - truncation.length) + truncation : 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 div =3D document.createElement('div');=0A=
var text =3D document.createTextNode(this);=0A=
div.appendChild(text);=0A=
return div.innerHTML;=0A=
},=0A=
=0A=
unescapeHTML: function() {=0A=
var div =3D document.createElement('div');=0A=
div.innerHTML =3D this.stripTags();=0A=
return div.childNodes[0] ? div.childNodes[0].nodeValue : '';=0A=
},=0A=
=0A=
toQueryParams: function() {=0A=
var pairs =3D this.match(/^\??(.*)$/)[1].split('&');=0A=
return pairs.inject({}, function(params, pairString) {=0A=
var pair =3D pairString.split('=3D');=0A=
var value =3D pair[1] ? decodeURIComponent(pair[1]) : undefined;=0A=
params[decodeURIComponent(pair[0])] =3D value;=0A=
return params;=0A=
});=0A=
},=0A=
=0A=
toArray: function() {=0A=
return this.split('');=0A=
},=0A=
=0A=
camelize: function() {=0A=
var oStringList =3D this.split('-');=0A=
if (oStringList.length =3D=3D 1) return oStringList[0];=0A=
=0A=
var camelizedString =3D this.indexOf('-') =3D=3D 0=0A=
? oStringList[0].charAt(0).toUpperCase() + =
oStringList[0].substring(1)=0A=
: oStringList[0];=0A=
=0A=
for (var i =3D 1, len =3D oStringList.length; i < len; i++) {=0A=
var s =3D oStringList[i];=0A=
camelizedString +=3D s.charAt(0).toUpperCase() + s.substring(1);=0A=
}=0A=
=0A=
return camelizedString;=0A=
},=0A=
=0A=
inspect: function(useDoubleQuotes) {=0A=
var escapedString =3D this.replace(/\\/g, '\\\\');=0A=
if (useDoubleQuotes)=0A=
return '"' + escapedString.replace(/"/g, '\\"') + '"';=0A=
else=0A=
return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
}=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
if (typeof replacement =3D=3D 'function') 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=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=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=
return this.template.gsub(this.pattern, function(match) {=0A=
var before =3D match[1];=0A=
if (before =3D=3D '\\') return match[2];=0A=
return before + (object[match[3]] || '').toString();=0A=
});=0A=
}=0A=
}=0A=
=0A=
var $break =3D new Object();=0A=
var $continue =3D new Object();=0A=
=0A=
var Enumerable =3D {=0A=
each: function(iterator) {=0A=
var index =3D 0;=0A=
try {=0A=
this._each(function(value) {=0A=
try {=0A=
iterator(value, index++);=0A=
} catch (e) {=0A=
if (e !=3D $continue) throw e;=0A=
}=0A=
});=0A=
} catch (e) {=0A=
if (e !=3D $break) throw e;=0A=
}=0A=
},=0A=
=0A=
all: function(iterator) {=0A=
var result =3D true;=0A=
this.each(function(value, index) {=0A=
result =3D result && !!(iterator || Prototype.K)(value, index);=0A=
if (!result) throw $break;=0A=
});=0A=
return result;=0A=
},=0A=
=0A=
any: function(iterator) {=0A=
var result =3D false;=0A=
this.each(function(value, index) {=0A=
if (result =3D !!(iterator || Prototype.K)(value, index))=0A=
throw $break;=0A=
});=0A=
return result;=0A=
},=0A=
=0A=
collect: function(iterator) {=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
results.push(iterator(value, index));=0A=
});=0A=
return results;=0A=
},=0A=
=0A=
detect: function (iterator) {=0A=
var result;=0A=
this.each(function(value, index) {=0A=
if (iterator(value, index)) {=0A=
result =3D value;=0A=
throw $break;=0A=
}=0A=
});=0A=
return result;=0A=
},=0A=
=0A=
findAll: function(iterator) {=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
if (iterator(value, index))=0A=
results.push(value);=0A=
});=0A=
return results;=0A=
},=0A=
=0A=
grep: function(pattern, iterator) {=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
var stringValue =3D value.toString();=0A=
if (stringValue.match(pattern))=0A=
results.push((iterator || Prototype.K)(value, index));=0A=
})=0A=
return results;=0A=
},=0A=
=0A=
include: function(object) {=0A=
var found =3D false;=0A=
this.each(function(value) {=0A=
if (value =3D=3D object) {=0A=
found =3D true;=0A=
throw $break;=0A=
}=0A=
});=0A=
return found;=0A=
},=0A=
=0A=
inject: function(memo, iterator) {=0A=
this.each(function(value, index) {=0A=
memo =3D iterator(memo, value, index);=0A=
});=0A=
return memo;=0A=
},=0A=
=0A=
invoke: function(method) {=0A=
var args =3D $A(arguments).slice(1);=0A=
return this.collect(function(value) {=0A=
return value[method].apply(value, args);=0A=
});=0A=
},=0A=
=0A=
max: function(iterator) {=0A=
var result;=0A=
this.each(function(value, index) {=0A=
value =3D (iterator || Prototype.K)(value, index);=0A=
if (result =3D=3D undefined || value >=3D result)=0A=
result =3D value;=0A=
});=0A=
return result;=0A=
},=0A=
=0A=
min: function(iterator) {=0A=
var result;=0A=
this.each(function(value, index) {=0A=
value =3D (iterator || Prototype.K)(value, index);=0A=
if (result =3D=3D undefined || value < result)=0A=
result =3D value;=0A=
});=0A=
return result;=0A=
},=0A=
=0A=
partition: function(iterator) {=0A=
var trues =3D [], falses =3D [];=0A=
this.each(function(value, index) {=0A=
((iterator || Prototype.K)(value, index) ?=0A=
trues : falses).push(value);=0A=
});=0A=
return [trues, falses];=0A=
},=0A=
=0A=
pluck: function(property) {=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
results.push(value[property]);=0A=
});=0A=
return results;=0A=
},=0A=
=0A=
reject: function(iterator) {=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
if (!iterator(value, index))=0A=
results.push(value);=0A=
});=0A=
return results;=0A=
},=0A=
=0A=
sortBy: function(iterator) {=0A=
return this.collect(function(value, index) {=0A=
return {value: value, criteria: iterator(value, index)};=0A=
}).sort(function(left, right) {=0A=
var a =3D left.criteria, b =3D right.criteria;=0A=
return a < b ? -1 : a > b ? 1 : 0;=0A=
}).pluck('value');=0A=
},=0A=
=0A=
toArray: function() {=0A=
return this.collect(Prototype.K);=0A=
},=0A=
=0A=
zip: function() {=0A=
var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
if (typeof args.last() =3D=3D 'function')=0A=
iterator =3D args.pop();=0A=
=0A=
var collections =3D [this].concat(args).map($A);=0A=
return this.map(function(value, index) {=0A=
return iterator(collections.pluck(index));=0A=
});=0A=
},=0A=
=0A=
inspect: function() {=0A=
return '#';=0A=
}=0A=
}=0A=
=0A=
Object.extend(Enumerable, {=0A=
map: Enumerable.collect,=0A=
find: Enumerable.detect,=0A=
select: Enumerable.findAll,=0A=
member: Enumerable.include,=0A=
entries: Enumerable.toArray=0A=
});=0A=
var $A =3D Array.from =3D function(iterable) {=0A=
if (!iterable) return [];=0A=
if (iterable.toArray) {=0A=
return iterable.toArray();=0A=
} else {=0A=
var results =3D [];=0A=
for (var i =3D 0; i < iterable.length; i++)=0A=
results.push(iterable[i]);=0A=
return results;=0A=
}=0A=
}=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse)=0A=
Array.prototype._reverse =3D Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
_each: function(iterator) {=0A=
for (var i =3D 0; i < this.length; i++)=0A=
iterator(this[i]);=0A=
},=0A=
=0A=
clear: function() {=0A=
this.length =3D 0;=0A=
return this;=0A=
},=0A=
=0A=
first: function() {=0A=
return this[0];=0A=
},=0A=
=0A=
last: function() {=0A=
return this[this.length - 1];=0A=
},=0A=
=0A=
compact: function() {=0A=
return this.select(function(value) {=0A=
return value !=3D undefined || value !=3D null;=0A=
});=0A=
},=0A=
=0A=
flatten: function() {=0A=
return this.inject([], function(array, value) {=0A=
return array.concat(value && value.constructor =3D=3D Array ?=0A=
value.flatten() : [value]);=0A=
});=0A=
},=0A=
=0A=
without: function() {=0A=
var values =3D $A(arguments);=0A=
return this.select(function(value) {=0A=
return !values.include(value);=0A=
});=0A=
},=0A=
=0A=
indexOf: function(object) {=0A=
for (var i =3D 0; i < this.length; i++)=0A=
if (this[i] =3D=3D object) return i;=0A=
return -1;=0A=
},=0A=
=0A=
reverse: function(inline) {=0A=
return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
},=0A=
=0A=
reduce: function() {=0A=
return this.length > 1 ? this : this[0];=0A=
},=0A=
=0A=
uniq: function() {=0A=
return this.inject([], function(array, value) {=0A=
return array.include(value) ? array : array.concat([value]);=0A=
});=0A=
},=0A=
=0A=
inspect: function() {=0A=
return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
}=0A=
});=0A=
var Hash =3D {=0A=
_each: function(iterator) {=0A=
for (var key in this) {=0A=
var value =3D this[key];=0A=
if (typeof value =3D=3D 'function') continue;=0A=
=0A=
var pair =3D [key, value];=0A=
pair.key =3D key;=0A=
pair.value =3D value;=0A=
iterator(pair);=0A=
}=0A=
},=0A=
=0A=
keys: function() {=0A=
return this.pluck('key');=0A=
},=0A=
=0A=
values: function() {=0A=
return this.pluck('value');=0A=
},=0A=
=0A=
merge: function(hash) {=0A=
return $H(hash).inject($H(this), function(mergedHash, pair) {=0A=
mergedHash[pair.key] =3D pair.value;=0A=
return mergedHash;=0A=
});=0A=
},=0A=
=0A=
toQueryString: function() {=0A=
return this.map(function(pair) {=0A=
return pair.map(encodeURIComponent).join('=3D');=0A=
}).join('&');=0A=
},=0A=
=0A=
inspect: function() {=0A=
return '#';=0A=
}=0A=
}=0A=
=0A=
function $H(object) {=0A=
var hash =3D Object.extend({}, object || {});=0A=
Object.extend(hash, Enumerable);=0A=
Object.extend(hash, Hash);=0A=
return hash;=0A=
}=0A=
ObjectRange =3D Class.create();=0A=
Object.extend(ObjectRange.prototype, Enumerable);=0A=
Object.extend(ObjectRange.prototype, {=0A=
initialize: function(start, end, exclusive) {=0A=
this.start =3D start;=0A=
this.end =3D end;=0A=
this.exclusive =3D exclusive;=0A=
},=0A=
=0A=
_each: function(iterator) {=0A=
var value =3D this.start;=0A=
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(responderToAdd) {=0A=
if (!this.include(responderToAdd))=0A=
this.responders.push(responderToAdd);=0A=
},=0A=
=0A=
unregister: function(responderToRemove) {=0A=
this.responders =3D this.responders.without(responderToRemove);=0A=
},=0A=
=0A=
dispatch: function(callback, request, transport, json) {=0A=
this.each(function(responder) {=0A=
if (responder[callback] && typeof responder[callback] =3D=3D =
'function') {=0A=
try {=0A=
responder[callback].apply(responder, [request, transport, =
json]);=0A=
} catch (e) {}=0A=
}=0A=
});=0A=
}=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
onCreate: function() {=0A=
Ajax.activeRequestCount++;=0A=
},=0A=
=0A=
onComplete: function() {=0A=
Ajax.activeRequestCount--;=0A=
}=0A=
});=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
setOptions: function(options) {=0A=
this.options =3D {=0A=
method: 'post',=0A=
asynchronous: true,=0A=
contentType: 'application/x-www-form-urlencoded',=0A=
parameters: ''=0A=
}=0A=
Object.extend(this.options, options || {});=0A=
},=0A=
=0A=
responseIsSuccess: function() {=0A=
return this.transport.status =3D=3D undefined=0A=
|| this.transport.status =3D=3D 0=0A=
|| (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
},=0A=
=0A=
responseIsFailure: function() {=0A=
return !this.responseIsSuccess();=0A=
}=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D=0A=
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A=
initialize: function(url, options) {=0A=
this.transport =3D Ajax.getTransport();=0A=
this.setOptions(options);=0A=
this.request(url);=0A=
},=0A=
=0A=
request: function(url) {=0A=
var parameters =3D this.options.parameters || '';=0A=
if (parameters.length > 0) parameters +=3D '&_=3D';=0A=
=0A=
/* Simulate other verbs over post */=0A=
if (this.options.method !=3D 'get' && this.options.method !=3D =
'post') {=0A=
parameters +=3D (parameters.length > 0 ? '&' : '') + '_method=3D' =
+ this.options.method;=0A=
this.options.method =3D 'post';=0A=
}=0A=
=0A=
try {=0A=
this.url =3D url;=0A=
if (this.options.method =3D=3D 'get' && parameters.length > 0)=0A=
this.url +=3D (this.url.match(/\?/) ? '&' : '?') + parameters;=0A=
=0A=
Ajax.Responders.dispatch('onCreate', this, this.transport);=0A=
=0A=
this.transport.open(this.options.method, this.url,=0A=
this.options.asynchronous);=0A=
=0A=
if (this.options.asynchronous)=0A=
setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);=0A=
=0A=
this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
this.setRequestHeaders();=0A=
=0A=
var body =3D this.options.postBody ? this.options.postBody : =
parameters;=0A=
this.transport.send(this.options.method =3D=3D 'post' ? body : =
null);=0A=
=0A=
/* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
this.onStateChange();=0A=
=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
},=0A=
=0A=
setRequestHeaders: function() {=0A=
var requestHeaders =3D=0A=
['X-Requested-With', 'XMLHttpRequest',=0A=
'X-Prototype-Version', Prototype.Version,=0A=
'Accept', 'text/javascript, text/html, application/xml, text/xml, =
*/*'];=0A=
=0A=
if (this.options.method =3D=3D 'post') {=0A=
requestHeaders.push('Content-type', this.options.contentType);=0A=
=0A=
/* Force "Connection: close" for Mozilla browsers to work around=0A=
* a bug where XMLHttpReqeuest sends an incorrect Content-length=0A=
* header. See Mozilla Bugzilla #246651.=0A=
*/=0A=
if (this.transport.overrideMimeType)=0A=
requestHeaders.push('Connection', 'close');=0A=
}=0A=
=0A=
if (this.options.requestHeaders)=0A=
requestHeaders.push.apply(requestHeaders, =
this.options.requestHeaders);=0A=
=0A=
for (var i =3D 0; i < requestHeaders.length; i +=3D 2)=0A=
this.transport.setRequestHeader(requestHeaders[i], =
requestHeaders[i+1]);=0A=
},=0A=
=0A=
onStateChange: function() {=0A=
var readyState =3D this.transport.readyState;=0A=
if (readyState !=3D 1)=0A=
this.respondToReadyState(this.transport.readyState);=0A=
},=0A=
=0A=
header: function(name) {=0A=
try {=0A=
return this.transport.getResponseHeader(name);=0A=
} catch (e) {}=0A=
},=0A=
=0A=
evalJSON: function() {=0A=
try {=0A=
return eval('(' + this.header('X-JSON') + ')');=0A=
} catch (e) {}=0A=
},=0A=
=0A=
evalResponse: function() {=0A=
try {=0A=
return eval(this.transport.responseText);=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
},=0A=
=0A=
respondToReadyState: function(readyState) {=0A=
var event =3D Ajax.Request.Events[readyState];=0A=
var transport =3D this.transport, json =3D this.evalJSON();=0A=
=0A=
if (event =3D=3D 'Complete') {=0A=
try {=0A=
(this.options['on' + this.transport.status]=0A=
|| this.options['on' + (this.responseIsSuccess() ? 'Success' : =
'Failure')]=0A=
|| Prototype.emptyFunction)(transport, json);=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
=0A=
if ((this.header('Content-type') || =
'').match(/^text\/javascript/i))=0A=
this.evalResponse();=0A=
}=0A=
=0A=
try {=0A=
(this.options['on' + event] || Prototype.emptyFunction)(transport, =
json);=0A=
Ajax.Responders.dispatch('on' + event, this, transport, json);=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
=0A=
/* Avoid memory leak in MSIE: clean up the oncomplete event handler =
*/=0A=
if (event =3D=3D 'Complete')=0A=
this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
},=0A=
=0A=
dispatchException: function(exception) {=0A=
(this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
Ajax.Responders.dispatch('onException', this, exception);=0A=
}=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
=0A=
Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {=0A=
initialize: function(container, url, options) {=0A=
this.containers =3D {=0A=
success: container.success ? $(container.success) : $(container),=0A=
failure: container.failure ? $(container.failure) :=0A=
(container.success ? null : $(container))=0A=
}=0A=
=0A=
this.transport =3D Ajax.getTransport();=0A=
this.setOptions(options);=0A=
=0A=
var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
this.options.onComplete =3D (function(transport, object) {=0A=
this.updateContent();=0A=
onComplete(transport, object);=0A=
}).bind(this);=0A=
=0A=
this.request(url);=0A=
},=0A=
=0A=
updateContent: function() {=0A=
var receiver =3D this.responseIsSuccess() ?=0A=
this.containers.success : this.containers.failure;=0A=
var response =3D this.transport.responseText;=0A=
=0A=
if (!this.options.evalScripts)=0A=
response =3D response.stripScripts();=0A=
=0A=
if (receiver) {=0A=
if (this.options.insertion) {=0A=
new this.options.insertion(receiver, response);=0A=
} else {=0A=
Element.update(receiver, response);=0A=
}=0A=
}=0A=
=0A=
if (this.responseIsSuccess()) {=0A=
if (this.onComplete)=0A=
setTimeout(this.onComplete.bind(this), 10);=0A=
}=0A=
}=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A=
initialize: function(container, url, options) {=0A=
this.setOptions(options);=0A=
this.onComplete =3D this.options.onComplete;=0A=
=0A=
this.frequency =3D (this.options.frequency || 2);=0A=
this.decay =3D (this.options.decay || 1);=0A=
=0A=
this.updater =3D {};=0A=
this.container =3D container;=0A=
this.url =3D url;=0A=
=0A=
this.start();=0A=
},=0A=
=0A=
start: function() {=0A=
this.options.onComplete =3D this.updateComplete.bind(this);=0A=
this.onTimerEvent();=0A=
},=0A=
=0A=
stop: function() {=0A=
this.updater.options.onComplete =3D undefined;=0A=
clearTimeout(this.timer);=0A=
(this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
},=0A=
=0A=
updateComplete: function(request) {=0A=
if (this.options.decay) {=0A=
this.decay =3D (request.responseText =3D=3D this.lastText ?=0A=
this.decay * this.options.decay : 1);=0A=
=0A=
this.lastText =3D request.responseText;=0A=
}=0A=
this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A=
this.decay * this.frequency * 1000);=0A=
},=0A=
=0A=
onTimerEvent: function() {=0A=
this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
}=0A=
});=0A=
function $() {=0A=
var results =3D [], element;=0A=
for (var i =3D 0; i < arguments.length; i++) {=0A=
element =3D arguments[i];=0A=
if (typeof element =3D=3D 'string')=0A=
element =3D document.getElementById(element);=0A=
results.push(Element.extend(element));=0A=
}=0A=
return results.reduce();=0A=
}=0A=
=0A=
document.getElementsByClassName =3D function(className, parentElement) {=0A=
var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');=0A=
return $A(children).inject([], function(elements, child) {=0A=
if (child.className.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))=0A=
elements.push(Element.extend(child));=0A=
return elements;=0A=
});=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element)=0A=
var Element =3D new Object();=0A=
=0A=
Element.extend =3D function(element) {=0A=
if (!element) return;=0A=
if (_nativeExtensions || element.nodeType =3D=3D 3) return element;=0A=
=0A=
if (!element._extended && element.tagName && element !=3D window) {=0A=
var methods =3D Object.clone(Element.Methods), cache =3D =
Element.extend.cache;=0A=
=0A=
if (element.tagName =3D=3D 'FORM')=0A=
Object.extend(methods, Form.Methods);=0A=
if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))=0A=
Object.extend(methods, Form.Element.Methods);=0A=
=0A=
for (var property in methods) {=0A=
var value =3D methods[property];=0A=
if (typeof value =3D=3D 'function')=0A=
element[property] =3D cache.findOrStore(value);=0A=
}=0A=
}=0A=
=0A=
element._extended =3D true;=0A=
return element;=0A=
}=0A=
=0A=
Element.extend.cache =3D {=0A=
findOrStore: function(value) {=0A=
return this[value] =3D this[value] || function() {=0A=
return value.apply(null, [this].concat($A(arguments)));=0A=
}=0A=
}=0A=
}=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, html) {=0A=
$(element).innerHTML =3D html.stripScripts();=0A=
setTimeout(function() {html.evalScripts()}, 10);=0A=
return element;=0A=
},=0A=
=0A=
replace: function(element, html) {=0A=
element =3D $(element);=0A=
if (element.outerHTML) {=0A=
element.outerHTML =3D html.stripScripts();=0A=
} else {=0A=
var range =3D element.ownerDocument.createRange();=0A=
range.selectNodeContents(element);=0A=
element.parentNode.replaceChild(=0A=
range.createContextualFragment(html.stripScripts()), element);=0A=
}=0A=
setTimeout(function() {html.evalScripts()}, 10);=0A=
return element;=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=
element =3D $(element);=0A=
return $A(element.getElementsByTagName('*'));=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=
element =3D $(element);=0A=
if (typeof selector =3D=3D 'string')=0A=
selector =3D new Selector(selector);=0A=
return selector.match(element);=0A=
},=0A=
=0A=
up: function(element, expression, index) {=0A=
return Selector.findElement($(element).ancestors(), expression, =
index);=0A=
},=0A=
=0A=
down: function(element, expression, index) {=0A=
return Selector.findElement($(element).descendants(), expression, =
index);=0A=
},=0A=
=0A=
previous: function(element, expression, index) {=0A=
return Selector.findElement($(element).previousSiblings(), =
expression, index);=0A=
},=0A=
=0A=
next: function(element, expression, index) {=0A=
return Selector.findElement($(element).nextSiblings(), expression, =
index);=0A=
},=0A=
=0A=
getElementsBySelector: function() {=0A=
var args =3D $A(arguments), element =3D $(args.shift());=0A=
return Selector.findChildElements(element, args);=0A=
},=0A=
=0A=
getElementsByClassName: function(element, className) {=0A=
element =3D $(element);=0A=
return document.getElementsByClassName(className, element);=0A=
},=0A=
=0A=
getHeight: function(element) {=0A=
element =3D $(element);=0A=
return element.offsetHeight;=0A=
},=0A=
=0A=
classNames: function(element) {=0A=
return new Element.ClassNames(element);=0A=
},=0A=
=0A=
hasClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
return Element.classNames(element).include(className);=0A=
},=0A=
=0A=
addClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
Element.classNames(element).add(className);=0A=
return element;=0A=
},=0A=
=0A=
removeClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
Element.classNames(element).remove(className);=0A=
return element;=0A=
},=0A=
=0A=
observe: function() {=0A=
Event.observe.apply(Event, arguments);=0A=
return $A(arguments).first();=0A=
},=0A=
=0A=
stopObserving: function() {=0A=
Event.stopObserving.apply(Event, arguments);=0A=
return $A(arguments).first();=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.match(/^\s*$/);=0A=
},=0A=
=0A=
childOf: function(element, ancestor) {=0A=
element =3D $(element), ancestor =3D $(ancestor);=0A=
while (element =3D element.parentNode)=0A=
if (element =3D=3D ancestor) return true;=0A=
return false;=0A=
},=0A=
=0A=
scrollTo: function(element) {=0A=
element =3D $(element);=0A=
var x =3D element.x ? element.x : element.offsetLeft,=0A=
y =3D element.y ? element.y : element.offsetTop;=0A=
window.scrollTo(x, y);=0A=
return element;=0A=
},=0A=
=0A=
getStyle: function(element, style) {=0A=
element =3D $(element);=0A=
var value =3D element.style[style.camelize()];=0A=
if (!value) {=0A=
if (document.defaultView && document.defaultView.getComputedStyle) =
{=0A=
var css =3D document.defaultView.getComputedStyle(element, null);=0A=
value =3D css ? css.getPropertyValue(style) : null;=0A=
} else if (element.currentStyle) {=0A=
value =3D element.currentStyle[style.camelize()];=0A=
}=0A=
}=0A=
=0A=
if (window.opera && ['left', 'top', 'right', =
'bottom'].include(style))=0A=
if (Element.getStyle(element, 'position') =3D=3D 'static') value =
=3D 'auto';=0A=
=0A=
return value =3D=3D 'auto' ? null : value;=0A=
},=0A=
=0A=
setStyle: function(element, style) {=0A=
element =3D $(element);=0A=
for (var name in style)=0A=
element.style[name.camelize()] =3D style[name];=0A=
return element;=0A=
},=0A=
=0A=
getDimensions: function(element) {=0A=
element =3D $(element);=0A=
if (Element.getStyle(element, 'display') !=3D 'none')=0A=
return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
// All *Width and *Height properties give 0 on elements with display =
none,=0A=
// so enable the element temporarily=0A=
var els =3D element.style;=0A=
var originalVisibility =3D els.visibility;=0A=
var originalPosition =3D els.position;=0A=
els.visibility =3D 'hidden';=0A=
els.position =3D 'absolute';=0A=
els.display =3D '';=0A=
var originalWidth =3D element.clientWidth;=0A=
var originalHeight =3D element.clientHeight;=0A=
els.display =3D 'none';=0A=
els.position =3D originalPosition;=0A=
els.visibility =3D originalVisibility;=0A=
return {width: originalWidth, height: originalHeight};=0A=
},=0A=
=0A=
makePositioned: function(element) {=0A=
element =3D $(element);=0A=
var pos =3D Element.getStyle(element, 'position');=0A=
if (pos =3D=3D 'static' || !pos) {=0A=
element._madePositioned =3D true;=0A=
element.style.position =3D 'relative';=0A=
// Opera returns the offset relative to the positioning context, =
when an=0A=
// element is position relative but top and left have not been =
defined=0A=
if (window.opera) {=0A=
element.style.top =3D 0;=0A=
element.style.left =3D 0;=0A=
}=0A=
}=0A=
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;=0A=
element._overflow =3D element.style.overflow || 'auto';=0A=
if ((Element.getStyle(element, 'overflow') || 'visible') !=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;=0A=
element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
element._overflow =3D null;=0A=
return element;=0A=
}=0A=
}=0A=
=0A=
// IE is missing .innerHTML support for TABLE-related elements=0A=
if(document.all){=0A=
Element.Methods.update =3D function(element, html) {=0A=
element =3D $(element);=0A=
var tagName =3D element.tagName.toUpperCase();=0A=
if (['THEAD','TBODY','TR','TD'].indexOf(tagName) > -1) {=0A=
var div =3D document.createElement('div');=0A=
switch (tagName) {=0A=
case 'THEAD':=0A=
case 'TBODY':=0A=
div.innerHTML =3D '' + html.stripScripts() + =
'
';=0A=
depth =3D 2;=0A=
break;=0A=
case 'TR':=0A=
div.innerHTML =3D '' + html.stripScripts() =
+ '
';=0A=
depth =3D 3;=0A=
break;=0A=
case 'TD':=0A=
div.innerHTML =3D '' + =
html.stripScripts() + '
';=0A=
depth =3D 4;=0A=
}=0A=
$A(element.childNodes).each(function(node){=0A=
element.removeChild(node)=0A=
});=0A=
depth.times(function(){ div =3D div.firstChild });=0A=
=0A=
$A(div.childNodes).each(=0A=
function(node){ element.appendChild(node) });=0A=
} else {=0A=
element.innerHTML =3D html.stripScripts();=0A=
}=0A=
setTimeout(function() {html.evalScripts()}, 10);=0A=
return element;=0A=
}=0A=
}=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
var _nativeExtensions =3D false;=0A=
=0A=
if (!window.HTMLElement && =
/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A=
/* Emulate HTMLElement, HTMLFormElement, HTMLInputElement, =
HTMLTextAreaElement,=0A=
and HTMLSelectElement in Safari */=0A=
['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {=0A=
var klass =3D window['HTML' + tag + 'Element'] =3D {};=0A=
klass.prototype =3D document.createElement(tag ? tag.toLowerCase() : =
'div').__proto__;=0A=
});=0A=
}=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
Object.extend(Element.Methods, methods || {});=0A=
=0A=
function copy(methods, destination) {=0A=
var cache =3D Element.extend.cache;=0A=
for (var property in methods) {=0A=
var value =3D methods[property];=0A=
destination[property] =3D cache.findOrStore(value);=0A=
}=0A=
}=0A=
=0A=
if (typeof HTMLElement !=3D 'undefined') {=0A=
copy(Element.Methods, HTMLElement.prototype);=0A=
copy(Form.Methods, HTMLFormElement.prototype);=0A=
[HTMLInputElement, HTMLTextAreaElement, =
HTMLSelectElement].each(function(klass) {=0A=
copy(Form.Element.Methods, klass.prototype);=0A=
});=0A=
_nativeExtensions =3D true;=0A=
}=0A=
}=0A=
=0A=
var Toggle =3D new Object();=0A=
Toggle.display =3D Element.toggle;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
initialize: function(element, content) {=0A=
this.element =3D $(element);=0A=
this.content =3D content.stripScripts();=0A=
=0A=
if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
try {=0A=
this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
} catch (e) {=0A=
var tagName =3D this.element.tagName.toLowerCase();=0A=
if (tagName =3D=3D 'tbody' || tagName =3D=3D 'tr') {=0A=
this.insertContent(this.contentFromAnonymousTable());=0A=
} else {=0A=
throw e;=0A=
}=0A=
}=0A=
} else {=0A=
this.range =3D this.element.ownerDocument.createRange();=0A=
if (this.initializeRange) this.initializeRange();=0A=
=
this.insertContent([this.range.createContextualFragment(this.content)]);=0A=
}=0A=
=0A=
setTimeout(function() {content.evalScripts()}, 10);=0A=
},=0A=
=0A=
contentFromAnonymousTable: function() {=0A=
var div =3D document.createElement('div');=0A=
div.innerHTML =3D '';=0A=
return $A(div.childNodes[0].childNodes[0].childNodes);=0A=
}=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {=0A=
initializeRange: function() {=0A=
this.range.setStartBefore(this.element);=0A=
},=0A=
=0A=
insertContent: function(fragments) {=0A=
fragments.each((function(fragment) {=0A=
this.element.parentNode.insertBefore(fragment, this.element);=0A=
}).bind(this));=0A=
}=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {=0A=
initializeRange: function() {=0A=
this.range.selectNodeContents(this.element);=0A=
this.range.collapse(true);=0A=
},=0A=
=0A=
insertContent: function(fragments) {=0A=
fragments.reverse(false).each((function(fragment) {=0A=
this.element.insertBefore(fragment, this.element.firstChild);=0A=
}).bind(this));=0A=
}=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {=0A=
initializeRange: function() {=0A=
this.range.selectNodeContents(this.element);=0A=
this.range.collapse(this.element);=0A=
},=0A=
=0A=
insertContent: function(fragments) {=0A=
fragments.each((function(fragment) {=0A=
this.element.appendChild(fragment);=0A=
}).bind(this));=0A=
}=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {=0A=
initializeRange: function() {=0A=
this.range.setStartAfter(this.element);=0A=
},=0A=
=0A=
insertContent: function(fragments) {=0A=
fragments.each((function(fragment) {=0A=
this.element.parentNode.insertBefore(fragment,=0A=
this.element.nextSibling);=0A=
}).bind(this));=0A=
}=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
},=0A=
=0A=
_each: function(iterator) {=0A=
this.element.className.split(/\s+/).select(function(name) {=0A=
return name.length > 0;=0A=
})._each(iterator);=0A=
},=0A=
=0A=
set: function(className) {=0A=
this.element.className =3D className;=0A=
},=0A=
=0A=
add: function(classNameToAdd) {=0A=
if (this.include(classNameToAdd)) return;=0A=
this.set(this.toArray().concat(classNameToAdd).join(' '));=0A=
},=0A=
=0A=
remove: function(classNameToRemove) {=0A=
if (!this.include(classNameToRemove)) return;=0A=
this.set(this.select(function(className) {=0A=
return className !=3D classNameToRemove;=0A=
}).join(' '));=0A=
},=0A=
=0A=
toString: function() {=0A=
return this.toArray().join(' ');=0A=
}=0A=
}=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
var Selector =3D Class.create();=0A=
Selector.prototype =3D {=0A=
initialize: function(expression) {=0A=
this.params =3D {classNames: []};=0A=
this.expression =3D expression.toString().strip();=0A=
this.parseExpression();=0A=
this.compileMatcher();=0A=
},=0A=
=0A=
parseExpression: function() {=0A=
function abort(message) { throw 'Parse error in selector: ' + =
message; }=0A=
=0A=
if (this.expression =3D=3D '') abort('empty expression');=0A=
=0A=
var params =3D this.params, expr =3D this.expression, match, =
modifier, clause, rest;=0A=
while (match =3D =
expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=3D)(?:"([^"]*)"|([^\]\s]*))=
)?\]$/i)) {=0A=
params.attributes =3D params.attributes || [];=0A=
params.attributes.push({name: match[2], operator: match[3], value: =
match[4] || match[5] || ''});=0A=
expr =3D match[1];=0A=
}=0A=
=0A=
if (expr =3D=3D '*') return this.params.wildcard =3D true;=0A=
=0A=
while (match =3D expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {=0A=
modifier =3D match[1], clause =3D match[2], rest =3D match[3];=0A=
switch (modifier) {=0A=
case '#': params.id =3D clause; break;=0A=
case '.': params.classNames.push(clause); break;=0A=
case '':=0A=
case undefined: params.tagName =3D clause.toUpperCase(); break;=0A=
default: abort(expr.inspect());=0A=
}=0A=
expr =3D rest;=0A=
}=0A=
=0A=
if (expr.length > 0) abort(expr.inspect());=0A=
},=0A=
=0A=
buildMatchExpression: function() {=0A=
var params =3D this.params, conditions =3D [], clause;=0A=
=0A=
if (params.wildcard)=0A=
conditions.push('true');=0A=
if (clause =3D params.id)=0A=
conditions.push('element.id =3D=3D ' + clause.inspect());=0A=
if (clause =3D params.tagName)=0A=
conditions.push('element.tagName.toUpperCase() =3D=3D ' + =
clause.inspect());=0A=
if ((clause =3D params.classNames).length > 0)=0A=
for (var i =3D 0; i < clause.length; i++)=0A=
conditions.push('Element.hasClassName(element, ' + =
clause[i].inspect() + ')');=0A=
if (clause =3D params.attributes) {=0A=
clause.each(function(attribute) {=0A=
var value =3D 'element.getAttribute(' + attribute.name.inspect() =
+ ')';=0A=
var splitValueBy =3D function(delimiter) {=0A=
return value + ' && ' + value + '.split(' + =
delimiter.inspect() + ')';=0A=
}=0A=
=0A=
switch (attribute.operator) {=0A=
case '=3D': conditions.push(value + ' =3D=3D ' + =
attribute.value.inspect()); break;=0A=
case '~=3D': conditions.push(splitValueBy(' ') + =
'.include(' + attribute.value.inspect() + ')'); break;=0A=
case '|=3D': conditions.push(=0A=
splitValueBy('-') + '.first().toUpperCase() =
=3D=3D ' + attribute.value.toUpperCase().inspect()=0A=
); break;=0A=
case '!=3D': conditions.push(value + ' !=3D ' + =
attribute.value.inspect()); break;=0A=
case '':=0A=
case undefined: conditions.push(value + ' !=3D null'); break;=0A=
default: throw 'Unknown operator ' + attribute.operator =
+ ' in selector';=0A=
}=0A=
});=0A=
}=0A=
=0A=
return conditions.join(' && ');=0A=
},=0A=
=0A=
compileMatcher: function() {=0A=
this.match =3D new Function('element', 'if (!element.tagName) return =
false; \=0A=
return ' + this.buildMatchExpression());=0A=
},=0A=
=0A=
findElements: function(scope) {=0A=
var element;=0A=
=0A=
if (element =3D $(this.params.id))=0A=
if (this.match(element))=0A=
if (!scope || Element.childOf(element, scope))=0A=
return [element];=0A=
=0A=
scope =3D (scope || =
document).getElementsByTagName(this.params.tagName || '*');=0A=
=0A=
var results =3D [];=0A=
for (var i =3D 0; i < scope.length; i++)=0A=
if (this.match(element =3D scope[i]))=0A=
results.push(Element.extend(element));=0A=
=0A=
return results;=0A=
},=0A=
=0A=
toString: function() {=0A=
return this.expression;=0A=
}=0A=
}=0A=
=0A=
Object.extend(Selector, {=0A=
matchElements: function(elements, expression) {=0A=
var selector =3D new Selector(expression);=0A=
return elements.select(selector.match.bind(selector));=0A=
},=0A=
=0A=
findElement: function(elements, expression, index) {=0A=
if (typeof expression =3D=3D 'number') index =3D expression, =
expression =3D false;=0A=
return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
},=0A=
=0A=
findChildElements: function(element, expressions) {=0A=
return expressions.map(function(expression) {=0A=
return expression.strip().split(/\s+/).inject([null], =
function(results, expr) {=0A=
var selector =3D new Selector(expr);=0A=
return results.inject([], function(elements, result) {=0A=
return elements.concat(selector.findElements(result || =
element));=0A=
});=0A=
});=0A=
}).flatten();=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=
=0A=
Form.Methods =3D {=0A=
serialize: function(form) {=0A=
var elements =3D Form.getElements($(form));=0A=
var queryComponents =3D new Array();=0A=
=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var queryComponent =3D Form.Element.serialize(elements[i]);=0A=
if (queryComponent)=0A=
queryComponents.push(queryComponent);=0A=
}=0A=
=0A=
return queryComponents.join('&');=0A=
},=0A=
=0A=
getElements: function(form) {=0A=
form =3D $(form);=0A=
var elements =3D new Array();=0A=
=0A=
for (var tagName in Form.Element.Serializers) {=0A=
var tagElements =3D form.getElementsByTagName(tagName);=0A=
for (var j =3D 0; j < tagElements.length; j++)=0A=
elements.push(tagElements[j]);=0A=
}=0A=
return elements;=0A=
},=0A=
=0A=
getInputs: function(form, typeName, name) {=0A=
form =3D $(form);=0A=
var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
if (!typeName && !name)=0A=
return inputs;=0A=
=0A=
var matchingInputs =3D new Array();=0A=
for (var i =3D 0; i < inputs.length; i++) {=0A=
var input =3D inputs[i];=0A=
if ((typeName && input.type !=3D typeName) ||=0A=
(name && input.name !=3D name))=0A=
continue;=0A=
matchingInputs.push(input);=0A=
}=0A=
=0A=
return matchingInputs;=0A=
},=0A=
=0A=
disable: function(form) {=0A=
form =3D $(form);=0A=
var elements =3D Form.getElements(form);=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var element =3D elements[i];=0A=
element.blur();=0A=
element.disabled =3D 'true';=0A=
}=0A=
return form;=0A=
},=0A=
=0A=
enable: function(form) {=0A=
form =3D $(form);=0A=
var elements =3D Form.getElements(form);=0A=
for (var i =3D 0; i < elements.length; i++) {=0A=
var element =3D elements[i];=0A=
element.disabled =3D '';=0A=
}=0A=
return form;=0A=
},=0A=
=0A=
findFirstElement: function(form) {=0A=
return Form.getElements(form).find(function(element) {=0A=
return element.type !=3D 'hidden' && !element.disabled &&=0A=
['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
});=0A=
},=0A=
=0A=
focusFirstElement: function(form) {=0A=
form =3D $(form);=0A=
Field.activate(Form.findFirstElement(form));=0A=
return form;=0A=
}=0A=
}=0A=
=0A=
Object.extend(Form, Form.Methods);=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=
var method =3D element.tagName.toLowerCase();=0A=
var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
if (parameter) {=0A=
var key =3D encodeURIComponent(parameter[0]);=0A=
if (key.length =3D=3D 0) return;=0A=
=0A=
if (parameter[1].constructor !=3D Array)=0A=
parameter[1] =3D [parameter[1]];=0A=
=0A=
return parameter[1].map(function(value) {=0A=
return key + '=3D' + encodeURIComponent(value);=0A=
}).join('&');=0A=
}=0A=
},=0A=
=0A=
getValue: function(element) {=0A=
element =3D $(element);=0A=
var method =3D element.tagName.toLowerCase();=0A=
var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
if (parameter)=0A=
return parameter[1];=0A=
},=0A=
=0A=
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=
element.focus();=0A=
if (element.select)=0A=
element.select();=0A=
return element;=0A=
},=0A=
=0A=
disable: function(element) {=0A=
element =3D $(element);=0A=
element.disabled =3D '';=0A=
return element;=0A=
},=0A=
=0A=
enable: function(element) {=0A=
element =3D $(element);=0A=
element.blur();=0A=
element.disabled =3D 'true';=0A=
return element;=0A=
}=0A=
}=0A=
=0A=
Object.extend(Form.Element, Form.Element.Methods);=0A=
var Field =3D Form.Element;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
input: function(element) {=0A=
switch (element.type.toLowerCase()) {=0A=
case 'checkbox':=0A=
case 'radio':=0A=
return Form.Element.Serializers.inputSelector(element);=0A=
default:=0A=
return Form.Element.Serializers.textarea(element);=0A=
}=0A=
return false;=0A=
},=0A=
=0A=
inputSelector: function(element) {=0A=
if (element.checked)=0A=
return [element.name, element.value];=0A=
},=0A=
=0A=
textarea: function(element) {=0A=
return [element.name, element.value];=0A=
},=0A=
=0A=
select: function(element) {=0A=
return Form.Element.Serializers[element.type =3D=3D 'select-one' ?=0A=
'selectOne' : 'selectMany'](element);=0A=
},=0A=
=0A=
selectOne: function(element) {=0A=
var value =3D '', opt, index =3D element.selectedIndex;=0A=
if (index >=3D 0) {=0A=
opt =3D element.options[index];=0A=
value =3D opt.value || opt.text;=0A=
}=0A=
return [element.name, value];=0A=
},=0A=
=0A=
selectMany: function(element) {=0A=
var value =3D [];=0A=
for (var i =3D 0; i < element.length; i++) {=0A=
var opt =3D element.options[i];=0A=
if (opt.selected)=0A=
value.push(opt.value || opt.text);=0A=
}=0A=
return [element.name, value];=0A=
}=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var $F =3D Form.Element.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
initialize: function(element, frequency, callback) {=0A=
this.frequency =3D frequency;=0A=
this.element =3D $(element);=0A=
this.callback =3D callback;=0A=
=0A=
this.lastValue =3D this.getValue();=0A=
this.registerCallback();=0A=
},=0A=
=0A=
registerCallback: function() {=0A=
setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
},=0A=
=0A=
onTimerEvent: function() {=0A=
var value =3D this.getValue();=0A=
if (this.lastValue !=3D value) {=0A=
this.callback(this.element, value);=0A=
this.lastValue =3D value;=0A=
}=0A=
}=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
initialize: function(element, callback) {=0A=
this.element =3D $(element);=0A=
this.callback =3D callback;=0A=
=0A=
this.lastValue =3D this.getValue();=0A=
if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
this.registerFormCallbacks();=0A=
else=0A=
this.registerCallback(this.element);=0A=
},=0A=
=0A=
onElementEvent: function() {=0A=
var value =3D this.getValue();=0A=
if (this.lastValue !=3D value) {=0A=
this.callback(this.element, value);=0A=
this.lastValue =3D value;=0A=
}=0A=
},=0A=
=0A=
registerFormCallbacks: function() {=0A=
var elements =3D Form.getElements(this.element);=0A=
for (var i =3D 0; i < elements.length; i++)=0A=
this.registerCallback(elements[i]);=0A=
},=0A=
=0A=
registerCallback: function(element) {=0A=
if (element.type) {=0A=
switch (element.type.toLowerCase()) {=0A=
case 'checkbox':=0A=
case 'radio':=0A=
Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
break;=0A=
default:=0A=
Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
if (!window.Event) {=0A=
var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
KEY_BACKSPACE: 8,=0A=
KEY_TAB: 9,=0A=
KEY_RETURN: 13,=0A=
KEY_ESC: 27,=0A=
KEY_LEFT: 37,=0A=
KEY_UP: 38,=0A=
KEY_RIGHT: 39,=0A=
KEY_DOWN: 40,=0A=
KEY_DELETE: 46,=0A=
KEY_HOME: 36,=0A=
KEY_END: 35,=0A=
KEY_PAGEUP: 33,=0A=
KEY_PAGEDOWN: 34,=0A=
=0A=
element: function(event) {=0A=
return event.target || event.srcElement;=0A=
},=0A=
=0A=
isLeftClick: function(event) {=0A=
return (((event.which) && (event.which =3D=3D 1)) ||=0A=
((event.button) && (event.button =3D=3D 1)));=0A=
},=0A=
=0A=
pointerX: function(event) {=0A=
return event.pageX || (event.clientX +=0A=
(document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
},=0A=
=0A=
pointerY: function(event) {=0A=
return event.pageY || (event.clientY +=0A=
(document.documentElement.scrollTop || document.body.scrollTop));=0A=
},=0A=
=0A=
stop: function(event) {=0A=
if (event.preventDefault) {=0A=
event.preventDefault();=0A=
event.stopPropagation();=0A=
} else {=0A=
event.returnValue =3D false;=0A=
event.cancelBubble =3D true;=0A=
}=0A=
},=0A=
=0A=
// find the first node with the given tagName, starting from the=0A=
// node the event was triggered on; traverses the DOM upwards=0A=
findElement: function(event, tagName) {=0A=
var element =3D Event.element(event);=0A=
while (element.parentNode && (!element.tagName ||=0A=
(element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
element =3D element.parentNode;=0A=
return element;=0A=
},=0A=
=0A=
observers: false,=0A=
=0A=
_observeAndCache: function(element, name, observer, useCapture) {=0A=
if (!this.observers) this.observers =3D [];=0A=
if (element.addEventListener) {=0A=
this.observers.push([element, name, observer, useCapture]);=0A=
element.addEventListener(name, observer, useCapture);=0A=
} else if (element.attachEvent) {=0A=
this.observers.push([element, name, observer, useCapture]);=0A=
element.attachEvent('on' + name, observer);=0A=
}=0A=
},=0A=
=0A=
unloadCache: function() {=0A=
if (!Event.observers) return;=0A=
for (var i =3D 0; i < Event.observers.length; i++) {=0A=
Event.stopObserving.apply(this, Event.observers[i]);=0A=
Event.observers[i][0] =3D null;=0A=
}=0A=
Event.observers =3D false;=0A=
},=0A=
=0A=
observe: function(element, name, observer, useCapture) {=0A=
element =3D $(element);=0A=
useCapture =3D useCapture || false;=0A=
=0A=
if (name =3D=3D 'keypress' &&=0A=
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
|| element.attachEvent))=0A=
name =3D 'keydown';=0A=
=0A=
Event._observeAndCache(element, name, observer, useCapture);=0A=
},=0A=
=0A=
stopObserving: function(element, name, observer, useCapture) {=0A=
element =3D $(element);=0A=
useCapture =3D useCapture || false;=0A=
=0A=
if (name =3D=3D 'keypress' &&=0A=
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
|| element.detachEvent))=0A=
name =3D 'keydown';=0A=
=0A=
if (element.removeEventListener) {=0A=
element.removeEventListener(name, observer, useCapture);=0A=
} else if (element.detachEvent) {=0A=
try {=0A=
element.detachEvent('on' + name, observer);=0A=
} catch (e) {}=0A=
}=0A=
}=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
if (navigator.appVersion.match(/\bMSIE\b/))=0A=
Event.observe(window, 'unload', Event.unloadCache, false);=0A=
var Position =3D {=0A=
// set to true if needed, warning: firefox performance problems=0A=
// NOT neeeded for page scrolling, only if draggable contained in=0A=
// scrollable elements=0A=
includeScrollOffsets: false,=0A=
=0A=
// must be called before calling withinIncludingScrolloffset, every =
time the=0A=
// page is scrolled=0A=
prepare: function() {=0A=
this.deltaX =3D window.pageXOffset=0A=
|| document.documentElement.scrollLeft=0A=
|| document.body.scrollLeft=0A=
|| 0;=0A=
this.deltaY =3D window.pageYOffset=0A=
|| document.documentElement.scrollTop=0A=
|| document.body.scrollTop=0A=
|| 0;=0A=
},=0A=
=0A=
realOffset: function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.scrollTop || 0;=0A=
valueL +=3D element.scrollLeft || 0;=0A=
element =3D element.parentNode;=0A=
} while (element);=0A=
return [valueL, valueT];=0A=
},=0A=
=0A=
cumulativeOffset: function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.offsetTop || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
element =3D element.offsetParent;=0A=
} while (element);=0A=
return [valueL, valueT];=0A=
},=0A=
=0A=
positionedOffset: function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.offsetTop || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
element =3D element.offsetParent;=0A=
if (element) {=0A=
p =3D Element.getStyle(element, 'position');=0A=
if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A=
}=0A=
} while (element);=0A=
return [valueL, valueT];=0A=
},=0A=
=0A=
offsetParent: function(element) {=0A=
if (element.offsetParent) return element.offsetParent;=0A=
if (element =3D=3D document.body) return element;=0A=
=0A=
while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
if (Element.getStyle(element, 'position') !=3D 'static')=0A=
return element;=0A=
=0A=
return document.body;=0A=
},=0A=
=0A=
// caches x/y coordinate pair to use with overlap=0A=
within: function(element, x, y) {=0A=
if (this.includeScrollOffsets)=0A=
return this.withinIncludingScrolloffsets(element, x, y);=0A=
this.xcomp =3D x;=0A=
this.ycomp =3D y;=0A=
this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
return (y >=3D this.offset[1] &&=0A=
y < this.offset[1] + element.offsetHeight &&=0A=
x >=3D this.offset[0] &&=0A=
x < this.offset[0] + element.offsetWidth);=0A=
},=0A=
=0A=
withinIncludingScrolloffsets: function(element, x, y) {=0A=
var offsetcache =3D this.realOffset(element);=0A=
=0A=
this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
return (this.ycomp >=3D this.offset[1] &&=0A=
this.ycomp < this.offset[1] + element.offsetHeight &&=0A=
this.xcomp >=3D this.offset[0] &&=0A=
this.xcomp < this.offset[0] + element.offsetWidth);=0A=
},=0A=
=0A=
// within must be called directly before=0A=
overlap: function(mode, element) {=0A=
if (!mode) return 0;=0A=
if (mode =3D=3D 'vertical')=0A=
return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
element.offsetHeight;=0A=
if (mode =3D=3D 'horizontal')=0A=
return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
element.offsetWidth;=0A=
},=0A=
=0A=
page: function(forElement) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
=0A=
var element =3D forElement;=0A=
do {=0A=
valueT +=3D element.offsetTop || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
=0A=
// Safari fix=0A=
if (element.offsetParent=3D=3Ddocument.body)=0A=
if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A=
=0A=
} while (element =3D element.offsetParent);=0A=
=0A=
element =3D forElement;=0A=
do {=0A=
if (!window.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 [valueL, valueT];=0A=
},=0A=
=0A=
clone: function(source, target) {=0A=
var options =3D Object.extend({=0A=
setLeft: true,=0A=
setTop: true,=0A=
setWidth: true,=0A=
setHeight: true,=0A=
offsetTop: 0,=0A=
offsetLeft: 0=0A=
}, arguments[2] || {})=0A=
=0A=
// find page position of source=0A=
source =3D $(source);=0A=
var p =3D Position.page(source);=0A=
=0A=
// find coordinate system to use=0A=
target =3D $(target);=0A=
var delta =3D [0, 0];=0A=
var parent =3D null;=0A=
// delta [0,0] will do fine with position: fixed elements,=0A=
// position:absolute needs offsetParent deltas=0A=
if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A=
parent =3D Position.offsetParent(target);=0A=
delta =3D Position.page(parent);=0A=
}=0A=
=0A=
// correct by body offsets (fixes Safari)=0A=
if (parent =3D=3D document.body) {=0A=
delta[0] -=3D document.body.offsetLeft;=0A=
delta[1] -=3D document.body.offsetTop;=0A=
}=0A=
=0A=
// set position=0A=
if(options.setLeft) target.style.left =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
if(options.setTop) target.style.top =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
if(options.setWidth) target.style.width =3D source.offsetWidth + =
'px';=0A=
if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';=0A=
},=0A=
=0A=
absolutize: function(element) {=0A=
element =3D $(element);=0A=
if (element.style.position =3D=3D 'absolute') return;=0A=
Position.prepare();=0A=
=0A=
var offsets =3D Position.positionedOffset(element);=0A=
var top =3D offsets[1];=0A=
var left =3D offsets[0];=0A=
var width =3D element.clientWidth;=0A=
var height =3D element.clientHeight;=0A=
=0A=
element._originalLeft =3D left - parseFloat(element.style.left || =
0);=0A=
element._originalTop =3D top - parseFloat(element.style.top || =
0);=0A=
element._originalWidth =3D element.style.width;=0A=
element._originalHeight =3D element.style.height;=0A=
=0A=
element.style.position =3D 'absolute';=0A=
element.style.top =3D top + 'px';;=0A=
element.style.left =3D left + 'px';;=0A=
element.style.width =3D width + 'px';;=0A=
element.style.height =3D height + 'px';;=0A=
},=0A=
=0A=
relativize: function(element) {=0A=
element =3D $(element);=0A=
if (element.style.position =3D=3D 'relative') return;=0A=
Position.prepare();=0A=
=0A=
element.style.position =3D 'relative';=0A=
var top =3D parseFloat(element.style.top || 0) - =
(element._originalTop || 0);=0A=
var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
element.style.top =3D top + 'px';=0A=
element.style.left =3D left + 'px';=0A=
element.style.height =3D element._originalHeight;=0A=
element.style.width =3D element._originalWidth;=0A=
}=0A=
}=0A=
=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned. For performance reasons, redefine =
Position.cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A=
Position.cumulativeOffset =3D function(element) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
do {=0A=
valueT +=3D element.offsetTop || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
if (element.offsetParent =3D=3D document.body)=0A=
if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
element =3D element.offsetParent;=0A=
} while (element);=0A=
=0A=
return [valueL, valueT];=0A=
}=0A=
}=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://opac.rero.ch/scripts/scriptaculous.js
// script.aculo.us scriptaculous.js v1.6.4, Wed Sep 06 11:30:58 CEST 2006=0A=
=0A=
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
=0A=
var Scriptaculous =3D {=0A=
Version: '1.6.4',=0A=
require: function(libraryName) {=0A=
// inserting via DOM fails in Safari 2.0, so brute force approach=0A=
document.write('');=0A=
},=0A=
load: function() {=0A=
if((typeof Prototype=3D=3D'undefined') || =0A=
(typeof Element =3D=3D 'undefined') || =0A=
(typeof Element.Methods=3D=3D'undefined') ||=0A=
parseFloat(Prototype.Version.split(".")[0] + "." +=0A=
Prototype.Version.split(".")[1]) < 1.5)=0A=
throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D 1.5.0");=0A=
=0A=
$A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
}).each( function(s) {=0A=
var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
(includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider').split(',').each(=0A=
function(include) { Scriptaculous.require(path+include+'.js') });=0A=
});=0A=
}=0A=
}=0A=
=0A=
Scriptaculous.load();
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://opac.rero.ch/scripts/cookie.js
/*-----------------------------------------------------------------------=
-----\=0A=
| cookie.js =
|=0A=
|------------------------------------------------------------------------=
-----|=0A=
| Created by Bertrand Zuchuat =
|=0A=
|------------------------------------------------------------------------=
-----|=0A=
| Copyright (c) 2007 RERO, Martigny =
|=0A=
|------------------------------------------------------------------------=
-----|=0A=
| 2007-01-08 | First working version =
|=0A=
| 2007-04-10 | Add function getSessionId and loadCookie =
|=0A=
\------------------------------------------------------------------------=
----*/=0A=
=0A=
=0A=
function savePrefs(form, name)=0A=
{=0A=
var vcookie =3D '';=0A=
vcookie +=3D 'sessionid::session::' + getCookie('sessionid') + '-->';=0A=
=0A=
for (var i =3D 0; i < form.length; i++) {=0A=
if(form[i].type =3D=3D "select-one")=0A=
{=0A=
vcookie +=3D form[i].name + '::select::' + form[i].selectedIndex + =
'-->';=0A=
}=0A=
else if(form[i].type =3D=3D "select-multiple")=0A=
{=0A=
var ValueSelected =3D '';=0A=
=0A=
for (var a =3D 0; a < form[i].length; a++)=0A=
{=0A=
if (form[i][a].selected)=0A=
{=0A=
ValueSelected +=3D a + ',';=0A=
}=0A=
}=0A=
=0A=
if(ValueSelected.length > 0)=0A=
{=0A=
ValueSelected =3D ValueSelected.substring(0,ValueSelected.length-1);=0A=
=0A=
vcookie +=3D form[i].name + '::select-multiple::' + ValueSelected + =
'-->';=0A=
}=0A=
}=0A=
else if(form[i].type =3D=3D "text")=0A=
{=0A=
vcookie +=3D form[i].name + '::text::' + safeChars(form[i].value) + =
'-->';=0A=
}=0A=
else if(form[i].type =3D=3D "checkbox" && form[i].checked)=0A=
{=0A=
vcookie +=3D form[i].name + '::checkbox::' + '-->';=0A=
}=0A=
else if(form[i].type =3D=3D "radio" && form[i].checked)=0A=
{=0A=
vcookie +=3D form[i].name + '::radio::' + form[i].id + '-->';=0A=
}=0A=
}=0A=
=0A=
setCookie(name, vcookie, 0, "/");=0A=
}=0A=
=0A=
=0A=
function loadCookie(name)=0A=
{=0A=
var prefStr =3D getCookie(name);=0A=
var result =3D null;=0A=
=0A=
if (prefStr !=3D null)=0A=
{=0A=
result =3D prefStr.split('-->');=0A=
}=0A=
return result;=0A=
}=0A=
=0A=
=0A=
function getPrefs(form, name)=0A=
{=0A=
var prefArray =3D loadCookie(name);=0A=
=0A=
if(prefArray !=3D null)=0A=
{=0A=
for (var i =3D 0; i < prefArray.length; i++)=0A=
{=0A=
var currPref =3D prefArray[i].split('::');=0A=
=0A=
if(currPref[1] =3D=3D "select")=0A=
{=0A=
form[currPref[0]].selectedIndex =3D currPref[2];=0A=
}=0A=
else if (currPref[1] =3D=3D "select-multiple")=0A=
{=0A=
var currSelect =3D currPref[2].split(',');=0A=
=0A=
for (var a =3D 0; a < currSelect.length; a++)=0A=
{=0A=
form[currPref[0]][currSelect[a]].selected =3D true;=0A=
}=0A=
}=0A=
else if (currPref[1] =3D=3D "text")=0A=
{=0A=
form[currPref[0]].value =3D currPref[2];=0A=
}=0A=
else if (currPref[1] =3D=3D "checkbox")=0A=
{=0A=
form[currPref[0]].checked =3D currPref[2];=0A=
}=0A=
else if (currPref[1] =3D=3D "radio")=0A=
{=0A=
form[currPref[2]].checked =3D true;=0A=
}=0A=
}=0A=
return true;=0A=
}=0A=
else=0A=
{=0A=
return false;=0A=
}=0A=
}=0A=
=0A=
=0A=
function getSessionId(name)=0A=
{=0A=
var sessionid =3D '';=0A=
=0A=
var prefArray =3D loadCookie(name);=0A=
=0A=
if(prefArray !=3D null)=0A=
{=0A=
for (var i =3D 0; i < prefArray.length; i++)=0A=
{=0A=
var currPref =3D prefArray[i].split('::');=0A=
if (currPref[1] =3D=3D "session")=0A=
{=0A=
sessionid =3D currPref[2];=0A=
}=0A=
}=0A=
}=0A=
return sessionid;=0A=
}=0A=
=0A=
=0A=
function safeChars(str)=0A=
{=0A=
return str.replace('/::|=3D|-->/g', ':;');=0A=
}=0A=
=0A=
=0A=
=0A=
// ---------------------------- cookie functions =
---------------------------- //=0A=
=0A=
function getCookie( name ) {=0A=
var start =3D document.cookie.indexOf( name + "=3D" );=0A=
var len =3D start + name.length + 1;=0A=
if ( ( !start ) && ( name !=3D document.cookie.substring( 0, =
name.length ) ) ) {=0A=
return null;=0A=
}=0A=
if ( start =3D=3D -1 ) return null;=0A=
var end =3D document.cookie.indexOf( ";", len );=0A=
if ( end =3D=3D -1 ) end =3D document.cookie.length;=0A=
return unescape( document.cookie.substring( len, end ) );=0A=
}=0A=
=0A=
=0A=
function setCookie( name, value, expires, path, domain, secure )=0A=
{=0A=
var today =3D new Date()=0A=
today.setTime( today.getTime() )=0A=
if (expires)=0A=
expires =3D expires * 1000 * 60=0A=
else=0A=
expires =3D 0=0A=
=0A=
var expires_date =3D new Date( today.getTime() + (expires) )=0A=
var curCookie =3D name + "=3D" + escape( value ) +=0A=
((expires) ? ";expires=3D" + expires_date.toGMTString() : "" ) + =
//expires.toGMTString()=0A=
((path) ? ";path=3D" + path : "" ) +=0A=
((domain) ? ";domain=3D" + domain : "" ) +=0A=
((secure) ? ";secure" : "" )=0A=
document.cookie =3D curCookie=0A=
}=0A=
=0A=
=0A=
function deleteCookie( name, path, domain ) {=0A=
if ( getCookie( name ) ) document.cookie =3D name + "=3D" +=0A=
( ( path ) ? ";path=3D" + path : "") +=0A=
( ( domain ) ? ";domain=3D" + domain : "" ) +=0A=
";expires=3DThu, 01-Jan-1970 00:00:01 GMT";=0A=
}=0A=
=0A=
------=_NextPart_000_0013_01C95A6A.F09EEC30
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://opac.rero.ch/scripts/pngfix.js
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 =
or higher.=0A=
{=0A=
for(var i=3D0; i" =0A=
img.outerHTML =3D strNewHTML=0A=
i =3D i-1=0A=
}=0A=
}=0A=
}=0A=
window.attachEvent("onload", correctPNG);=0A=
=0A=
------=_NextPart_000_0013_01C95A6A.F09EEC30--