From: "Saved by Windows Internet Explorer 7"
Subject: Woman branded 'potentially violent' by council after complaining about damaged flowerbed | Mail Online
Date: Tue, 4 Aug 2009 19:17:53 -0400
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0000_01CA1538.43D84800"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6001.18049
This is a multi-part message in MIME format.
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/news/article-1195399/Woman-branded-potentially-violent-council-complaining-damaged-flowerbed.html?printingPage=true
Woman branded 'potentially violent' =
by council after complaining about damaged flowerbed | Mail =
OnlineClick here to print
Jane Clift: Libel victory after a four-year =
legal battle=20
Jane Clift saw it as her public duty to report a drunk she saw =
trampling=20
flowers in a park.
But her efforts led to a surreal nightmare in which she was branded=20
potentially violent and put on a council blacklist with thugs and sex =
attackers.=20
Her details were circulated to an extraordinary range of public and =
private=20
bodies, including doctors, dentists, opticians, libraries, contraceptive =
clinics, schools and nurseries. Their staff were advised not to see her =
alone.=20
The 43-year-old former care worker was forced to withdraw an =
application to=20
become a foster parent and, eventually, to leave the town where she had =
lived=20
for ten years.
Now, after a bitter four-year legal battle with Slough Council, the =
stain on=20
her character has finally been removed.
The High Court ordered the council to pay her £12,000 in =
libel=20
damages after a case which has cost taxpayers an estimated =
£500,000 in=20
legal fees.
Mrs Clift said last night: 'I hope this means others will never have =
to go=20
through the hell I have suffered.'
Her ordeal began in August 2005 when she called the police after the =
drunk=20
threat-All it takes is one council bufened her in Slough's Sheffield =
Road Rest=20
Gardens. The man had fled by the time police arrived, but they advised =
her to=20
contact the council, which was running a campaign to persuade local =
people to=20
report anti-social behaviour.
foon to take a dislike to you and he or she can put you on this =
register.=20
There was no right of appeal. The only way I could overturn it is was to =
embark=20
on this massive legal battle.'
Mrs Clift added: 'What is terrifying is that there is almost no proof =
required and no hearing to determine the truth of the allegation. It =
could=20
happen to anybody who gets into even the most minor disagreement with =
their=20
council.'
=20
Potentially violent: Jane Clift was blacklisted =
after=20
complaining when an abusive drunk damaged this flowerbed
She said she had no idea such a register even existed before her name =
was=20
added to it.
The entry expired after 18 months but by then she had been forced to =
leave=20
Slough.
Mrs Clift, who now lives in Birmingham, said: 'I am not and never have been =
violent =20
- as the jury have found.
'It has taken me four years to clear my name and I hope Slough and =
other=20
councils never again misuse their registers.' Simon Davies, from the human rights watchdog Privacy =
International,=20
said: 'This just shows the megalomania of these local authorities. This =
poor=20
woman was subjected to a Kafkaesque ordeal because of an incorrect =
allegation=20
made by one official.
'It is the sort of behaviour that we would have condemned if it came =
from China or Russia. Our councils seem to be out of control.'
During the eight-day hearing the court was told Mrs Clift had told =
another=20
council worker that, as far as she was concerned, Miss Rashid could =
'drop down=20
dead'.
She followed up with a letter in which she wrote: 'I felt so filled =
with=20
anger that I am certain I would have physically attacked her if she had =
been=20
anywhere near me. I truly am not of that nature and so, surely, this =
should act=20
as a wake-up call to the borough as to the capacity she has for =
offending=20
people.'
But her counsel, Hugh Tomlinson, said the letter was misinterpreted =
and the=20
decision to put her on the register had been 'completely ridiculous'. =
Her name was added to the blacklist because she was 'a thorn in their =
side'=20
and the council thought the move would mean no-one would take her =
seriously.=20
Mr Justice Tugendhat ordered Slough to pay the legal costs of the =
case,=20
estimated at between £450,000 to £500,000.
Mrs Clift brought the action under a 'no win no fee' arrangement with =
her=20
legal team.
A council spokesman said later: 'The jury found that what we recorded =
about=20
Mrs Clift was not true, but they were not prepared to find that we acted =
in bad=20
faith.
'We will reflect carefully on how we need to respond.'
I'm surprised to see how many people on here =
seem to think=20
it is OK for members of the public to issue death threats against =
council=20
employees. With attitudes like that is easy to see why so many =
doctors,=20
nurses and socilal workers are physically and verbally abused each =
year.
Why don't the council actually spend money on =
actually=20
tackling anti social behaviour rather than persecuting an innocent woman =
trying=20
to make the world a better place for all decent people (remember us?). =
No doubt=20
the poor council staff needed time off for counselling after dealing =
with such a=20
"difficult customer". Heaven help them if they had actually had to deal =
with the=20
yob who was causing the problem in the first place! I am glad that I =
don't live=20
in Slugh as I would object to my council tax being used to fund this =
ridiculous=20
case. This could have been resolved by someone senior taking =
responsibility for=20
actually speaking to the lady and assuring her that they do take the =
issue of=20
anti social behaviour seriously. Even if they had no chance of catching =
the=20
perpetrator then at least she would have been reassured by the fact that =
the=20
council do take complaints seriously.
"); =20
}
return flashId;
}
function escapeValue(str) {
return encodeURIComponent(str);
}
function getDomain() {
var domain =3D window.location.href;
if (domain.substring(0, 7) =3D=3D "http://") {
domain =3D domain.substring(7, domain.length);
}
var i =3D domain.indexOf("/");
if (i !=3D -1) {
domain =3D domain.substring(0, i);
}
i =3D domain.indexOf(":");
if (i !=3D -1) {
domain =3D domain.substring(0, i);
}
return domain;
}
var ID_DELIM =3D "|||";
function onFSCommand(command, args) {
if (command =3D=3D "eval"){
eval(args);
return;
}
if (this[command] =3D=3D null) return;
var obj =3D convertToObject(unescape(args));
if (obj !=3D null) {
var callback =3D obj.callback;
var flashId =3D obj.flashId;
if (obj.flashId !=3D null && callback !=3D null) {
callback =3D obj.flashId + ID_DELIM + callback;
}
if (obj.args =3D=3D null) {
eval(command + "(callback);");
} else {
eval(command + "(obj.args, callback);");
}
} else {
eval(command + "();");
}
}
var flashCallback;
var flashCallbacks =3D [];
function setAPICallback(id, callback) {
flashCallback =3D callback;
flashCallbacks[id] =3D callback;
}
function callFlash() {
var method =3D arguments[0];
var params =3D [];
for (var i =3D 1; i < arguments.length; i++) {
params.push(arguments[i]);
}
callbackFlash(flashCallback, {method:method, params:params});
}
function callFlashInstance() {
var flashId =3D arguments[0];
var method =3D arguments[1];
var params =3D [];
for (var i =3D 2; i < arguments.length; i++) {
params.push(arguments[i]);
}
var callback =3D flashCallbacks[flashId];
callbackFlash(callback, {method:method, params:params});
}
function callbackFlash(callback, returnValue) {
var flashId =3D "flashObj";
var arry =3D callback.split(ID_DELIM);
=20
if (arry.length > 1) {
if (arry[0].length > 0) {
flashId =3D arry[0];
}
callback =3D arry[1];
}
var fo =3D document[flashId];
if (fo =3D=3D null) fo =3D document.embeds[flashId];
if (fo =3D=3D null) fo =3D document.getElementById(flashId);
if (fo[callback] !=3D null) {
return fo[callback](convertToXML(returnValue, "js2flash"));
} else {
try {
fo.SetVariable(callback, convertToXML(returnValue, "js2flash"));
} catch (e) {}
}
}
function convertToXML(obj, rootName) {
if (obj instanceof Function) return "";
var type =3D getType(obj);
var xml =3D "<"+type.name+rootName+">";
=20
if(type.sub) {
for (var i in obj) {
xml +=3D convertToXML(obj[i], i);
}
}
else if (type.name =3D=3D "str") {
obj =3D replaceEntities(obj);
xml +=3D obj;
}=20
else {
xml +=3D obj;
}
xml +=3D ""+type.name+rootName+">";
return xml;
}
function replaceEntities(obj) {
obj =3D obj.replace("&", "&");
obj =3D obj.replace("<", "<");
obj =3D obj.replace(">", ">");=09
return obj;
}
var s_xml_types =3D new Array();=09
s_xml_types.push({name:"str",type:String,sub:false});
s_xml_types.push({name:"boo",type:Boolean,sub:false});
s_xml_types.push({name:"num", type:Number,sub:false});
//s_xml_types.push({name:"date", type:Date,sub:false});
s_xml_types.push({name:"arr", type:Array,sub:true});
s_xml_types.push({name:"cda", type:CData, sub:false});
s_xml_types.push({name:"obj", type:Object,sub:true});
function getType(obj) {
switch (typeof(obj)) {
case "boolean":
return {name:"boo",type:Boolean,sub:false};
case "string":
return {name:"str",type:String,sub:false};
case "number":
return {name:"num",type:Number,sub:false};
}
for (var i =3D 0; i < s_xml_types.length; i++) {
if (obj instanceof s_xml_types[i].type) {
return s_xml_types[i];
}
}
return {name:"obj", type:Object,sub:true};
}
function getTypeClass(name) {
if (name =3D=3D null) return null;
name =3D name.toLowerCase();
for (var i =3D 0; i < s_xml_types.length; i++) {
if (name =3D=3D s_xml_types[i].name) {
return s_xml_types[i].type;
}
}
return null;
}
function convertToObject(node) {
// try {
if (node =3D=3D null) {
return;
}
=20
if (node.substring !=3D null) {
node =3D parseXML(node);
}
=20
if (node =3D=3D null || node.childNodes =3D=3D null || =
node.childNodes.length =3D=3D 0) {
return null;
}
var type =3D getTypeClass(node.nodeName.substring(0,3));
if (type =3D=3D null) {
type =3D Object;
}
if (node.firstChild.nodeType =3D=3D 3 || node.firstChild.nodeType =
=3D=3D 4) {
return getObjectForNode(type, node);
} else {
=09
var obj =3D new type();
var children =3D node.childNodes;
for (var i =3D 0; i < children.length; i++) {
var name =3D children[i].nodeName;
name =3D name.substring(3, name.length);
obj[name] =3D convertToObject(children[i]);
}
return obj;
}
// } catch (e) {
// alert("Error creating object:" + e.message);
// return null;
// }
}
function getObjectForNode(type, node) {
if (type =3D=3D Boolean) {
if (node.firstChild.nodeValue =3D=3D "true") {
return new Boolean(1);
}
else {
return new Boolean(0);
}
}
else {
return new type(node.firstChild.nodeValue);
}
}
function parseXML(str) {
if (window.ActiveXObject) {
var xmldoc =3D new ActiveXObject("Microsoft.XMLDOM");
try {
xmldoc.setProperty("SelectionLanguage", "XPath");
} catch (e) {} // i.e. 5 doesn't like setting the selection language
xmldoc.async =3D false;
xmldoc.loadXML(str);
return xmldoc.documentElement; =20
} else if (DOMParser) {
var parser =3D new DOMParser();
var doc =3D parser.parseFromString(str, "text/xml");
=20
return doc.firstChild;
=20
} else {
return makeXMLNode(str);
}
}
function makeXMLNode(str) {
var node =3D {};
var nodeName =3D node.nodeName =3D getNodeName(str);
node.nodeType =3D 1;
node.childNodes =3D [];
node.firstChild =3D null;
var startTagEndIndex =3D nodeName.length + 2;
var endTagIndex =3D str.lastIndexOf("" + nodeName);
var nodeData =3D str.substring(startTagEndIndex, endTagIndex);
if (nodeData.substring(0, 9) =3D=3D " -1) {
node.childNodes =3D getChildNodes(nodeData);
} else if (nodeData.length =3D=3D 0) {
//do nothing, we want 0 children here
} else {
var child =3D {};
child.nodeName =3D null;
child.nodeType =3D 3;
child.nodeValue =3D getNodeValue(nodeName, nodeData);
node.childNodes =3D [child];
}
if (node.childNodes.length > 0) {
node.firstChild =3D node.childNodes[0];
}
return node;
}
function getNodeName(str) {
return str.substring(str.indexOf("<")+1, str.indexOf(">"));
}
function getChildNodes(nodeData) {
var childNodes =3D [];
var nodeName;
var nextIndex;
var endIndex;
var dataLength;
var nameLength;
var startNodesArray;
var endNodesArray;
var startNodesLength;
var endNodesLength;
var endNodes;
var startNodes;
var endNode;
var i;
var j;
while (nodeData.length > 0) {
nodeName =3D getNodeName(nodeData);
nameLength =3D nodeName.length;
nextIndex =3D nodeData.indexOf("<"+nodeName, nameLength);
endIndex =3D nodeData.indexOf(""+nodeName, nameLength);
if (endIndex < 0) return childNodes;
if (nextIndex < 0 || endIndex < nextIndex) {
dataLength =3D endIndex+nodeName.length+3;
childData =3D nodeData.substr(0, dataLength);
nodeData =3D nodeData.substr(dataLength);
childNodes.push(makeXMLNode(childData));
} else {
endNodes =3D 0;
startNodes =3D 0;
startNodesArray =3D nodeData.split("<" + nodeName + ">");
startNodesLength =3D startNodesArray.length;
endNode =3D "" + nodeName + ">";
for (i =3D 0; i < startNodesLength; i++) {
startNodes++;
startNodesStr =3D startNodesArray[i];
if (startNodesStr.indexOf(endNode) > -1) {
endNodesArray =3D startNodesStr.split("" + nodeName + ">");
endNodesLength =3D endNodesArray.length;
for (j =3D 0; j < endNodesLength; j++) {
if (++endNodes =3D=3D startNodes) {
childData =3D startNodesArray.slice(0, =
startNodes).join("");
dataLength =3D childData.length;
nodeData =3D nodeData.substr(dataLength);
childNodes.push(makeXMLNode(childData));
return childNodes;
}
}
}
}
childNodes.push(makeXMLNode(nodeData));
nodeData =3D "";
}
}
return childNodes;
}
function getCDATA(nodeName, nodeData) {
var endCDATA =3D nodeData.indexOf("]]>", 9);
if (endCDATA < 0) {
return null;
} else {
return getNodeValue(nodeName, nodeData.substring(9, endCDATA));
}
}
function getNodeValue(nodeName, nodeValue) {
switch (nodeName.substr(0, 3)) {
case "boo":
return (nodeValue=3D=3D"true");
case "num":
return Number(nodeValue);
case "str":
return String(nodeValue);
default:
return nodeValue;
}
}
function CData(str) {
this.data =3D str;
}
CData.prototype.toString =3D function() {
return "";
}
/*
var chunks =3D {}
function chunkCall(id, total, index, chunk) {
if (chunks[id] =3D=3D undefined) chunks[id] =3D [];
chunks[id][index] =3D chunk;
if (index =3D=3D total) {
eval(chunks[id].join(""));
delete chunks[id];
}
}
*/
//Flash Detection
var bcisIE =3D (navigator.appVersion.indexOf("MSIE") !=3D -1 && =
/opera/i.test(navigator.userAgent) =3D=3D false) ? true : false;
var bcisWin =3D (navigator.appVersion.toLowerCase().indexOf("win") !=3D =
-1) ? true : false;
var bcisOpera =3D (navigator.userAgent.indexOf("Opera") !=3D -1) ? true =
: false;
// JavaScript helper required to detect Flash Player PlugIn version =
information
function JSGetSwfVer(i){
if (navigator.plugins !=3D null && navigator.plugins.length > 0) {
if (navigator.plugins["Shockwave Flash 2.0"] || =
navigator.plugins["Shockwave Flash"]) {
var swVer2 =3D navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : =
"";
var flashDescription =3D navigator.plugins["Shockwave Flash" + =
swVer2].description;
descArray =3D flashDescription.split(" ");
tempArrayMajor =3D descArray[2].split(".");
versionMajor =3D tempArrayMajor[0];
versionMinor =3D tempArrayMajor[1];
if ( descArray[3] !=3D "" ) {
tempArrayMinor =3D descArray[3].split("r");
} else {
tempArrayMinor =3D descArray[4].split("r");
}
versionRevision =3D tempArrayMinor[1] > 0 ? tempArrayMinor[1] : =
0;
flashVer =3D versionMajor + "." + versionMinor + "." + =
versionRevision;
} else {
flashVer =3D -1;
}
}
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") !=3D =
-1) flashVer =3D 4;
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") !=3D =
-1) flashVer =3D 3;
else if (navigator.userAgent.toLowerCase().indexOf("webtv") !=3D -1) =
flashVer =3D 2;
else { =09
flashVer =3D -1;
}
return flashVer;
}=20
// If called with no parameters this function returns a floating point =
value=20
// which should be the version of the Flash Player or 0.0=20
// ex: Flash Player 7r14 returns 7.14
// If called with reqMajorVer, reqMinorVer, reqRevision returns true if =
that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)=20
{
reqVer =3D parseFloat(reqMajorVer + "." + reqRevision);
for (i=3D25;i>0;i--) {=09
if (bcisIE && bcisWin && !bcisOpera) {
versionStr =3D VBGetSwfVer(i);
} else {
versionStr =3D JSGetSwfVer(i); =09
}
if (versionStr =3D=3D -1 ) {=20
return false;
} else if (versionStr !=3D 0) {
if(bcisIE && bcisWin && !bcisOpera) {
tempArray =3D versionStr.split(" ");
tempString =3D tempArray[1];
versionArray =3D tempString .split(","); =09
} else {
versionArray =3D versionStr.split(".");
}
versionMajor =3D versionArray[0];
versionMinor =3D versionArray[1];
versionRevision =3D versionArray[2];
=09
versionString =3D versionMajor + "." + versionRevision; // =
7.0r24 =3D=3D 7.24
versionNum =3D parseFloat(versionString);
if ( versionMajor > reqMajorVer ) {
return true;
} else {
return ((versionMajor =3D=3D reqMajorVer && versionMinor >=3D =
reqMinorVer) ? true : false );=09
}
}
}=09
return (reqVer ? false : 0.0);
}
// Visual basic helper required to detect Flash Player ActiveX control =
version information
if (navigator.appName && navigator.appName.indexOf("Microsoft") !=3D -1 =
&& navigator.userAgent.indexOf("Windows") !=3D -1 && =
navigator.userAgent.indexOf("Windows 3.1") =3D=3D -1) {
document.write('\n');
}
// Hook for Internet Explorer.
if (navigator.appName && navigator.appName.indexOf("Microsoft") !=3D -1 =
&& navigator.userAgent.indexOf("Windows") !=3D -1 && =
navigator.userAgent.indexOf("Windows 3.1") =3D=3D -1) {
document.write('\n');
}
// Functions to parse query string parameters
// version: 1.0
// written by Kevin Langdon
// #############################################
// function returns the query string part of url
// everything followed by the '?'
function getQueryString() {
var urlStr =3D document.location.href;
var i =3D urlStr.indexOf("?");
if (i !=3D -1) {
return urlStr.substring(i, urlStr.length - 1);
}
return null;
}
// #############################################
// function parses the query string and returns each
// parameter and value seperated by '&'
function getParameter(name, defaultValue) {
if (defaultValue =3D=3D null) {
defaultValue =3D "";
}
var url =3D document.location.href;
var i =3D url.indexOf(name + "=3D");
if (i !=3D -1) {
var valuestart =3D i+name.length+1;
var valueend =3D url.length;
i =3D url.indexOf("&", valuestart)
if (i !=3D -1) {
valueend =3D i;
}
return unescape(url.substring(valuestart, valueend));
}
return defaultValue;
}
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/dwr/interface/AjaxReaderComments.js
=0A=
// Provide a default path to dwr.engine=0A=
if (dwr =3D=3D null) var dwr =3D {};=0A=
if (dwr.engine =3D=3D null) dwr.engine =3D {};=0A=
if (DWREngine =3D=3D null) var DWREngine =3D dwr.engine;=0A=
=0A=
if (AjaxReaderComments =3D=3D null) var AjaxReaderComments =3D {};=0A=
AjaxReaderComments._path =3D '/dwr';=0A=
AjaxReaderComments.paginateReaderComments =3D function(p0, p1, p2, p3, =
callback) {=0A=
dwr.engine._execute(AjaxReaderComments._path, 'AjaxReaderComments', =
'paginateReaderComments', p0, p1, p2, p3, callback);=0A=
}=0A=
AjaxReaderComments.getReaderCommentsCountForArticles =3D function(p0, =
callback) {=0A=
dwr.engine._execute(AjaxReaderComments._path, 'AjaxReaderComments', =
'getReaderCommentsCountForArticles', p0, callback);=0A=
}=0A=
AjaxReaderComments.getSomeReaderComments =3D function(p0, p1, p2, =
callback) {=0A=
dwr.engine._execute(AjaxReaderComments._path, 'AjaxReaderComments', =
'getSomeReaderComments', p0, p1, p2, callback);=0A=
}=0A=
AjaxReaderComments.incrementReaderCommentVoteCount =3D function(p0, =
callback) {=0A=
dwr.engine._execute(AjaxReaderComments._path, 'AjaxReaderComments', =
'incrementReaderCommentVoteCount', p0, callback);=0A=
}=0A=
AjaxReaderComments.decrementReaderCommentVoteCount =3D function(p0, =
callback) {=0A=
dwr.engine._execute(AjaxReaderComments._path, 'AjaxReaderComments', =
'decrementReaderCommentVoteCount', p0, callback);=0A=
}=0A=
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/dwr/interface/AjaxPoll.js
=0A=
// Provide a default path to dwr.engine=0A=
if (dwr =3D=3D null) var dwr =3D {};=0A=
if (dwr.engine =3D=3D null) dwr.engine =3D {};=0A=
if (DWREngine =3D=3D null) var DWREngine =3D dwr.engine;=0A=
=0A=
if (AjaxPoll =3D=3D null) var AjaxPoll =3D {};=0A=
AjaxPoll._path =3D '/dwr';=0A=
AjaxPoll.vote =3D function(p0, p1, p2, callback) {=0A=
dwr.engine._execute(AjaxPoll._path, 'AjaxPoll', 'vote', p0, p1, p2, =
callback);=0A=
}=0A=
AjaxPoll.getYesterdaysPoll =3D function(p0, p1, callback) {=0A=
dwr.engine._execute(AjaxPoll._path, 'AjaxPoll', 'getYesterdaysPoll', =
p0, p1, callback);=0A=
}=0A=
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/dwr/interface/MyStoriesHelper.js
=0A=
// Provide a default path to dwr.engine=0A=
if (dwr =3D=3D null) var dwr =3D {};=0A=
if (dwr.engine =3D=3D null) dwr.engine =3D {};=0A=
if (DWREngine =3D=3D null) var DWREngine =3D dwr.engine;=0A=
=0A=
if (MyStoriesHelper =3D=3D null) var MyStoriesHelper =3D {};=0A=
MyStoriesHelper._path =3D '/dwr';=0A=
MyStoriesHelper.addStory =3D function(p0, p1, callback) {=0A=
dwr.engine._execute(MyStoriesHelper._path, 'MyStoriesHelper', =
'addStory', p0, p1, callback);=0A=
}=0A=
MyStoriesHelper.removeStories =3D function(p0, callback) {=0A=
dwr.engine._execute(MyStoriesHelper._path, 'MyStoriesHelper', =
'removeStories', p0, callback);=0A=
}=0A=
MyStoriesHelper.getMyStories =3D function(callback) {=0A=
dwr.engine._execute(MyStoriesHelper._path, 'MyStoriesHelper', =
'getMyStories', callback);=0A=
}=0A=
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/dwr/interface/AjaxFeedsFacade.js
=0A=
// Provide a default path to dwr.engine=0A=
if (dwr =3D=3D null) var dwr =3D {};=0A=
if (dwr.engine =3D=3D null) dwr.engine =3D {};=0A=
if (DWREngine =3D=3D null) var DWREngine =3D dwr.engine;=0A=
=0A=
if (AjaxFeedsFacade =3D=3D null) var AjaxFeedsFacade =3D {};=0A=
AjaxFeedsFacade._path =3D '/dwr';=0A=
AjaxFeedsFacade.getTable =3D function(p0, callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getTable', p0, callback);=0A=
}=0A=
AjaxFeedsFacade.getCompetitionsList =3D function(callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getCompetitionsList', callback);=0A=
}=0A=
AjaxFeedsFacade.getPagination =3D function(p0, callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getPagination', p0, callback);=0A=
}=0A=
AjaxFeedsFacade.getFixtures =3D function(p0, callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getFixtures', p0, callback);=0A=
}=0A=
AjaxFeedsFacade.getResults =3D function(p0, callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getResults', p0, callback);=0A=
}=0A=
AjaxFeedsFacade.getTeamsList =3D function(p0, callback) {=0A=
dwr.engine._execute(AjaxFeedsFacade._path, 'AjaxFeedsFacade', =
'getTeamsList', p0, callback);=0A=
}=0A=
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dailymail.co.uk/dwr/engine.js
/*=0A=
* Copyright 2005 Joe Walker=0A=
*=0A=
* Licensed under the Apache License, Version 2.0 (the "License");=0A=
* you may not use this file except in compliance with the License.=0A=
* You may obtain a copy of the License at=0A=
*=0A=
* http://www.apache.org/licenses/LICENSE-2.0=0A=
*=0A=
* Unless required by applicable law or agreed to in writing, software=0A=
* distributed under the License is distributed on an "AS IS" BASIS,=0A=
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or =
implied.=0A=
* See the License for the specific language governing permissions and=0A=
* limitations under the License.=0A=
*/=0A=
=0A=
/**=0A=
* Declare an object to which we can add real functions.=0A=
*/=0A=
if (dwr =3D=3D null) var dwr =3D {};=0A=
if (dwr.engine =3D=3D null) dwr.engine =3D {};=0A=
if (DWREngine =3D=3D null) var DWREngine =3D dwr.engine;=0A=
=0A=
/**=0A=
* Set an alternative error handler from the default alert box.=0A=
* @see getahead.org/dwr/browser/engine/errors=0A=
*/=0A=
dwr.engine.setErrorHandler =3D function(handler) {=0A=
dwr.engine._errorHandler =3D handler;=0A=
};=0A=
=0A=
/**=0A=
* Set an alternative warning handler from the default alert box.=0A=
* @see getahead.org/dwr/browser/engine/errors=0A=
*/=0A=
dwr.engine.setWarningHandler =3D function(handler) {=0A=
dwr.engine._warningHandler =3D handler;=0A=
};=0A=
=0A=
/**=0A=
* Setter for the text/html handler - what happens if a DWR request gets =
an HTML=0A=
* reply rather than the expected Javascript. Often due to login timeout=0A=
*/=0A=
dwr.engine.setTextHtmlHandler =3D function(handler) {=0A=
dwr.engine._textHtmlHandler =3D handler;=0A=
};=0A=
=0A=
/**=0A=
* Set a default timeout value for all calls. 0 (the default) turns =
timeouts off.=0A=
* @see getahead.org/dwr/browser/engine/errors=0A=
*/=0A=
dwr.engine.setTimeout =3D function(timeout) {=0A=
dwr.engine._timeout =3D timeout;=0A=
};=0A=
=0A=
/**=0A=
* The Pre-Hook is called before any DWR remoting is done.=0A=
* @see getahead.org/dwr/browser/engine/hooks=0A=
*/=0A=
dwr.engine.setPreHook =3D function(handler) {=0A=
dwr.engine._preHook =3D handler;=0A=
};=0A=
=0A=
/**=0A=
* The Post-Hook is called after any DWR remoting is done.=0A=
* @see getahead.org/dwr/browser/engine/hooks=0A=
*/=0A=
dwr.engine.setPostHook =3D function(handler) {=0A=
dwr.engine._postHook =3D handler;=0A=
};=0A=
=0A=
/**=0A=
* Custom headers for all DWR calls=0A=
* @see getahead.org/dwr/????=0A=
*/=0A=
dwr.engine.setHeaders =3D function(headers) {=0A=
dwr.engine._headers =3D headers;=0A=
};=0A=
=0A=
/**=0A=
* Custom parameters for all DWR calls=0A=
* @see getahead.org/dwr/????=0A=
*/=0A=
dwr.engine.setParameters =3D function(parameters) {=0A=
dwr.engine._parameters =3D parameters;=0A=
};=0A=
=0A=
/** XHR remoting type constant. See dwr.engine.set[Rpc|Poll]Type() */=0A=
dwr.engine.XMLHttpRequest =3D 1;=0A=
=0A=
/** XHR remoting type constant. See dwr.engine.set[Rpc|Poll]Type() */=0A=
dwr.engine.IFrame =3D 2;=0A=
=0A=
/** XHR remoting type constant. See dwr.engine.setRpcType() */=0A=
dwr.engine.ScriptTag =3D 3;=0A=
=0A=
/**=0A=
* Set the preferred remoting type.=0A=
* @param newType One of dwr.engine.XMLHttpRequest or dwr.engine.IFrame =
or dwr.engine.ScriptTag=0A=
* @see getahead.org/dwr/browser/engine/options=0A=
*/=0A=
dwr.engine.setRpcType =3D function(newType) {=0A=
if (newType !=3D dwr.engine.XMLHttpRequest && newType !=3D =
dwr.engine.IFrame && newType !=3D dwr.engine.ScriptTag) {=0A=
dwr.engine._handleError(null, { name:"dwr.engine.invalidRpcType", =
message:"RpcType must be one of dwr.engine.XMLHttpRequest or =
dwr.engine.IFrame or dwr.engine.ScriptTag" });=0A=
return;=0A=
}=0A=
dwr.engine._rpcType =3D newType;=0A=
};=0A=
=0A=
/**=0A=
* Which HTTP method do we use to send results? Must be one of "GET" or =
"POST".=0A=
* @see getahead.org/dwr/browser/engine/options=0A=
*/=0A=
dwr.engine.setHttpMethod =3D function(httpMethod) {=0A=
if (httpMethod !=3D "GET" && httpMethod !=3D "POST") {=0A=
dwr.engine._handleError(null, { name:"dwr.engine.invalidHttpMethod", =
message:"Remoting method must be one of GET or POST" });=0A=
return;=0A=
}=0A=
dwr.engine._httpMethod =3D httpMethod;=0A=
};=0A=
=0A=
/**=0A=
* Ensure that remote calls happen in the order in which they were sent? =
(Default: false)=0A=
* @see getahead.org/dwr/browser/engine/ordering=0A=
*/=0A=
dwr.engine.setOrdered =3D function(ordered) {=0A=
dwr.engine._ordered =3D ordered;=0A=
};=0A=
=0A=
/**=0A=
* Do we ask the XHR object to be asynchronous? (Default: true)=0A=
* @see getahead.org/dwr/browser/engine/options=0A=
*/=0A=
dwr.engine.setAsync =3D function(async) {=0A=
dwr.engine._async =3D async;=0A=
};=0A=
=0A=
/**=0A=
* Does DWR poll the server for updates? (Default: false)=0A=
* @see getahead.org/dwr/browser/engine/options=0A=
*/=0A=
dwr.engine.setActiveReverseAjax =3D function(activeReverseAjax) {=0A=
if (activeReverseAjax) {=0A=
// Bail if we are already started=0A=
if (dwr.engine._activeReverseAjax) return;=0A=
dwr.engine._activeReverseAjax =3D true;=0A=
dwr.engine._poll();=0A=
}=0A=
else {=0A=
// Can we cancel an existing request?=0A=
if (dwr.engine._activeReverseAjax && dwr.engine._pollReq) =
dwr.engine._pollReq.abort();=0A=
dwr.engine._activeReverseAjax =3D false;=0A=
}=0A=
// TODO: in iframe mode, if we start, stop, start then the second =
start may=0A=
// well kick off a second iframe while the first is still about to =
return=0A=
// we should cope with this but we don't=0A=
};=0A=
=0A=
/**=0A=
* The default message handler.=0A=
* @see getahead.org/dwr/browser/engine/errors=0A=
*/=0A=
dwr.engine.defaultErrorHandler =3D function(message, ex) {=0A=
dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);=0A=
if (message =3D=3D null || message =3D=3D "") alert("A server error =
has occured.");=0A=
// Ignore NS_ERROR_NOT_AVAILABLE if Mozilla is being narky=0A=
else if (message.indexOf("0x80040111") !=3D -1) =
dwr.engine._debug(message);=0A=
else alert(message);=0A=
};=0A=
=0A=
/**=0A=
* The default warning handler.=0A=
* @see getahead.org/dwr/browser/engine/errors=0A=
*/=0A=
dwr.engine.defaultWarningHandler =3D function(message, ex) {=0A=
dwr.engine._debug(message);=0A=
};=0A=
=0A=
/**=0A=
* For reduced latency you can group several remote calls together using =
a batch.=0A=
* @see getahead.org/dwr/browser/engine/batch=0A=
*/=0A=
dwr.engine.beginBatch =3D function() {=0A=
if (dwr.engine._batch) {=0A=
dwr.engine._handleError(null, { name:"dwr.engine.batchBegun", =
message:"Batch already begun" });=0A=
return;=0A=
}=0A=
dwr.engine._batch =3D dwr.engine._createBatch();=0A=
};=0A=
=0A=
/**=0A=
* Finished grouping a set of remote calls together. Go and execute them =
all.=0A=
* @see getahead.org/dwr/browser/engine/batch=0A=
*/=0A=
dwr.engine.endBatch =3D function(options) {=0A=
var batch =3D dwr.engine._batch;=0A=
if (batch =3D=3D null) {=0A=
dwr.engine._handleError(null, { name:"dwr.engine.batchNotBegun", =
message:"No batch in progress" });=0A=
return;=0A=
}=0A=
dwr.engine._batch =3D null;=0A=
if (batch.map.callCount =3D=3D 0) return;=0A=
=0A=
// The hooks need to be merged carefully to preserve ordering=0A=
if (options) dwr.engine._mergeBatch(batch, options);=0A=
=0A=
// In ordered mode, we don't send unless the list of sent items is =
empty=0A=
if (dwr.engine._ordered && dwr.engine._batchesLength !=3D 0) {=0A=
dwr.engine._batchQueue[dwr.engine._batchQueue.length] =3D batch;=0A=
}=0A=
else {=0A=
dwr.engine._sendData(batch);=0A=
}=0A=
};=0A=
=0A=
/** @deprecated */=0A=
dwr.engine.setPollMethod =3D function(type) { =
dwr.engine.setPollType(type); };=0A=
dwr.engine.setMethod =3D function(type) { dwr.engine.setRpcType(type); };=0A=
dwr.engine.setVerb =3D function(verb) { dwr.engine.setHttpMethod(verb); =
};=0A=
dwr.engine.setPollType =3D function() { dwr.engine._debug("Manually =
setting the Poll Type is not supported"); };=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=0A=
// Only private stuff below here=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=0A=
=0A=
/** The original page id sent from the server */=0A=
dwr.engine._origScriptSessionId =3D "B6D5983D8F0F17AF5A84C50C43BB2BF0";=0A=
=0A=
/** The session cookie name */=0A=
dwr.engine._sessionCookieName =3D "JSESSIONID"; // JSESSIONID=0A=
=0A=
/** Is GET enabled for the benefit of Safari? */=0A=
dwr.engine._allowGetForSafariButMakeForgeryEasier =3D "false";=0A=
=0A=
/** The script prefix to strip in the case of scriptTagProtection. */=0A=
dwr.engine._scriptTagProtection =3D "throw 'allowScriptTagRemoting is =
false.';";=0A=
=0A=
/** The default path to the DWR servlet */=0A=
dwr.engine._defaultPath =3D "/dwr";=0A=
=0A=
/** Do we use XHR for reverse ajax because we are not streaming? */=0A=
dwr.engine._pollWithXhr =3D "false";=0A=
=0A=
/** The read page id that we calculate */=0A=
dwr.engine._scriptSessionId =3D null;=0A=
=0A=
/** The function that we use to fetch/calculate a session id */=0A=
dwr.engine._getScriptSessionId =3D function() {=0A=
if (dwr.engine._scriptSessionId =3D=3D null) {=0A=
dwr.engine._scriptSessionId =3D dwr.engine._origScriptSessionId + =
Math.floor(Math.random() * 1000);=0A=
}=0A=
return dwr.engine._scriptSessionId;=0A=
};=0A=
=0A=
/** A function to call if something fails. */=0A=
dwr.engine._errorHandler =3D dwr.engine.defaultErrorHandler;=0A=
=0A=
/** For debugging when something unexplained happens. */=0A=
dwr.engine._warningHandler =3D dwr.engine.defaultWarningHandler;=0A=
=0A=
/** A function to be called before requests are marshalled. Can be null. =
*/=0A=
dwr.engine._preHook =3D null;=0A=
=0A=
/** A function to be called after replies are received. Can be null. */=0A=
dwr.engine._postHook =3D null;=0A=
=0A=
/** An map of the batches that we have sent and are awaiting a reply on. =
*/=0A=
dwr.engine._batches =3D {};=0A=
=0A=
/** A count of the number of outstanding batches. Should be =3D=3D to =
_batches.length unless prototype has messed things up */=0A=
dwr.engine._batchesLength =3D 0;=0A=
=0A=
/** In ordered mode, the array of batches waiting to be sent */=0A=
dwr.engine._batchQueue =3D [];=0A=
=0A=
/** What is the default rpc type */=0A=
dwr.engine._rpcType =3D dwr.engine.XMLHttpRequest;=0A=
=0A=
/** What is the default remoting method (ie GET or POST) */=0A=
dwr.engine._httpMethod =3D "POST";=0A=
=0A=
/** Do we attempt to ensure that calls happen in the order in which they =
were sent? */=0A=
dwr.engine._ordered =3D false;=0A=
=0A=
/** Do we make the calls async? */=0A=
dwr.engine._async =3D true;=0A=
=0A=
/** The current batch (if we are in batch mode) */=0A=
dwr.engine._batch =3D null;=0A=
=0A=
/** The global timeout */=0A=
dwr.engine._timeout =3D 0;=0A=
=0A=
/** ActiveX objects to use when we want to convert an xml string into a =
DOM object. */=0A=
dwr.engine._DOMDocument =3D ["Msxml2.DOMDocument.6.0", =
"Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", =
"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", =
"Microsoft.XMLDOM"];=0A=
=0A=
/** The ActiveX objects to use when we want to do an XMLHttpRequest =
call. */=0A=
dwr.engine._XMLHTTP =3D ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", =
"Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", =
"Microsoft.XMLHTTP"];=0A=
=0A=
/** Are we doing comet or polling? */=0A=
dwr.engine._activeReverseAjax =3D false;=0A=
=0A=
/** The iframe that we are using to poll */=0A=
dwr.engine._outstandingIFrames =3D [];=0A=
=0A=
/** The xhr object that we are using to poll */=0A=
dwr.engine._pollReq =3D null;=0A=
=0A=
/** How many milliseconds between internal comet polls */=0A=
dwr.engine._pollCometInterval =3D 200;=0A=
=0A=
/** How many times have we re-tried to poll? */=0A=
dwr.engine._pollRetries =3D 0;=0A=
dwr.engine._maxPollRetries =3D 0;=0A=
=0A=
/** Do we do a document.reload if we get a text/html reply? */=0A=
dwr.engine._textHtmlHandler =3D null;=0A=
=0A=
/** If you wish to send custom headers with every request */=0A=
dwr.engine._headers =3D null;=0A=
=0A=
/** If you wish to send extra custom request parameters with each =
request */=0A=
dwr.engine._parameters =3D null;=0A=
=0A=
/** Undocumented interceptors - do not use */=0A=
dwr.engine._postSeperator =3D "\n";=0A=
dwr.engine._defaultInterceptor =3D function(data) { return data; };=0A=
dwr.engine._urlRewriteHandler =3D dwr.engine._defaultInterceptor;=0A=
dwr.engine._contentRewriteHandler =3D dwr.engine._defaultInterceptor;=0A=
dwr.engine._replyRewriteHandler =3D dwr.engine._defaultInterceptor;=0A=
=0A=
/** Batch ids allow us to know which batch the server is answering */=0A=
dwr.engine._nextBatchId =3D 0;=0A=
=0A=
/** A list of the properties that need merging from calls to a batch */=0A=
dwr.engine._propnames =3D [ "rpcType", "httpMethod", "async", "timeout", =
"errorHandler", "warningHandler", "textHtmlHandler" ];=0A=
=0A=
/** Do we stream, or can be hacked to do so? */=0A=
dwr.engine._partialResponseNo =3D 0;=0A=
dwr.engine._partialResponseYes =3D 1;=0A=
dwr.engine._partialResponseFlush =3D 2;=0A=
=0A=
/**=0A=
* @private Send a request. Called by the Javascript interface stub=0A=
* @param path part of URL after the host and before the exec bit =
without leading or trailing /s=0A=
* @param scriptName The class to execute=0A=
* @param methodName The method on said class to execute=0A=
* @param func The callback function to which any returned data should =
be passed=0A=
* if this is null, any returned data will be ignored=0A=
* @param vararg_params The parameters to pass to the above class=0A=
*/=0A=
dwr.engine._execute =3D function(path, scriptName, methodName, =
vararg_params) {=0A=
var singleShot =3D false;=0A=
if (dwr.engine._batch =3D=3D null) {=0A=
dwr.engine.beginBatch();=0A=
singleShot =3D true;=0A=
}=0A=
var batch =3D dwr.engine._batch;=0A=
// To make them easy to manipulate we copy the arguments into an args =
array=0A=
var args =3D [];=0A=
for (var i =3D 0; i < arguments.length - 3; i++) {=0A=
args[i] =3D arguments[i + 3];=0A=
}=0A=
// All the paths MUST be to the same servlet=0A=
if (batch.path =3D=3D null) {=0A=
batch.path =3D path;=0A=
}=0A=
else {=0A=
if (batch.path !=3D path) {=0A=
dwr.engine._handleError(batch, { =
name:"dwr.engine.multipleServlets", message:"Can't batch requests to =
multiple DWR Servlets." });=0A=
return;=0A=
}=0A=
}=0A=
// From the other params, work out which is the function (or object =
with=0A=
// call meta-data) and which is the call parameters=0A=
var callData;=0A=
var lastArg =3D args[args.length - 1];=0A=
if (typeof lastArg =3D=3D "function" || lastArg =3D=3D null) callData =
=3D { callback:args.pop() };=0A=
else callData =3D args.pop();=0A=
=0A=
// Merge from the callData into the batch=0A=
dwr.engine._mergeBatch(batch, callData);=0A=
batch.handlers[batch.map.callCount] =3D {=0A=
exceptionHandler:callData.exceptionHandler,=0A=
callback:callData.callback=0A=
};=0A=
=0A=
// Copy to the map the things that need serializing=0A=
var prefix =3D "c" + batch.map.callCount + "-";=0A=
batch.map[prefix + "scriptName"] =3D scriptName;=0A=
batch.map[prefix + "methodName"] =3D methodName;=0A=
batch.map[prefix + "id"] =3D batch.map.callCount;=0A=
for (i =3D 0; i < args.length; i++) {=0A=
dwr.engine._serializeAll(batch, [], args[i], prefix + "param" + i);=0A=
}=0A=
=0A=
// Now we have finished remembering the call, we incr the call count=0A=
batch.map.callCount++;=0A=
if (singleShot) dwr.engine.endBatch();=0A=
};=0A=
=0A=
/** @private Poll the server to see if there is any data waiting */=0A=
dwr.engine._poll =3D function(overridePath) {=0A=
if (!dwr.engine._activeReverseAjax) return;=0A=
=0A=
var batch =3D dwr.engine._createBatch();=0A=
batch.map.id =3D 0; // TODO: Do we need this??=0A=
batch.map.callCount =3D 1;=0A=
batch.isPoll =3D true;=0A=
if (dwr.engine._pollWithXhr =3D=3D "true") {=0A=
batch.rpcType =3D dwr.engine.XMLHttpRequest;=0A=
batch.map.partialResponse =3D dwr.engine._partialResponseNo;=0A=
}=0A=
else {=0A=
if (navigator.userAgent.indexOf("Gecko/") !=3D -1) {=0A=
batch.rpcType =3D dwr.engine.XMLHttpRequest;=0A=
batch.map.partialResponse =3D dwr.engine._partialResponseYes;=0A=
}=0A=
// else if (navigator.userAgent.indexOf("; MSIE")) {=0A=
// batch.rpcType =3D dwr.engine.IFrame;=0A=
// batch.map.partialResponse =3D dwr.engine._partialResponseYes;=0A=
// }=0A=
else if (navigator.userAgent.indexOf("Safari/")) {=0A=
batch.rpcType =3D dwr.engine.XMLHttpRequest;=0A=
batch.map.partialResponse =3D dwr.engine._partialResponseYes;=0A=
}=0A=
else {=0A=
batch.rpcType =3D dwr.engine.XMLHttpRequest;=0A=
batch.map.partialResponse =3D dwr.engine._partialResponseNo;=0A=
}=0A=
}=0A=
batch.httpMethod =3D "POST";=0A=
batch.async =3D true;=0A=
batch.timeout =3D 0;=0A=
batch.path =3D (overridePath) ? overridePath : dwr.engine._defaultPath;=0A=
batch.preHooks =3D [];=0A=
batch.postHooks =3D [];=0A=
batch.errorHandler =3D dwr.engine._pollErrorHandler;=0A=
batch.warningHandler =3D dwr.engine._pollErrorHandler;=0A=
batch.handlers[0] =3D {=0A=
callback:function(pause) {=0A=
dwr.engine._pollRetries =3D 0;=0A=
setTimeout("dwr.engine._poll()", pause);=0A=
}=0A=
};=0A=
=0A=
// Send the data=0A=
dwr.engine._sendData(batch);=0A=
if (batch.rpcType =3D=3D dwr.engine.XMLHttpRequest && =
batch.map.partialResponse =3D=3D dwr.engine._partialResponseYes) {=0A=
dwr.engine._checkCometPoll();=0A=
}=0A=
};=0A=
=0A=
/** Try to recover from polling errors */=0A=
dwr.engine._pollErrorHandler =3D function(msg, ex) {=0A=
// if anything goes wrong then just silently try again (up to 3x) =
after 10s=0A=
dwr.engine._pollRetries++;=0A=
dwr.engine._debug("Reverse Ajax poll failed (pollRetries=3D" + =
dwr.engine._pollRetries + "): " + ex.name + " : " + ex.message);=0A=
if (dwr.engine._pollRetries < dwr.engine._maxPollRetries) {=0A=
setTimeout("dwr.engine._poll()", 10000);=0A=
}=0A=
else {=0A=
dwr.engine._activeReverseAjax =3D false;=0A=
dwr.engine._debug("Giving up.");=0A=
}=0A=
};=0A=
=0A=
/** @private Generate a new standard batch */=0A=
dwr.engine._createBatch =3D function() {=0A=
var batch =3D {=0A=
map:{=0A=
callCount:0,=0A=
page:window.location.pathname + window.location.search,=0A=
httpSessionId:dwr.engine._getJSessionId(),=0A=
scriptSessionId:dwr.engine._getScriptSessionId()=0A=
},=0A=
charsProcessed:0, paramCount:0,=0A=
parameters:{}, headers:{},=0A=
isPoll:false, handlers:{}, preHooks:[], postHooks:[],=0A=
rpcType:dwr.engine._rpcType,=0A=
httpMethod:dwr.engine._httpMethod,=0A=
async:dwr.engine._async,=0A=
timeout:dwr.engine._timeout,=0A=
errorHandler:dwr.engine._errorHandler,=0A=
warningHandler:dwr.engine._warningHandler,=0A=
textHtmlHandler:dwr.engine._textHtmlHandler=0A=
};=0A=
if (dwr.engine._preHook) batch.preHooks.push(dwr.engine._preHook);=0A=
if (dwr.engine._postHook) batch.postHooks.push(dwr.engine._postHook);=0A=
var propname, data;=0A=
if (dwr.engine._headers) {=0A=
for (propname in dwr.engine._headers) {=0A=
data =3D dwr.engine._headers[propname];=0A=
if (typeof data !=3D "function") batch.headers[propname] =3D data;=0A=
}=0A=
}=0A=
if (dwr.engine._parameters) {=0A=
for (propname in dwr.engine._parameters) {=0A=
data =3D dwr.engine._parameters[propname];=0A=
if (typeof data !=3D "function") batch.parameters[propname] =3D =
data;=0A=
}=0A=
}=0A=
return batch;=0A=
};=0A=
=0A=
/** @private Take further options and merge them into */=0A=
dwr.engine._mergeBatch =3D function(batch, overrides) {=0A=
var propname, data;=0A=
for (var i =3D 0; i < dwr.engine._propnames.length; i++) {=0A=
propname =3D dwr.engine._propnames[i];=0A=
if (overrides[propname] !=3D null) batch[propname] =3D =
overrides[propname];=0A=
}=0A=
if (overrides.preHook !=3D null) =
batch.preHooks.unshift(overrides.preHook);=0A=
if (overrides.postHook !=3D null) =
batch.postHooks.push(overrides.postHook);=0A=
if (overrides.headers) {=0A=
for (propname in overrides.headers) {=0A=
data =3D overrides.headers[propname];=0A=
if (typeof data !=3D "function") batch.headers[propname] =3D data;=0A=
}=0A=
}=0A=
if (overrides.parameters) {=0A=
for (propname in overrides.parameters) {=0A=
data =3D overrides.parameters[propname];=0A=
if (typeof data !=3D "function") batch.map["p-" + propname] =3D "" =
+ data;=0A=
}=0A=
}=0A=
};=0A=
=0A=
/** @private What is our session id? */=0A=
dwr.engine._getJSessionId =3D function() {=0A=
var cookies =3D document.cookie.split(';');=0A=
for (var i =3D 0; i < cookies.length; i++) {=0A=
var cookie =3D cookies[i];=0A=
while (cookie.charAt(0) =3D=3D ' ') cookie =3D cookie.substring(1, =
cookie.length);=0A=
if (cookie.indexOf(dwr.engine._sessionCookieName + "=3D") =3D=3D 0) {=0A=
return cookie.substring(dwr.engine._sessionCookieName.length + 1, =
cookie.length);=0A=
}=0A=
}=0A=
return "";=0A=
};=0A=
=0A=
/** @private Check for reverse Ajax activity */=0A=
dwr.engine._checkCometPoll =3D function() {=0A=
for (var i =3D 0; i < dwr.engine._outstandingIFrames.length; i++) {=0A=
var text =3D "";=0A=
var iframe =3D dwr.engine._outstandingIFrames[i];=0A=
try {=0A=
text =3D dwr.engine._getTextFromCometIFrame(iframe);=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleWarning(iframe.batch, ex);=0A=
}=0A=
if (text !=3D "") dwr.engine._processCometResponse(text, =
iframe.batch);=0A=
}=0A=
if (dwr.engine._pollReq) {=0A=
var req =3D dwr.engine._pollReq;=0A=
var text =3D req.responseText;=0A=
if (text !=3D null) dwr.engine._processCometResponse(text, =
req.batch);=0A=
}=0A=
=0A=
// If the poll resources are still there, come back again=0A=
if (dwr.engine._outstandingIFrames.length > 0 || dwr.engine._pollReq) {=0A=
setTimeout("dwr.engine._checkCometPoll()", =
dwr.engine._pollCometInterval);=0A=
}=0A=
};=0A=
=0A=
/** @private Extract the whole (executed an all) text from the current =
iframe */=0A=
dwr.engine._getTextFromCometIFrame =3D function(frameEle) {=0A=
var body =3D frameEle.contentWindow.document.body;=0A=
if (body =3D=3D null) return "";=0A=
var text =3D body.innerHTML;=0A=
// We need to prevent IE from stripping line feeds=0A=
if (text.indexOf("
") =3D=3D 0 || text.indexOf("
") =3D=3D 0) {=0A=
text =3D text.substring(5, text.length - 7);=0A=
}=0A=
return text;=0A=
};=0A=
=0A=
/** @private Some more text might have come in, test and execute the new =
stuff */=0A=
dwr.engine._processCometResponse =3D function(response, batch) {=0A=
if (batch.charsProcessed =3D=3D response.length) return;=0A=
if (response.length =3D=3D 0) {=0A=
batch.charsProcessed =3D 0;=0A=
return;=0A=
}=0A=
=0A=
var firstStartTag =3D response.indexOf("//#DWR-START#", =
batch.charsProcessed);=0A=
if (firstStartTag =3D=3D -1) {=0A=
// dwr.engine._debug("No start tag (search from " + =
batch.charsProcessed + "). skipping '" + =
response.substring(batch.charsProcessed) + "'");=0A=
batch.charsProcessed =3D response.length;=0A=
return;=0A=
}=0A=
// if (firstStartTag > 0) {=0A=
// dwr.engine._debug("Start tag not at start (search from " + =
batch.charsProcessed + "). skipping '" + =
response.substring(batch.charsProcessed, firstStartTag) + "'");=0A=
// }=0A=
=0A=
var lastEndTag =3D response.lastIndexOf("//#DWR-END#");=0A=
if (lastEndTag =3D=3D -1) {=0A=
// dwr.engine._debug("No end tag. unchanged charsProcessed=3D" + =
batch.charsProcessed);=0A=
return;=0A=
}=0A=
=0A=
// Skip the end tag too for next time, remembering CR and LF=0A=
if (response.charCodeAt(lastEndTag + 11) =3D=3D 13 && =
response.charCodeAt(lastEndTag + 12) =3D=3D 10) {=0A=
batch.charsProcessed =3D lastEndTag + 13;=0A=
}=0A=
else {=0A=
batch.charsProcessed =3D lastEndTag + 11;=0A=
}=0A=
=0A=
var exec =3D response.substring(firstStartTag + 13, lastEndTag);=0A=
=0A=
dwr.engine._receivedBatch =3D batch;=0A=
dwr.engine._eval(exec);=0A=
dwr.engine._receivedBatch =3D null;=0A=
};=0A=
=0A=
/** @private Actually send the block of data in the batch object. */=0A=
dwr.engine._sendData =3D function(batch) {=0A=
batch.map.batchId =3D dwr.engine._nextBatchId;=0A=
dwr.engine._nextBatchId++;=0A=
dwr.engine._batches[batch.map.batchId] =3D batch;=0A=
dwr.engine._batchesLength++;=0A=
batch.completed =3D false;=0A=
=0A=
for (var i =3D 0; i < batch.preHooks.length; i++) {=0A=
batch.preHooks[i]();=0A=
}=0A=
batch.preHooks =3D null;=0A=
// Set a timeout=0A=
if (batch.timeout && batch.timeout !=3D 0) {=0A=
batch.interval =3D setInterval(function() { =
dwr.engine._abortRequest(batch); }, batch.timeout);=0A=
}=0A=
// Get setup for XMLHttpRequest if possible=0A=
if (batch.rpcType =3D=3D dwr.engine.XMLHttpRequest) {=0A=
if (window.XMLHttpRequest) {=0A=
batch.req =3D new XMLHttpRequest();=0A=
}=0A=
// IE5 for the mac claims to support window.ActiveXObject, but =
throws an error when it's used=0A=
else if (window.ActiveXObject && =
!(navigator.userAgent.indexOf("Mac") >=3D 0 && =
navigator.userAgent.indexOf("MSIE") >=3D 0)) {=0A=
batch.req =3D dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);=0A=
}=0A=
}=0A=
=0A=
var prop, request;=0A=
if (batch.req) {=0A=
// Proceed using XMLHttpRequest=0A=
if (batch.async) {=0A=
batch.req.onreadystatechange =3D function() {=0A=
if (typeof dwr !=3D 'undefined') dwr.engine._stateChange(batch);=0A=
};=0A=
}=0A=
// If we're polling, record this for monitoring=0A=
if (batch.isPoll) {=0A=
dwr.engine._pollReq =3D batch.req;=0A=
// In IE XHR is an ActiveX control so you can't augment it like =
this=0A=
if (!document.all) batch.req.batch =3D batch;=0A=
}=0A=
// Workaround for Safari 1.x POST bug=0A=
var indexSafari =3D navigator.userAgent.indexOf("Safari/");=0A=
if (indexSafari >=3D 0) {=0A=
var version =3D navigator.userAgent.substring(indexSafari + 7);=0A=
if (parseInt(version, 10) < 400) {=0A=
if (dwr.engine._allowGetForSafariButMakeForgeryEasier =3D=3D =
"true") batch.httpMethod =3D "GET";=0A=
else dwr.engine._handleWarning(batch, { =
name:"dwr.engine.oldSafari", message:"Safari GET support disabled. See =
getahead.org/dwr/server/servlet and =
allowGetForSafariButMakeForgeryEasier." });=0A=
}=0A=
}=0A=
batch.mode =3D batch.isPoll ? dwr.engine._ModePlainPoll : =
dwr.engine._ModePlainCall;=0A=
request =3D dwr.engine._constructRequest(batch);=0A=
try {=0A=
batch.req.open(batch.httpMethod, request.url, batch.async);=0A=
try {=0A=
for (prop in batch.headers) {=0A=
var value =3D batch.headers[prop];=0A=
if (typeof value =3D=3D "string") =
batch.req.setRequestHeader(prop, value);=0A=
}=0A=
if (!batch.headers["Content-Type"]) =
batch.req.setRequestHeader("Content-Type", "text/plain");=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleWarning(batch, ex);=0A=
}=0A=
batch.req.send(request.body);=0A=
if (!batch.async) dwr.engine._stateChange(batch);=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleError(batch, ex);=0A=
}=0A=
}=0A=
else if (batch.rpcType !=3D dwr.engine.ScriptTag) {=0A=
var idname =3D batch.isPoll ? "dwr-if-poll-" + batch.map.batchId : =
"dwr-if-" + batch.map["c0-id"];=0A=
// on IE try to use the htmlfile activex control=0A=
if (batch.isPoll && window.ActiveXObject) {=0A=
batch.htmlfile =3D new window.ActiveXObject("htmlfile");=0A=
batch.htmlfile.open();=0A=
batch.htmlfile.write("");=0A=
//batch.htmlfile.write("");=0A=
batch.htmlfile.write("");=0A=
batch.htmlfile.write("");=0A=
batch.htmlfile.close();=0A=
batch.htmlfile.parentWindow.dwr =3D dwr;=0A=
batch.document =3D batch.htmlfile;=0A=
}=0A=
else {=0A=
batch.div =3D document.createElement("div");=0A=
// Add the div to the document first, otherwise IE 6 will ignore =
onload handler.=0A=
document.body.appendChild(batch.div);=0A=
batch.div.innerHTML =3D "";=0A=
batch.document =3D document;=0A=
}=0A=
batch.iframe =3D batch.document.getElementById(idname);=0A=
batch.iframe.batch =3D batch;=0A=
batch.mode =3D batch.isPoll ? dwr.engine._ModeHtmlPoll : =
dwr.engine._ModeHtmlCall;=0A=
if (batch.isPoll) dwr.engine._outstandingIFrames.push(batch.iframe);=0A=
request =3D dwr.engine._constructRequest(batch);=0A=
if (batch.httpMethod =3D=3D "GET") {=0A=
batch.iframe.setAttribute("src", request.url);=0A=
}=0A=
else {=0A=
batch.form =3D batch.document.createElement("form");=0A=
batch.form.setAttribute("id", "dwr-form");=0A=
batch.form.setAttribute("action", request.url);=0A=
batch.form.setAttribute("target", idname);=0A=
batch.form.target =3D idname;=0A=
batch.form.setAttribute("method", batch.httpMethod);=0A=
for (prop in batch.map) {=0A=
var value =3D batch.map[prop];=0A=
if (typeof value !=3D "function") {=0A=
var formInput =3D batch.document.createElement("input");=0A=
formInput.setAttribute("type", "hidden");=0A=
formInput.setAttribute("name", prop);=0A=
formInput.setAttribute("value", value);=0A=
batch.form.appendChild(formInput);=0A=
}=0A=
}=0A=
batch.document.body.appendChild(batch.form);=0A=
batch.form.submit();=0A=
}=0A=
}=0A=
else {=0A=
batch.httpMethod =3D "GET"; // There's no such thing as ScriptTag =
using POST=0A=
batch.mode =3D batch.isPoll ? dwr.engine._ModePlainPoll : =
dwr.engine._ModePlainCall;=0A=
request =3D dwr.engine._constructRequest(batch);=0A=
batch.script =3D document.createElement("script");=0A=
batch.script.id =3D "dwr-st-" + batch.map["c0-id"];=0A=
batch.script.src =3D request.url;=0A=
document.body.appendChild(batch.script);=0A=
}=0A=
};=0A=
=0A=
dwr.engine._ModePlainCall =3D "/call/plaincall/";=0A=
dwr.engine._ModeHtmlCall =3D "/call/htmlcall/";=0A=
dwr.engine._ModePlainPoll =3D "/call/plainpoll/";=0A=
dwr.engine._ModeHtmlPoll =3D "/call/htmlpoll/";=0A=
=0A=
/** @private Work out what the URL should look like */=0A=
dwr.engine._constructRequest =3D function(batch) {=0A=
// A quick string to help people that use web log analysers=0A=
var request =3D { url:batch.path + batch.mode, body:null };=0A=
if (batch.isPoll =3D=3D true) {=0A=
request.url +=3D "ReverseAjax.dwr";=0A=
}=0A=
else if (batch.map.callCount =3D=3D 1) {=0A=
request.url +=3D batch.map["c0-scriptName"] + "." + =
batch.map["c0-methodName"] + ".dwr";=0A=
}=0A=
else {=0A=
request.url +=3D "Multiple." + batch.map.callCount + ".dwr";=0A=
}=0A=
// Play nice with url re-writing=0A=
var sessionMatch =3D location.href.match(/jsessionid=3D([^?]+)/);=0A=
if (sessionMatch !=3D null) {=0A=
request.url +=3D ";jsessionid=3D" + sessionMatch[1];=0A=
}=0A=
=0A=
var prop;=0A=
if (batch.httpMethod =3D=3D "GET") {=0A=
// Some browsers (Opera/Safari2) seem to fail to convert the =
callCount value=0A=
// to a string in the loop below so we do it manually here.=0A=
batch.map.callCount =3D "" + batch.map.callCount;=0A=
request.url +=3D "?";=0A=
for (prop in batch.map) {=0A=
if (typeof batch.map[prop] !=3D "function") {=0A=
request.url +=3D encodeURIComponent(prop) + "=3D" + =
encodeURIComponent(batch.map[prop]) + "&";=0A=
}=0A=
}=0A=
request.url =3D request.url.substring(0, request.url.length - 1);=0A=
}=0A=
else {=0A=
// PERFORMANCE: for iframe mode this is thrown away.=0A=
request.body =3D "";=0A=
for (prop in batch.map) {=0A=
if (typeof batch.map[prop] !=3D "function") {=0A=
request.body +=3D prop + "=3D" + batch.map[prop] + =
dwr.engine._postSeperator;=0A=
}=0A=
}=0A=
request.body =3D dwr.engine._contentRewriteHandler(request.body);=0A=
}=0A=
request.url =3D dwr.engine._urlRewriteHandler(request.url);=0A=
return request;=0A=
};=0A=
=0A=
/** @private Called by XMLHttpRequest to indicate that something has =
happened */=0A=
dwr.engine._stateChange =3D function(batch) {=0A=
var toEval;=0A=
=0A=
if (batch.completed) {=0A=
dwr.engine._debug("Error: _stateChange() with batch.completed");=0A=
return;=0A=
}=0A=
=0A=
var req =3D batch.req;=0A=
try {=0A=
if (req.readyState !=3D 4) return;=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleWarning(batch, ex);=0A=
// It's broken - clear up and forget this call=0A=
dwr.engine._clearUp(batch);=0A=
return;=0A=
}=0A=
=0A=
try {=0A=
var reply =3D req.responseText;=0A=
reply =3D dwr.engine._replyRewriteHandler(reply);=0A=
var status =3D req.status; // causes Mozilla to except on page moves=0A=
=0A=
if (reply =3D=3D null || reply =3D=3D "") {=0A=
dwr.engine._handleWarning(batch, { name:"dwr.engine.missingData", =
message:"No data received from server" });=0A=
}=0A=
else if (status !=3D 200) {=0A=
dwr.engine._handleError(batch, { name:"dwr.engine.http." + status, =
message:req.statusText });=0A=
}=0A=
else {=0A=
var contentType =3D req.getResponseHeader("Content-Type");=0A=
if (!contentType.match(/^text\/plain/) && =
!contentType.match(/^text\/javascript/)) {=0A=
if (contentType.match(/^text\/html/) && typeof =
batch.textHtmlHandler =3D=3D "function") {=0A=
batch.textHtmlHandler();=0A=
}=0A=
else {=0A=
dwr.engine._handleWarning(batch, { =
name:"dwr.engine.invalidMimeType", message:"Invalid content type: '" + =
contentType + "'" });=0A=
}=0A=
}=0A=
else {=0A=
// Comet replies might have already partially executed=0A=
if (batch.isPoll && batch.map.partialResponse =3D=3D =
dwr.engine._partialResponseYes) {=0A=
dwr.engine._processCometResponse(reply, batch);=0A=
}=0A=
else {=0A=
if (reply.search("//#DWR") =3D=3D -1) {=0A=
dwr.engine._handleWarning(batch, { =
name:"dwr.engine.invalidReply", message:"Invalid reply from server" });=0A=
}=0A=
else {=0A=
toEval =3D reply;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleWarning(batch, ex);=0A=
}=0A=
=0A=
dwr.engine._callPostHooks(batch);=0A=
=0A=
// Outside of the try/catch so errors propogate normally:=0A=
dwr.engine._receivedBatch =3D batch;=0A=
if (toEval !=3D null) toEval =3D =
toEval.replace(dwr.engine._scriptTagProtection, "");=0A=
dwr.engine._eval(toEval);=0A=
dwr.engine._receivedBatch =3D null;=0A=
dwr.engine._validateBatch(batch);=0A=
dwr.engine._clearUp(batch);=0A=
};=0A=
=0A=
/**=0A=
* @private This function is invoked when a batch reply is received.=0A=
* It checks that there is a response for every call in the batch. =
Otherwise,=0A=
* an error will be signaled (a call without a response indicates that =
the =0A=
* server failed to send complete batch response). =0A=
*/=0A=
dwr.engine._validateBatch =3D function(batch) {=0A=
// If some call left unreplied, report an error.=0A=
if (!batch.completed) {=0A=
for (var i =3D 0; i < batch.map.callCount; i++) {=0A=
if (batch.handlers[i] !=3D null) {=0A=
dwr.engine._handleWarning(batch, { =
name:"dwr.engine.incompleteReply", message:"Incomplete reply from =
server" });=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
=0A=
/** @private Called from iframe onload, check batch using batch-id */=0A=
dwr.engine._iframeLoadingComplete =3D function(batchId) {=0A=
// dwr.engine._checkCometPoll();=0A=
var batch =3D dwr.engine._batches[batchId];=0A=
if (batch) dwr.engine._validateBatch(batch);=0A=
}=0A=
=0A=
/** @private Called by the server: Execute a callback */=0A=
dwr.engine._remoteHandleCallback =3D function(batchId, callId, reply) {=0A=
var batch =3D dwr.engine._batches[batchId];=0A=
if (batch =3D=3D null) {=0A=
dwr.engine._debug("Warning: batch =3D=3D null in =
remoteHandleCallback for batchId=3D" + batchId, true);=0A=
return;=0A=
}=0A=
// Error handlers inside here indicate an error that is nothing to do=0A=
// with DWR so we handle them differently.=0A=
try {=0A=
var handlers =3D batch.handlers[callId];=0A=
batch.handlers[callId] =3D null;=0A=
if (!handlers) {=0A=
dwr.engine._debug("Warning: Missing handlers. callId=3D" + callId, =
true);=0A=
}=0A=
else if (typeof handlers.callback =3D=3D "function") =
handlers.callback(reply);=0A=
}=0A=
catch (ex) {=0A=
dwr.engine._handleError(batch, ex);=0A=
}=0A=
};=0A=
=0A=
/** @private Called by the server: Handle an exception for a call */=0A=
dwr.engine._remoteHandleException =3D function(batchId, callId, ex) {=0A=
var batch =3D dwr.engine._batches[batchId];=0A=
if (batch =3D=3D null) { dwr.engine._debug("Warning: null batch in =
remoteHandleException", true); return; }=0A=
var handlers =3D batch.handlers[callId];=0A=
batch.handlers[callId] =3D null;=0A=
if (handlers =3D=3D null) { dwr.engine._debug("Warning: null handlers =
in remoteHandleException", true); return; }=0A=
if (ex.message =3D=3D undefined) ex.message =3D "";=0A=
if (typeof handlers.exceptionHandler =3D=3D "function") =
handlers.exceptionHandler(ex.message, ex);=0A=
else if (typeof batch.errorHandler =3D=3D "function") =
batch.errorHandler(ex.message, ex);=0A=
};=0A=
=0A=
/** @private Called by the server: The whole batch is broken */=0A=
dwr.engine._remoteHandleBatchException =3D function(ex, batchId) {=0A=
var searchBatch =3D (dwr.engine._receivedBatch =3D=3D null && batchId =
!=3D null);=0A=
if (searchBatch) {=0A=
dwr.engine._receivedBatch =3D dwr.engine._batches[batchId];=0A=
}=0A=
if (ex.message =3D=3D undefined) ex.message =3D "";=0A=
dwr.engine._handleError(dwr.engine._receivedBatch, ex);=0A=
if (searchBatch) {=0A=
dwr.engine._receivedBatch =3D null;=0A=
dwr.engine._clearUp(dwr.engine._batches[batchId]);=0A=
}=0A=
};=0A=
=0A=
/** @private Called by the server: Reverse ajax should not be used */=0A=
dwr.engine._remotePollCometDisabled =3D function(ex, batchId) {=0A=
dwr.engine.setActiveReverseAjax(false);=0A=
var searchBatch =3D (dwr.engine._receivedBatch =3D=3D null && batchId =
!=3D null);=0A=
if (searchBatch) {=0A=
dwr.engine._receivedBatch =3D dwr.engine._batches[batchId];=0A=
}=0A=
if (ex.message =3D=3D undefined) ex.message =3D "";=0A=
dwr.engine._handleError(dwr.engine._receivedBatch, ex);=0A=
if (searchBatch) {=0A=
dwr.engine._receivedBatch =3D null;=0A=
dwr.engine._clearUp(dwr.engine._batches[batchId]);=0A=
}=0A=
};=0A=
=0A=
/** @private Called by the server: An IFrame reply is about to start */=0A=
dwr.engine._remoteBeginIFrameResponse =3D function(iframe, batchId) {=0A=
if (iframe !=3D null) dwr.engine._receivedBatch =3D iframe.batch;=0A=
dwr.engine._callPostHooks(dwr.engine._receivedBatch);=0A=
};=0A=
=0A=
/** @private Called by the server: An IFrame reply is just completing */=0A=
dwr.engine._remoteEndIFrameResponse =3D function(batchId) {=0A=
dwr.engine._clearUp(dwr.engine._receivedBatch);=0A=
dwr.engine._receivedBatch =3D null;=0A=
};=0A=
=0A=
/** @private This is a hack to make the context be this window */=0A=
dwr.engine._eval =3D function(script) {=0A=
if (script =3D=3D null) return null;=0A=
if (script =3D=3D "") { dwr.engine._debug("Warning: blank script", =
true); return null; }=0A=
// dwr.engine._debug("Exec: [" + script + "]", true);=0A=
return eval(script);=0A=
};=0A=
=0A=
/** @private Called as a result of a request timeout */=0A=
dwr.engine._abortRequest =3D function(batch) {=0A=
if (batch && !batch.completed) {=0A=
clearInterval(batch.interval);=0A=
dwr.engine._clearUp(batch);=0A=
if (batch.req) batch.req.abort();=0A=
dwr.engine._handleError(batch, { name:"dwr.engine.timeout", =
message:"Timeout" });=0A=
}=0A=
};=0A=
=0A=
/** @private call all the post hooks for a batch */=0A=
dwr.engine._callPostHooks =3D function(batch) {=0A=
if (batch.postHooks) {=0A=
for (var i =3D 0; i < batch.postHooks.length; i++) {=0A=
batch.postHooks[i]();=0A=
}=0A=
batch.postHooks =3D null;=0A=
}=0A=
};=0A=
=0A=
/** @private A call has finished by whatever means and we need to shut =
it all down. */=0A=
dwr.engine._clearUp =3D function(batch) {=0A=
if (!batch) { dwr.engine._debug("Warning: null batch in =
dwr.engine._clearUp()", true); return; }=0A=
if (batch.completed =3D=3D "true") { dwr.engine._debug("Warning: =
Double complete", true); return; }=0A=
=0A=
// IFrame tidyup=0A=
if (batch.div) batch.div.parentNode.removeChild(batch.div);=0A=
if (batch.iframe) {=0A=
// If this is a poll frame then stop comet polling=0A=
for (var i =3D 0; i < dwr.engine._outstandingIFrames.length; i++) {=0A=
if (dwr.engine._outstandingIFrames[i] =3D=3D batch.iframe) {=0A=
dwr.engine._outstandingIFrames.splice(i, 1);=0A=
}=0A=
}=0A=
batch.iframe.parentNode.removeChild(batch.iframe);=0A=
}=0A=
if (batch.form) batch.form.parentNode.removeChild(batch.form);=0A=
=0A=
// XHR tidyup: avoid IE handles increase=0A=
if (batch.req) {=0A=
// If this is a poll frame then stop comet polling=0A=
if (batch.req =3D=3D dwr.engine._pollReq) dwr.engine._pollReq =3D =
null;=0A=
delete batch.req;=0A=
}=0A=
=0A=
if (batch.map && batch.map.batchId) {=0A=
delete dwr.engine._batches[batch.map.batchId];=0A=
dwr.engine._batchesLength--;=0A=
}=0A=
=0A=
batch.completed =3D true;=0A=
=0A=
// If there is anything on the queue waiting to go out, then send it.=0A=
// We don't need to check for ordered mode, here because when ordered =
mode=0A=
// gets turned off, we still process *waiting* batches in an ordered =
way.=0A=
if (dwr.engine._batchQueue.length !=3D 0) {=0A=
var sendbatch =3D dwr.engine._batchQueue.shift();=0A=
dwr.engine._sendData(sendbatch);=0A=
}=0A=
};=0A=
=0A=
/** @private Generic error handling routing to save having null checks =
everywhere */=0A=
dwr.engine._handleError =3D function(batch, ex) {=0A=
if (typeof ex =3D=3D "string") ex =3D { name:"unknown", message:ex };=0A=
if (ex.message =3D=3D null) ex.message =3D "";=0A=
if (ex.name =3D=3D null) ex.name =3D "unknown";=0A=
if (batch && typeof batch.errorHandler =3D=3D "function") =
batch.errorHandler(ex.message, ex);=0A=
else if (dwr.engine._errorHandler) =
dwr.engine._errorHandler(ex.message, ex);=0A=
if (batch) dwr.engine._clearUp(batch);=0A=
};=0A=
=0A=
/** @private Generic error handling routing to save having null checks =
everywhere */=0A=
dwr.engine._handleWarning =3D function(batch, ex) {=0A=
if (typeof ex =3D=3D "string") ex =3D { name:"unknown", message:ex };=0A=
if (ex.message =3D=3D null) ex.message =3D "";=0A=
if (ex.name =3D=3D null) ex.name =3D "unknown";=0A=
if (batch && typeof batch.warningHandler =3D=3D "function") =
batch.warningHandler(ex.message, ex);=0A=
else if (dwr.engine._warningHandler) =
dwr.engine._warningHandler(ex.message, ex);=0A=
if (batch) dwr.engine._clearUp(batch);=0A=
};=0A=
=0A=
/**=0A=
* @private Marshall a data item=0A=
* @param batch A map of variables to how they have been marshalled=0A=
* @param referto An array of already marshalled variables to prevent =
recurrsion=0A=
* @param data The data to be marshalled=0A=
* @param name The name of the data being marshalled=0A=
*/=0A=
dwr.engine._serializeAll =3D function(batch, referto, data, name) {=0A=
if (data =3D=3D null) {=0A=
batch.map[name] =3D "null:null";=0A=
return;=0A=
}=0A=
=0A=
switch (typeof data) {=0A=
case "boolean":=0A=
batch.map[name] =3D "boolean:" + data;=0A=
break;=0A=
case "number":=0A=
batch.map[name] =3D "number:" + data;=0A=
break;=0A=
case "string":=0A=
batch.map[name] =3D "string:" + encodeURIComponent(data);=0A=
break;=0A=
case "object":=0A=
if (data instanceof String) batch.map[name] =3D "String:" + =
encodeURIComponent(data);=0A=
else if (data instanceof Boolean) batch.map[name] =3D "Boolean:" + =
data;=0A=
else if (data instanceof Number) batch.map[name] =3D "Number:" + =
data;=0A=
else if (data instanceof Date) batch.map[name] =3D "Date:" + =
data.getTime();=0A=
else if (data && data.join) batch.map[name] =3D =
dwr.engine._serializeArray(batch, referto, data, name);=0A=
else batch.map[name] =3D dwr.engine._serializeObject(batch, referto, =
data, name);=0A=
break;=0A=
case "function":=0A=
// We just ignore functions.=0A=
break;=0A=
default:=0A=
dwr.engine._handleWarning(null, { name:"dwr.engine.unexpectedType", =
message:"Unexpected type: " + typeof data + ", attempting default =
converter." });=0A=
batch.map[name] =3D "default:" + data;=0A=
break;=0A=
}=0A=
};=0A=
=0A=
/** @private Have we already converted this object? */=0A=
dwr.engine._lookup =3D function(referto, data, name) {=0A=
var lookup;=0A=
// Can't use a map: getahead.org/ajax/javascript-gotchas=0A=
for (var i =3D 0; i < referto.length; i++) {=0A=
if (referto[i].data =3D=3D data) {=0A=
lookup =3D referto[i];=0A=
break;=0A=
}=0A=
}=0A=
if (lookup) return "reference:" + lookup.name;=0A=
referto.push({ data:data, name:name });=0A=
return null;=0A=
};=0A=
=0A=
/** @private Marshall an object */=0A=
dwr.engine._serializeObject =3D function(batch, referto, data, name) {=0A=
var ref =3D dwr.engine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
// This check for an HTML is not complete, but is there a better way?=0A=
// Maybe we should add: data.hasChildNodes typeof "function" =3D=3D =
true=0A=
if (data.nodeName && data.nodeType) {=0A=
return dwr.engine._serializeXml(batch, referto, data, name);=0A=
}=0A=
=0A=
// treat objects as an associative arrays=0A=
var reply =3D "Object_" + dwr.engine._getObjectClassName(data) + ":{";=0A=
var element;=0A=
for (element in data) {=0A=
if (typeof data[element] !=3D "function") {=0A=
batch.paramCount++;=0A=
var childName =3D "c" + dwr.engine._batch.map.callCount + "-e" + =
batch.paramCount;=0A=
dwr.engine._serializeAll(batch, referto, data[element], childName);=0A=
=0A=
reply +=3D encodeURIComponent(element) + ":reference:" + childName =
+ ", ";=0A=
}=0A=
}=0A=
=0A=
if (reply.substring(reply.length - 2) =3D=3D ", ") {=0A=
reply =3D reply.substring(0, reply.length - 2);=0A=
}=0A=
reply +=3D "}";=0A=
=0A=
return reply;=0A=
};=0A=
=0A=
/** @private Returns the classname of supplied argument obj */=0A=
dwr.engine._errorClasses =3D { "Error":Error, "EvalError":EvalError, =
"RangeError":RangeError, "ReferenceError":ReferenceError, =
"SyntaxError":SyntaxError, "TypeError":TypeError, "URIError":URIError };=0A=
dwr.engine._getObjectClassName =3D function(obj) {=0A=
// Try to find the classname by stringifying the object's constructor=0A=
// and extract from "function ".=0A=
if (obj && obj.constructor && obj.constructor.toString)=0A=
{=0A=
var str =3D obj.constructor.toString();=0A=
var regexpmatch =3D str.match(/function\s+(\w+)/);=0A=
if (regexpmatch && regexpmatch.length =3D=3D 2) {=0A=
return regexpmatch[1];=0A=
}=0A=
}=0A=
=0A=
// Now manually test against the core Error classes, as these in some =0A=
// browsers successfully match to the wrong class in the =0A=
// Object.toString() test we will do later=0A=
if (obj && obj.constructor) {=0A=
for (var errorname in dwr.engine._errorClasses) {=0A=
if (obj.constructor =3D=3D dwr.engine._errorClasses[errorname]) =
return errorname;=0A=
}=0A=
}=0A=
=0A=
// Try to find the classname by calling Object.toString() on the object=0A=
// and extracting from "[object ]"=0A=
if (obj) {=0A=
var str =3D Object.prototype.toString.call(obj);=0A=
var regexpmatch =3D str.match(/\[object\s+(\w+)/);=0A=
if (regexpmatch && regexpmatch.length=3D=3D2) {=0A=
return regexpmatch[1];=0A=
}=0A=
}=0A=
=0A=
// Supplied argument was probably not an object, but what is better?=0A=
return "Object";=0A=
};=0A=
=0A=
/** @private Marshall an object */=0A=
dwr.engine._serializeXml =3D function(batch, referto, data, name) {=0A=
var ref =3D dwr.engine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
var output;=0A=
if (window.XMLSerializer) output =3D new =
XMLSerializer().serializeToString(data);=0A=
else if (data.toXml) output =3D data.toXml;=0A=
else output =3D data.innerHTML;=0A=
=0A=
return "XML:" + encodeURIComponent(output);=0A=
};=0A=
=0A=
/** @private Marshall an array */=0A=
dwr.engine._serializeArray =3D function(batch, referto, data, name) {=0A=
var ref =3D dwr.engine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
var reply =3D "Array:[";=0A=
for (var i =3D 0; i < data.length; i++) {=0A=
if (i !=3D 0) reply +=3D ",";=0A=
batch.paramCount++;=0A=
var childName =3D "c" + dwr.engine._batch.map.callCount + "-e" + =
batch.paramCount;=0A=
dwr.engine._serializeAll(batch, referto, data[i], childName);=0A=
reply +=3D "reference:";=0A=
reply +=3D childName;=0A=
}=0A=
reply +=3D "]";=0A=
=0A=
return reply;=0A=
};=0A=
=0A=
/** @private Convert an XML string into a DOM object. */=0A=
dwr.engine._unserializeDocument =3D function(xml) {=0A=
var dom;=0A=
if (window.DOMParser) {=0A=
var parser =3D new DOMParser();=0A=
dom =3D parser.parseFromString(xml, "text/xml");=0A=
if (!dom.documentElement || dom.documentElement.tagName =3D=3D =
"parsererror") {=0A=
var message =3D dom.documentElement.firstChild.data;=0A=
message +=3D "\n" + =
dom.documentElement.firstChild.nextSibling.firstChild.data;=0A=
throw message;=0A=
}=0A=
return dom;=0A=
}=0A=
else if (window.ActiveXObject) {=0A=
dom =3D dwr.engine._newActiveXObject(dwr.engine._DOMDocument);=0A=
dom.loadXML(xml); // What happens on parse fail with IE?=0A=
return dom;=0A=
}=0A=
else {=0A=
var div =3D document.createElement("div");=0A=
div.innerHTML =3D xml;=0A=
return div;=0A=
}=0A=
};=0A=
=0A=
/** @param axarray An array of strings to attempt to create ActiveX =
objects from */=0A=
dwr.engine._newActiveXObject =3D function(axarray) {=0A=
var returnValue; =0A=
for (var i =3D 0; i < axarray.length; i++) {=0A=
try {=0A=
returnValue =3D new ActiveXObject(axarray[i]);=0A=
break;=0A=
}=0A=
catch (ex) { /* ignore */ }=0A=
}=0A=
return returnValue;=0A=
};=0A=
=0A=
/** @private Used internally when some message needs to get to the =
programmer */=0A=
dwr.engine._debug =3D function(message, stacktrace) {=0A=
var written =3D false;=0A=
try {=0A=
if (window.console) {=0A=
if (stacktrace && window.console.trace) window.console.trace();=0A=
window.console.log(message);=0A=
written =3D true;=0A=
}=0A=
else if (window.opera && window.opera.postError) {=0A=
window.opera.postError(message);=0A=
written =3D true;=0A=
}=0A=
}=0A=
catch (ex) { /* ignore */ }=0A=
=0A=
if (!written) {=0A=
var debug =3D document.getElementById("dwr-debug");=0A=
if (debug) {=0A=
var contents =3D message + " " + debug.innerHTML;=0A=
if (contents.length > 2048) contents =3D contents.substring(0, =
2048);=0A=
debug.innerHTML =3D contents;=0A=
}=0A=
}=0A=
};=0A=
------=_NextPart_000_0000_01CA1538.43D84800
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://scripts.dailymail.co.uk/static/bundles/dm--Release-7-0-2-9.js
=0A=
var G_IMG_SRV=3D"http://f.dailymail.co.uk";var =
AND=3Dfunction(){if(typeof =
ANDDebugOn=3D=3D'undefined'){ANDDebugOn=3Dtrue;}=0A=
if(ANDDebugOn){if(typeof =
console=3D=3D'undefined'){console=3Dfunction(){return{log:function(msg){a=
lert(msg);},dir:function(msg){alert(msg);},trace:function(msg){alert(msg)=
;}};}();}}else{if(typeof console=3D=3D'undefined'){console=3D{};}=0A=
console.log=3Dfunction(){};console.dir=3Dfunction(){};console.trace=3Dfun=
ction(){};};var JSONscriptRequestManager=3Dfunction(){var =
headLoc=3Ddocument.getElementsByTagName("head").item(0),scriptObj,cache=3D=
[],objConfig=3D{};var =
resetObjConfig=3Dfunction(){objConfig.scriptUrl=3D"";objConfig.cacheId=3D=
"";objConfig.callback=3Dnull;objConfig.useCache=3Dtrue;}=0A=
return{getScript:function(config){if(!config.scriptUrl&&typeof =
config.scriptUrl!=3D"string"&&!config.callback&&typeof =
config.callback!=3D"object")return =
false;resetObjConfig();AND.extendObject(objConfig,config);objConfig.cache=
Id=3DobjConfig.scriptUrl.replace(/[^a-z]/gi,"");if(objConfig.useCache&&ca=
che[objConfig.cacheId]){this._callback();}else{if(scriptObj)headLoc.remov=
eChild(scriptObj);var strCallback=3D"jsonCallback"+(new =
Date()).getTime();window[strCallback]=3DAND.JSONscriptRequestManager._cal=
lback;strCallback=3D"callback=3D"+strCallback;if(objConfig.scriptUrl.inde=
xOf("?")=3D=3D-1){strCallback=3D"?"+strCallback;}else =
if(objConfig.scriptUrl[objConfig.scriptUrl.length-1]!=3D"?"){strCallback=3D=
"&"+strCallback;}=0A=
scriptObj=3Ddocument.createElement("script");scriptObj.setAttribute("type=
","text/javascript");scriptObj.setAttribute("src",objConfig.scriptUrl+str=
Callback);headLoc.appendChild(scriptObj);}},_callback:function(data){if(d=
ata){if(objConfig.useCache)cache[objConfig.cacheId]=3Ddata;objConfig.call=
back(data);}else{objConfig.callback(cache[objConfig.cacheId]);}}}}();retu=
rn{isIE6:function(){return(typeof =
DM.IE6!=3D"undefined");},extendObject:function(destination,source){for(va=
r property in source){destination[property]=3Dsource[property];};return =
destination;},mouseEnterOrLeave:function(event,target){var =
relatedTarget=3DEvent.getRelatedTarget(event)?Event.getRelatedTarget(even=
t):event.type=3D=3D=3D'mouseout'?event.toElement:event.fromElement;if(typ=
eof relatedTarget=3D=3D=3D'undefined'){return =
false;};while(relatedTarget&&relatedTarget!=3Dtarget){relatedTarget=3Drel=
atedTarget.parentNode;};return(relatedTarget!=3Dtarget);},forEach:functio=
n(array,fn){for(var =
n=3D0,len=3Darray.length;ndocument.body.offsetHeight){xScroll=3Ddocum=
ent.body.scrollWidth;yScroll=3Ddocument.body.scrollHeight;}else{xScroll=3D=
document.body.offsetWidth;yScroll=3Ddocument.body.offsetHeight;}=0A=
var =
windowWidth,windowHeight;if(self.innerHeight){windowWidth=3Dself.innerWid=
th;windowHeight=3Dself.innerHeight;}else =
if(document.documentElement&&document.documentElement.clientHeight){windo=
wWidth=3Ddocument.documentElement.clientWidth;windowHeight=3Ddocument.doc=
umentElement.clientHeight;}else =
if(document.body){windowWidth=3Ddocument.body.clientWidth;windowHeight=3D=
document.body.clientHeight;}=0A=
var =
pageHeight,pageWidth;if(yScroll1&&szValue.cha=
rAt(0)=3D=3D'"'&&szValue.charAt(szValue.length-1)=3D=3D'"'){szValue=3DszV=
alue.substring(1,szValue.length-1);}}}=0A=
return szValue;},deleteCookie:function(szName)=0A=
{var tmp=3DAND.getCookie(szName);if(tmp)AND.setCookie(szName,tmp,(new =
Date(1)));},competitions:{isDailyMailDomain:function(strDomain){if(new =
RegExp("\.mailonsunday\.co\.uk$","i").test(strDomain)){return =
false;}else{return =
true;}},getRegUrl:function(strDomain){if(AND.competitions.isDailyMailDoma=
in(strDomain)){return"https://register.dailymail.co.uk";}else{return"http=
s://register.mailonsunday.co.uk";}},dologon:function(doc,strDomain){doc.a=
ction=3DAND.competitions.getRegUrl(strDomain)+"/login";doc.redirectPath.v=
alue=3Ddocument.URL;doc.submit();},doregister:function(doc,strDomain){doc=
.action=3DAND.competitions.getRegUrl(strDomain)+"/login";doc.redirectPath=
.value=3Ddocument.URL;doc.submit();},dologout:function(in_redirect_url){A=
ND.deleteCookie("userid","/",".dailymail.co.uk");AND.deleteCookie("authid=
","/",".dailymail.co.uk");AND.deleteCookie("subuserid","/",".dailymail.co=
.uk");AND.deleteCookie("email","/",".dailymail.co.uk");AND.deleteCookie("=
userid","/",".mailonsunday.co.uk");AND.deleteCookie("subuserid","/",".mai=
lonsunday.co.uk");AND.deleteCookie("email","/",".mailonsunday.co.uk");AND=
.deleteCookie("userid","/",".anl.dmgt.net");AND.deleteCookie("authid","/"=
,".anl.dmgt.net");window.location=3Din_redirect_url;},docomplogon:functio=
n(doc,comp_id,strDomain){doc.action=3DAND.competitions.getRegUrl(strDomai=
n)+"/loginCompetition";doc.EntryPath.value=3D"https://register.anm.co.uk/=
register/comp.htm";if(doc.CompId.value=3D=3D''){doc.CompId.value=3Dcomp_i=
d;}=0A=
doc.submit();},doedit:function(doc,strDomain){doc.action=3DAND.competitio=
ns.getRegUrl(strDomain)+"/login";doc.Email.value=3DAND.getCookie("email")=
;doc.redirectPath.value=3Ddocument.URL;doc.Update.value=3D"Y";doc.submit(=
);}},JSONscriptRequestManager:JSONscriptRequestManager}}();AND.Template=3D=
function(html){this.html=3Dhtml;this._compile();};AND.Template.prototype=3D=
{regex:/\{([\w-]+)\}/g,apply:function(values){return =
this.compiled(values);},set:AND.Template,_compile:function(){function =
fn(m,name){name=3D"values['"+name+"']";return"',("+name+" =3D=3D =
undefined ? '' : "+name+"),'";}=0A=
eval("this.compiled =3D function(values){ return =
"+"['"+this.html.replace(/\\/g,'\\\\').replace(/(\r\n|\n)/g,'\\n').replac=
e(/'/g,"\\'").replace(this.regex,fn)+"'].join('');};");return =
this;}};AND.Intellitracker=3Dfunction(){return{log:function(config){var =
img=3Dnew Image();var =
randNum=3DMath.ceil(Math.random()*1000000000);img.src=3D"http://anm.intel=
li-direct.com/e/t3.dll?"+config.memberId+"&"+randNum+"&%20&iAddPAR&iREGQr=
y&iSale&0&0&0&0&0&0&%20&1500&"+escape(config.url)+"&2";}}}();var =
swfobject=3Dfunction(){var D=3D"undefined",r=3D"object",S=3D"Shockwave =
Flash",W=3D"ShockwaveFlash.ShockwaveFlash",q=3D"application/x-shockwave-f=
lash",R=3D"SWFObjectExprInst",x=3D"onreadystatechange",O=3Dwindow,j=3Ddoc=
ument,t=3Dnavigator,T=3Dfalse,U=3D[h],o=3D[],N=3D[],I=3D[],l,Q,E,B,J=3Dfa=
lse,a=3Dfalse,n,G,m=3Dtrue,M=3Dfunction(){var aa=3Dtypeof =
j.getElementById!=3DD&&typeof j.getElementsByTagName!=3DD&&typeof =
j.createElement!=3DD,ah=3Dt.userAgent.toLowerCase(),Y=3Dt.platform.toLowe=
rCase(),ae=3DY?/win/.test(Y):/win/.test(ah),ac=3DY?/mac/.test(Y):/mac/.te=
st(ah),af=3D/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d=
+)?).*$/,"$1")):false,X=3D!+"\v1",ag=3D[0,0,0],ab=3Dnull;if(typeof =
t.plugins!=3DD&&typeof =
t.plugins[S]=3D=3Dr){ab=3Dt.plugins[S].description;if(ab&&!(typeof =
t.mimeTypes!=3DD&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=3Dtru=
e;X=3Dfalse;ab=3Dab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=3DparseInt(a=
b.replace(/^(.*)\..*$/,"$1"),10);ag[1]=3DparseInt(ab.replace(/^.*\.(.*)\s=
.*$/,"$1"),10);ag[2]=3D/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-=
Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=3DD){try{var =
ad=3Dnew =
ActiveXObject(W);if(ad){ab=3Dad.GetVariable("$version");if(ab){X=3Dtrue;a=
b=3Dab.split(" =
")[1].split(",");ag=3D[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[=
2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=3D=
function(){if(!M.w3){return}if((typeof =
j.readyState!=3DD&&j.readyState=3D=3D"complete")||(typeof =
j.readyState=3D=3DD&&(j.getElementsByTagName("body")[0]||j.body))){f()}if=
(!J){if(typeof =
j.addEventListener!=3DD){j.addEventListener("DOMContentLoaded",f,false)}i=
f(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=3D=3D"complete"=
){j.detachEvent(x,arguments.callee);f()}});if(O=3D=3Dtop){(function(){if(=
J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(argu=
ments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/lo=
aded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}=
f()})()}s(f)}}();function f(){if(J){return}try{var =
Z=3Dj.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode=
.removeChild(Z)}catch(aa){return}J=3Dtrue;var X=3DU.length;for(var =
Y=3D0;Y0){for(var af=3D0;af0){var =
ae=3Dc(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(=
ab){aa.success=3Dtrue;aa.ref=3Dz(Y);ab(aa)}}else{if(o[af].expressInstall&=
&A()){var =
ai=3D{};ai.data=3Do[af].expressInstall;ai.width=3Dae.getAttribute("width"=
)||"0";ai.height=3Dae.getAttribute("height")||"0";if(ae.getAttribute("cla=
ss")){ai.styleclass=3Dae.getAttribute("class")}if(ae.getAttribute("align"=
)){ai.align=3Dae.getAttribute("align")}var ah=3D{};var =
X=3Dae.getElementsByTagName("param");var ac=3DX.length;for(var =
ad=3D0;ad'}}aa.outerHTML=3D'
Comments (40)
Here's what readers have had to say so far. Why not add your thoughts = below,=20 or = debate this=20 issue live on our message boards.
The comments below have been moderated in advance.
I'm surprised to see how many people on here = seem to think=20 it is OK for members of the public to issue death threats against = council=20 employees.
With attitudes like that is easy to see why so many = doctors,=20 nurses and socilal workers are physically and verbally abused each = year.
- Chris Jones, Leeds, 26/6/2009 12:34
Report=20 abuse
The old saying still holds true.
"No good = deed goes=20 unpunished".
- John L, Maryland, USA, 26/6/2009 12:30
Report=20 abuse
Why don't the council actually spend money on = actually=20 tackling anti social behaviour rather than persecuting an innocent woman = trying=20 to make the world a better place for all decent people (remember us?). = No doubt=20 the poor council staff needed time off for counselling after dealing = with such a=20 "difficult customer". Heaven help them if they had actually had to deal = with the=20 yob who was causing the problem in the first place! I am glad that I = don't live=20 in Slugh as I would object to my council tax being used to fund this = ridiculous=20 case. This could have been resolved by someone senior taking = responsibility for=20 actually speaking to the lady and assuring her that they do take the = issue of=20 anti social behaviour seriously. Even if they had no chance of catching = the=20 perpetrator then at least she would have been reassured by the fact that = the=20 council do take complaints seriously.
- carol, Bolton.UK, 26/6/2009 11:59
Report=20 abuse
What sort of spiteful, small minded jobsworths = does this=20 council employ?
- Stratford, Hants., 26/6/2009 11:37
Report=20 abuse
Don't worry, Cameron said that he would repeal = all these=20 draconian laws when he gets in power.!!!!!!
- Paul, East London, 26/6/2009 11:36
Report=20 abuse
Sack these insidious council jobsworths.
- Hrothgar, Zimbabritain, 26/6/2009 = 11:36
Report=20 abuse
The views expressed in the contents above = are those=20 of our users and do not necessarily reflect the views of MailOnline. =
Add your comment