Misplaced Pages

User:Lupin/popups.js: Difference between revisions

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
< User:Lupin Browse history interactively← Previous editNext edit →Content deleted Content added
Revision as of 16:09, 11 September 2005 view sourceLupin (talk | contribs)19,513 edits fix block links, hopefully← Previous edit Revision as of 12:46, 18 September 2005 view source Lupin (talk | contribs)19,513 edits upgrade to dev version. New features: faster loading time, automatic redir fixage, last edit link, extra links for old revisions (edit old revision etc), preview-on-click, cookies, popupLiveOptionsNext edit →
Line 1: Line 1:
var popupVersion="Sat Sep 10 10:18:44 EDT 2005 bugfix(1)"; var popupVersion="Sat Sep 17 18:22:05 EDT 2005";
// CONTENTS // CONTENTS


Line 29: Line 29:
function myalert(x) { return alert(time()+'\n'+ x); }; function myalert(x) { return alert(time()+'\n'+ x); };



// eg sourceJS('http://www.bosrup.com/web/overlib/overlib.js');

function sourceJS(url) {
var str='<script type="text/javascript" src="';
str += url;
str += '"></script>';
return document.write(str);
};

// eg sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/overlib.js');

function sourceWikipediaJS(wiki, name) {
var url='http://' + wiki + '/search/?title=';
url += name;
url += '&action=raw&ctype=text/javascript&dontcountme=s';
return sourceJS(url);
};

// eg sourceLupinJS('overlib');

function sourceLupinJS(name) {
return sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/'+name + '.js');
};


//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Popup stuff // Popup stuff
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

sourceLupinJS('livepreview');
sourceLupinJS('overlib');
sourceLupinJS('md5-2.2alpha');


// livepreview uses a broken hex_md5 function, so we avoid it // livepreview uses a broken hex_md5 function, so we avoid it
function md5_hex(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }; function md5_hex(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); };


////////////////////// /////////////////////
// GLOBAL VARIABLES // // GLOBAL VARIABLES //
////////////////////// //////////////////////
Line 99: Line 71:
var splitLoc=window.location.href.split('/'); var splitLoc=window.location.href.split('/');
var thisWiki=splitLoc; var thisWiki=splitLoc;
var wikimediaWiki=RegExp('wikiedia\.org').test(thisWiki); var wikimediaWiki=RegExp('wiki\(edia\|source\|books\)\.org\|wiktionary\.org').test(thisWiki);
var localWiki=RegExp('^localhost').test(thisWiki);
var protocol=splitLoc.split(':'); var protocol=splitLoc.split(':');


var titletail='/index.php?title='; var titletail='/index.php?title=';
if (wikimediaWiki) titletail = '/w' + titletail; if (wikimediaWiki) titletail = '/w' + titletail;
else if (localWiki) titletail = '/wiki' + titletail;





// eg sourceJS('http://www.bosrup.com/web/overlib/overlib.js');

function sourceJS(url) {
var str='<script type="text/javascript" src="';
str += url;
str += '"></script>';
return document.write(str);
};

// eg sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/overlib.js');

function sourceWikipediaJS(wiki, name) {
var url='http://' + wiki + titletail;
url += name;
url += '&action=raw&ctype=text/javascript&dontcountme=s';
return sourceJS(url);
};

// eg sourceLupinJS('overlib');


function sourceLupinJS(name) {
return sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/'+name + '.js');
};

/* // include files directly for a better response
if (thisWiki.indexOf('localhost') == 0) {
sourceWikipediaJS(thisWiki, 'User:Lupin/livepreview.js');
sourceWikipediaJS(thisWiki, 'User:Lupin/overlib.js');
sourceWikipediaJS(thisWiki, 'User:Lupin/md5-2.2alpha.js');
} else {
sourceLupinJS('livepreview');
sourceLupinJS('overlib');
sourceLupinJS('md5-2.2alpha');
}
*/
// /REGEX // /REGEX


Line 113: Line 125:
var reStart='*://'; var reStart='*://';
var preTitles='wiki/|w/index\\.php\\?title='; var preTitles='wiki/|w/index\\.php\\?title=';

if (!wikimediaWiki) preTitles += '|index\\.php\\?title=';
if (!wikimediaWiki) {
var reEnd='/(' + preTitles + ')(*)';
preTitles = 'wiki/index\\.php\\?title=|wiki/index\\.php/|'+preTitles
+ '|index\\.php\\?title=' ;
}
var reEnd='/(' + preTitles + ')(*)';
var re = RegExp(reStart + thisWiki.split('.').join('\\.') + reEnd); var re = RegExp(reStart + thisWiki.split('.').join('\\.') + reEnd);


Line 199: Line 215:
// FIXME - eliminate this // FIXME - eliminate this
var redirCount=0; var redirCount=0;


// Cookie handling
// pasted straight from http://www.quirksmode.org/js/cookies.html

function createCookie(name,value,days)
{
if (days)
{
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name)
{
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++)
{
var c = ca;
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
};

function eraseCookie(name)
{
createCookie(name,"",-1);
};





// options // options


// this should expand to something like // if there's no cookie, this should expand to something like
// if (window.foo===null) window.foo=window.dfoo; // if (window.foo===null) window.foo=window.dfoo;
function defaultize(x) { function defaultize(x) {
var val=null;
var a='window.'+x; var a='window.'+x;
var b='window.d'+x; var b='window.d'+x;
if (x!='popupCookies') {
defaultize('popupCookies');
if (popupCookies && (val=readCookie(x))) {
eval(a + '=' + val + ';');
return;
}
}
eval('if ('+a+'===null) '+a+'=' + b + ';'); eval('if ('+a+'===null) '+a+'=' + b + ';');
}; };
Line 222: Line 281:
// user-settable parameters and defaults // user-settable parameters and defaults
newOption('popupDelay', 0.5); newOption('popupDelay', 0.5);
newOption('popupFgColor', "'#CCCCFF'");
newOption('popupBgColor', "'#333399'");
newOption('removeTitles', true); newOption('removeTitles', true);
newOption('imagePopupsForImages', true); newOption('imagePopupsForImages', true);
Line 231: Line 288:
newOption('popupImages', true); newOption('popupImages', true);
newOption('popupPreviews', true); newOption('popupPreviews', true);
newOption('maxPreviewSentences', 4); newOption('popupMaxPreviewSentences', 4);
newOption('maxPreviewCharacters', 600); newOption('popupMaxPreviewCharacters', 600);
newOption('popupNavLinks', true); newOption('popupNavLinks', true);
newOption('popupNavLinkSeparator', "' &sdot; '"); newOption('popupNavLinkSeparator', "' &sdot; '");
Line 242: Line 299:
newOption('popupSimplifyMainLink', true); newOption('popupSimplifyMainLink', true);
newOption('popupMinImageWidth', 50); newOption('popupMinImageWidth', 50);
newOption('popupLastEditLink', true);

newOption('popupHistoricalLinks', true);
newOption('popupFixRedirs', true);
newOption('popupLiveOptions', false);
newOption('popupCookies', false);
newOption('popupUnsimplifyLink', false);


// browser-specific hacks // browser-specific hacks
Line 319: Line 381:
}; };


function articleFromAnchor(a) { function articleFromURL(h) {

// log('articleFromAnchor');
if (typeof h != 'String') h=String(h);
var h=a.href;
var article=null; var article=null;
// log('h='+h);


var contribs=contributions.exec(h); var contribs=contributions.exec(h);
Line 344: Line 406:
article=m; article=m;
return article; return article;
};

function articleFromAnchor(a) {
// log('articleFromAnchor');
var h=a.href;
return articleFromURL(h);
}; };


Line 370: Line 438:
hint = safeDecodeURI(article); hint = safeDecodeURI(article);


var oldid=oldidFromAnchor(a); var oldid=null;
defaultize('popupHistoricalLinks');
if (popupHistoricalLinks)
oldid=oldidFromAnchor(a);

defaultize('popupNavLinks'); defaultize('popupNavLinks');
Line 376: Line 448:
html += navLinksHTML(article, hint, oldid); html += navLinksHTML(article, hint, oldid);


defaultize('popupUnsimplifyLink');
html += emptySpanHTML('popupWarnRedir', popupImageId);
if (popupUnsimplifyLink)
html += emptySpanHTML('popupGubbins' , popupImageId);
html += emptySpanHTML('popupPreview' , popupImageId); html += popupUnsimplifyHTML();


html += emptySpanHTML('popupWarnRedir', popupImageId);
html += emptySpanHTML('popupGubbins' , popupImageId);
html += emptySpanHTML('popupLiveOptions', popupImageId);
html += emptySpanHTML('popupPreview' , popupImageId);
return html; return html;
}; };

function popupUnsimplifyHTML() {
var html = '';
html += '<span id="popupUnsimplifySpan' + popupImageId + '">';
html += '<br>';
html += '<span onClick="javascript:popupUnsimplify()" '
+ 'style="cursor:pointer; border: thin dotted black" '
+ 'title="Download preview data from the Misplaced Pages servers">'
+ 'Get preview data'
+ '</span>';
html += '</span>';
return html;
};

function popupUnsimplify() {
};




function isIpUser(user) { function isIpUser(user) {
return ipUserRegex.test(user); return ipUserRegex.test(user);
};

function popupToggleVar(varstring) {
defaultize(varstring);
eval('window.'+varstring+'=!window.' + varstring);
defaultize('popupCookies');
if (popupCookies) {
createCookie(varstring, String(eval(varstring)));
}
};

newOption('popupLiveOptionsExpanded', false);

function popupToggleShowOptions (dummy) {
defaultize('popupLiveOptionsExpanded');
if (!dummy) window.popupLiveOptionsExpanded=!window.popupLiveOptionsExpanded;
setPopupHTML((window.popupLiveOptionsExpanded) ? '&lt;&lt;' : '&gt;&gt;',
'optionPopped');
var s=document.getElementById('popupOptionsDiv');
// if (!s) return;
if (window.popupLiveOptionsExpanded) s.style.display='inline';
else s.style.display='none';
};

function popupOptionsCheckboxHTML(varstring, label, title) {
var html='<br>';
html += '<span title="'+title+'">';
html += '<input type="checkbox" id="'+varstring+'Checkbox" ';
html += (eval(varstring)) ? 'checked="checked" ' : '';
html += 'onClick="javascript:popupToggleVar(' + "'" + varstring + "'" +
')">' + label + '</input></span>';
return html;
};

function popupLiveOptionsHTML() {
defaultize('simplePopups');
defaultize('popupUnsimplifyLink');
var html = '';
html += '<br>';
html += '<span title="Show/hide options" ';
html += 'style="border: thin dotted black; cursor: pointer" ';
html += 'onClick="javascript:popupToggleShowOptions()">';
html += 'Options <span id="optionPopped' + popupImageId
+ '"></span>';
html += '</span>';
html += '<div style="display: none" id="popupOptionsDiv">';
html += popupOptionsCheckboxHTML('simplePopups', 'Simple popups',
'Never download extra stuff for images/previews');
html += popupOptionsCheckboxHTML('popupUnsimplifyLink', 'Preview only on click',
'Only start downloading when told to do so');
//html += popupOptionsCheckboxHTML('popupCookies', 'cookies',
// 'Use cookies to store popups options');
html += popupOptionsCheckboxHTML('popupNavLinks', 'Show navigation links',
'Display navigation links at the top of the popup');
html += popupOptionsCheckboxHTML('popupImages', 'Show image previews',
'Load images');
html += popupOptionsCheckboxHTML('popupSummaryData', 'Show summary data',
'Show page summary data');
html += popupOptionsCheckboxHTML('popupPreviews', 'Show text previews',
'Show previews');
var extraOptions=[
'imagePopupsForImages',
'popupAdminLinks',
'popupAppendRedirNavLinks',
'popupCookies',
'popupFixRedirs',
'popupHistoricalLinks',
'popupImagesFromThisWikiOnly',
'popupLastEditLink',
'popupLiveOptions',
'popupNeverGetThumbs',
'popupOnlyArticleLinks',
'popupSimplifyMainLink',
'removeTitles' // no ,
];
for (var i=0; i<extraOptions.length; ++i) {
html += popupOptionsCheckboxHTML(extraOptions, extraOptions,
'Toggle this option');
}

html += '</div>';
return html;
}; };


Line 402: Line 581:
if (typeof hint =='undefined') hint=safeDecodeURI(article); if (typeof hint =='undefined') hint=safeDecodeURI(article);
if (oldid) hint += ' oldid='+oldid; if (oldid) hint = 'Revision '+ oldid +' of ' + hint;
html+='<b>'; html+='<b>';
html+=titledWikiLink(article, 'view', visibleMainLinkText, hint, oldid); html+=titledWikiLink(article, 'view', visibleMainLinkText, hint, oldid);
if (oldid)
html+='|' + titledWikiLink(article, 'view', 'cur',
'Current revision of '+visibleMainLinkText);
html+='</b>'; html+='</b>';

defaultize('popupLastEditLink');
if (popupLastEditLink) {
html += popupNavLinkSeparator
+ titledDiffLink(article, 'lastEdit',
'Show the last edit made to '+visibleMainLinkText,
'prev', 'cur');
}
if (oldid) {
if (popupLastEditLink) html += '|';
else html += popupNavLinkSeparator;
html += titledDiffLink(article, 'oldEdit',
'Show the edit made to get revision '+ oldid,
'prev', oldid);
html += '|' + titledDiffLink(article, 'diffCur',
'Show differences between revision '+oldid
+' and the current revision',
oldid, 'cur');
}
return html; return html;
}; };
Line 443: Line 646:
if (t) { if (t) {
// it's not a talk page // it's not a talk page
html += wikiLink(article, 'edit', 'edit', oldid); if (oldid) {
html += wikiLink(article, 'edit', 'editOld', oldid)
+ '|' + wikiLink(article, 'edit', 'cur', null);
} else {
html += wikiLink(article, 'edit', 'edit');
}
html += popupNavLinkSeparator + wikiLink(article, 'history', 'history'); html += popupNavLinkSeparator + wikiLink(article, 'history', 'history');
html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un') html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un')
Line 455: Line 664:
if (!ta) return reportErrorHTML('Not a talk page and not an article.'); if (!ta) return reportErrorHTML('Not a talk page and not an article.');
// it's a talk page // it's a talk page
html += wikiLink(article, 'edit', 'edit', oldid) if (oldid) {
html += wikiLink(article, 'edit', 'editOld', oldid)
+'|' + wikiLink(article, 'edit&section=new', 'new'); + '|' + wikiLink(article, 'edit', 'cur', null);
} else {
html += wikiLink(article, 'edit', 'edit');
}
html += '|' + wikiLink(article, 'edit&section=new', 'new');
html += popupNavLinkSeparator + wikiLink(article, 'history', 'history'); html += popupNavLinkSeparator + wikiLink(article, 'history', 'history');
html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un') html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un')
Line 488: Line 702:
function navLinksHTML (article, hint, oldid) { function navLinksHTML (article, hint, oldid) {
var html=''; var html='';

defaultize('popupNavLinkSeparator');


html += mainLinkHTML(article, hint, oldid); html += mainLinkHTML(article, hint, oldid);
Line 497: Line 713:
html+=emptySpanHTML('popupImageStatus', popupImageId); html+=emptySpanHTML('popupImageStatus', popupImageId);


defaultize('popupNavLinkSeparator');
defaultize('popupAdminLinks'); defaultize('popupAdminLinks');


Line 636: Line 851:


function getWiki(wikipage, onComplete, oldid) { function getWiki(wikipage, onComplete, oldid) {
// set global variable (ugh) to holdwikipage
window.currentArticle=wikipage;
// log('getWiki, wikipage='+wikipage); // log('getWiki, wikipage='+wikipage);
// set ctype=text/css to get around opera bug // set ctype=text/css to get around opera bug
Line 699: Line 916:
// LINK GENERATION // // LINK GENERATION //
///////////////////// /////////////////////

function titledDiffLink(article, text, title, from, to) {
return titledWikiLink(article,
to + '&oldid=' + from,
text,
title,
null,
'diff');
};


function wikiLink(article, action, text, oldid) { function wikiLink(article, action, text, oldid) {
Line 720: Line 946:
var hint; var hint;
if (prehint != null) { if (prehint != null) {
if (oldid) prehint += 'revision '+oldid +' of ';
hint=prehint + safeDecodeURI(article); hint=prehint + safeDecodeURI(article);
hint += (oldid) ? ' oldid='+oldid : '';
} }
else hint = safeDecodeURI(article + '&action=' + action) else hint = safeDecodeURI(article + '&action=' + action)
Line 728: Line 954:
}; };


function titledWikiLink(article, action, text, title, oldid) { function appendParamsToLink(linkstr, params) {
var sp=linkstr.parenSplit(RegExp('(href="+?)"', 'i'));
if (sp.length<2) return null;
var ret=sp.shift() + sp.shift();
ret += '&' + params + '"';
ret += sp.join('');
return ret;
};

function titledWikiLink(article, action, text, title, oldid, actionName) {
var base = titlebase + article; var base = titlebase + article;
var url=base; var url=base;
// no need to add action&view, and this confuses anchors // no need to add action&view, and this confuses anchors
if (typeof actionName=='undefined' || actionName=='') {
if (action != 'view') url = base + '&action=' + action;
actionName='action';
}
if (action != 'view') url = base + '&' + actionName + '=' + action;


var hint=''; var hint='';
Line 762: Line 1,000:
else hint = safeDecodeURI(specialpage+':'+article) ; else hint = safeDecodeURI(specialpage+':'+article) ;
return '<a href="' + url + '" title="' + hint + '">' + text + '</a>'; return '<a href="' + url + '" title="' + hint + '">' + text + '</a>';
};

function literalizeRegex(str){
return str.replace(RegExp('(])', 'g'), '\\$1');
}; };


Line 769: Line 1,011:
defaultize('popupAppendRedirNavLinks'); defaultize('popupAppendRedirNavLinks');
defaultize('popupNavLinks'); defaultize('popupNavLinks');
defaultize('popupFixRedirs');
var ret='';


if (popupAppendRedirNavLinks && popupNavLinks) if (popupAppendRedirNavLinks && popupNavLinks) {
return '<hr>' + 'Redirects to ' + ret += '<hr>';
if (popupFixRedirs && typeof autoEdit != 'undefined' && autoEdit) {
navLinksHTML(wikiMarkupToAddressFragment(redirMatch));
// this'll break if charAt(0) is nasty
var cA=literalizeRegex(decodeURI(window.currentArticle));
var chs=cA.charAt(0).toUpperCase();
chs='';
var currentArticleRegexBit=chs+cA.substring(1);
currentArticleRegexBit=currentArticleRegexBit
.split(RegExp('', 'g')).join('');
/* alert('window.currentArticle='+window.currentArticle + */
/* '\ncA='+cA + */
/* '\ncurrentArticleRegexBit='+currentArticleRegexBit); */

// autoedit=s~\ad)\]\]~]~g;s~\AD)~[[Computer-aided%20design|~g
var lk=titledWikiLink(removeAnchor(articleFromURL(document.location)),
'edit', 'Redirects',
'Fix this redirect');
var cmd='s~\\\\]~]~g;';
cmd += 's~\\~[['+redirMatch+'|~g';
cmd += '&autoclick=wpDiff';
cmd += '&autominor=true';
cmd += '&autosummary=Bypassing redirect from [[' + window.currentArticle.split('_').join(' ')
+ ']] to ]';
ret += appendParamsToLink(lk, 'autoedit='+cmd);
ret += ' to ';
}
else ret += 'Redirects to ';

ret += navLinksHTML(wikiMarkupToAddressFragment(redirMatch));
return ret;
}
else return '<br> Redirects to ' + else return '<br> Redirects to ' +
Line 845: Line 1,121:
var num=countCategories(data); var num=countCategories(data);
return String(num) + '&nbsp;categor' + ((num!=1)?'ies':'y'); return String(num) + '&nbsp;categor' + ((num!=1)?'ies':'y');
} };


var popupFilters=new Array(); var popupFilters=new Array();
Line 1,057: Line 1,333:
var ret=myDecodeURI(str); var ret=myDecodeURI(str);
return ret || str; return ret || str;
} };


function myEncodeURI (str) { function myEncodeURI (str) {
Line 1,208: Line 1,484:
}; };


function setPopupHTML (str, elementId, popupId) { function setPopupHTML (str, elementId, popupId, onSuccess) {
if (typeof popupId === 'undefined') popupId = popupImageId; if (typeof popupId === 'undefined') popupId = popupImageId;
var popupElement= var popupElement=
Line 1,225: Line 1,501:
popupHTMLTimers=null; popupHTMLTimers=null;
popupElement.innerHTML=str; popupElement.innerHTML=str;
if (onSuccess) onSuccess();
return true; return true;
} else { } else {
var loopFunction=function() { setPopupHTML(str,elementId,popupId);} var loopFunction=function() { setPopupHTML(str,elementId,popupId,onSuccess);}
popupHTMLLoopFunctions = loopFunction; popupHTMLLoopFunctions = loopFunction;
if (!timer) { if (!timer) {
Line 1,443: Line 1,720:


defaultize('popupDelay'); defaultize('popupDelay');
defaultize('popupFgColor');
defaultize('popupBgColor');
defaultize('popupImages'); defaultize('popupImages');
defaultize('popupMaxWidth'); defaultize('popupMaxWidth');
Line 1,468: Line 1,743:
} }

// add CSS class to table
window.addPopupStylesheetClasses = function () {
var tables=over.getElementsByTagName('table');
tables.className='popupBorderTable';
tables.className='popupTable';
var fonts=over.getElementsByTagName('font');
fonts.className='popupFont';
};
registerHook("createPopup", window.addPopupStylesheetClasses, FAFTER);


overlib(html, STICKY, WRAP, CELLPAD, 5, OFFSETX, 2, OFFSETY, 2, overlib(html, STICKY, WRAP, CELLPAD, 5, OFFSETX, 2, OFFSETY, 2,
DELAY, popupDelay*1000, FGCOLOR, popupFgColor, BGCOLOR, popupBgColor); DELAY, popupDelay*1000);
defaultize('popupLiveOptions');
if (popupLiveOptions) {
setPopupHTML(popupLiveOptionsHTML(), 'popupLiveOptions', popupImageId,
function () { popupToggleShowOptions(true); } );
}

defaultize('simplePopups'); defaultize('simplePopups');
if(simplePopups) return; if(simplePopups) return;


defaultize('imagePopupsForImages');


window.popupUnsimplify = function () {
var previewImage=true;
defaultize('imagePopupsForImages');
var previewImage=true;
gImage=null;
if (isImage(article) && ( imagePopupsForImages || ! anchorContainsImage(a) )) {
loadImages(article);
}
else if (!isImage(article) && previewImage) {
redirCount=0;
loadPreviewImage(article, oldid);
}


var s=document.getElementById('popupUnsimplifySpan' + popupImageId);
gImage=null;
if (s && s.style) {
s.style.display='none';
}
};


defaultize('popupUnsimplifyLink');
if (isImage(article) && ( imagePopupsForImages || ! anchorContainsImage(a) )) {
if (popupUnsimplifyLink) {
loadImages(article);
return;
}
else if (!isImage(article) && previewImage) {
redirCount=0;
loadPreviewImage(article, oldid);
} }

window.popupUnsimplify();
}; };


Line 1,567: Line 1,876:
// FIXME: horizonal rules should be skipped // FIXME: horizonal rules should be skipped
// FIXME: get rid of html tagsx // FIXME: get rid of html tagsx
if (!download || typeof download.data=='undefined'
|| typeof download.data.length=='undefined') return;
if (localTest) if (localTest)
var data = download.substring(0,8000); // FOR TESTING var data = download.substring(0,8000); // FOR TESTING
else else {
if (!download || typeof download.data=='undefined'
|| typeof download.data.length=='undefined') return;
var data=download.data.substring(0,10000); // huge pages be gone var data=download.data.substring(0,10000); // huge pages be gone
}
var datum=new Array(); var datum=new Array();
datum.push(data.substring(0,1000)); datum.push(data.substring(0,1000));
Line 1,598: Line 1,908:
data=data.replace(RegExp('<!--(\\n|.)*?-->', 'g'), ''); data=data.replace(RegExp('<!--(\\n|.)*?-->', 'g'), '');


// say goodbye, divs // say goodbye, divs (can be nested, so use * not *?)
data=data.replace(RegExp('< *div* *>(.|\\n)*< */ *div *>', data=data.replace(RegExp('< *div* *>(.|\\n)*< */ *div *>',
'gi'), ''); 'gi'), '');
// and galleries // and galleries


data=data.replace(RegExp('< *gallery* *>(.|\\n)*< */ *gallery *>', data=data.replace(RegExp('< *gallery* *>(.|\\n)*?< */ *gallery *>',
'gi'), 'gi'),
''); '');


// taxobox hack... in fact, there's a saudiprincebox_begin, so let's be more general // taxobox hack... in fact, there's a saudiprincebox_begin, so let's be more general
data=data.replace(RegExp('*box_begin(.|\\n)**box_end *', data=data.replace(RegExp('*boxbegin' +
'(.|\\n)**boxend *',
'gi'), '');

// float_begin, ... float_end
data=data.replace(RegExp('*floatbegin' +
'(.|\\n)**floatend.*?',
'gi'), ''); 'gi'), '');
Line 1,619: Line 1,935:
, ''); , '');
datum.push(data.substring(0,1000)); datum.push(data.substring(0,1000));

// remove lines starting with a pipe
data=data.replace(RegExp('^.*$', 'mg'), '');



// images are a nono // images are a nono
Line 1,645: Line 1,965:
//data=data.replace(RegExp('<table*>(||<|</|'+ //data=data.replace(RegExp('<table*>(||<|</|'+
// may this is good enough? // may this is good enough?
data=data.replace(RegExp('<table*>(.|\\n.)*\\n?</ *table *>\\n+', 'gi'), data=data.replace(RegExp('<table.*?>(.|\\n.)*?\\n?</ *table *>\\n+', 'gi'),
''); '');
// let's delete lines starting with <. it's worth a try. // let's delete lines starting with <. it's worth a try.
data=data.replace(RegExp('(^|\\n) *<*', 'g'), '\n'); data=data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n');


// and those pesky html tags // and those pesky html tags
data=data.replace(RegExp('<*>','g'),''); data=data.replace(RegExp('<.*?>','g'),'');


// chunks of italic text? you crazy, man? // chunks of italic text? you crazy, man?
Line 1,661: Line 1,981:
data=data.replace(italicChunkRegex, ''); data=data.replace(italicChunkRegex, '');
// return data; //TESTING //return data; //TESTING


// replace __TOC__, __NOTOC__ and whatever else there is // replace __TOC__, __NOTOC__ and whatever else there is
Line 1,675: Line 1,995:
data=data.replace(RegExp('() *\\n{2,}', 'g'), '$1\n'); data=data.replace(RegExp('() *\\n{2,}', 'g'), '$1\n');


stuff=(RegExp('^\\s*(|\\n)*')).exec(data); data=data.replace(RegExp('^*'), '');
stuff=(RegExp('^(|\\n)*')).exec(data);
if (stuff) if (stuff)
data = stuff; data = stuff;
Line 1,683: Line 2,004:


// superfluous sentences are RIGHT OUT. // superfluous sentences are RIGHT OUT.
// note: 1 set of parens here needed to make the slice work // note: exactly 1 set of parens here needed to make the slice work
data = data.parenSplit(RegExp('(+*\\s)','g')); data = data.parenSplit(RegExp('(+*\\s)','g'));
// leading space is bad, mmkay? // leading space is bad, mmkay?
Line 1,695: Line 2,016:
data = fixSentenceEnds(data, notSentenceEnds); data = fixSentenceEnds(data, notSentenceEnds);


defaultize('maxPreviewSentences'); defaultize('popupMaxPreviewSentences');
defaultize('maxPreviewCharacters'); defaultize('popupMaxPreviewCharacters');
var n=maxPreviewSentences; var n=popupMaxPreviewSentences;
var d; var d;
do {d=firstSentences(data,n); --n; } do {d=firstSentences(data,n); --n; }
while ( d.length > maxPreviewCharacters && n > 0 ); while ( d.length > popupMaxPreviewCharacters && n > 0 );
data = d; data = d;
Line 1,751: Line 2,072:
var left = parseInt(over.style.left); var left = parseInt(over.style.left);
var top = parseInt(over.style.top); var top = parseInt(over.style.top);
var right = left + (over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width)); var right = left +
(over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width));
var bottom = top + (over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight); var bottom = top +
(over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight);

if (o3_x < left-fuzz || o3_x > right+fuzz || o3_y < top-fuzz || o3_y > bottom + fuzz) return true; if (o3_x < left-fuzz || o3_x > right+fuzz || o3_y < top-fuzz || o3_y > bottom + fuzz)
return true;
return false; return false;
} };


// seems that fuzzyCursorOff should precede mouseOutWikiLink in the source // seems that fuzzyCursorOff should precede mouseOutWikiLink in the source
Line 1,803: Line 2,126:
} }
else { else {
window._old_ABCD_onload = window.onload; window._old_popup_onload = window.onload;
window.onload = function() { window.onload = function() {
window._old_ABCD_onload(); window._old_popup_onload();
setupTooltips(); setupTooltips();
} }
Line 1,813: Line 2,136:
/// mode:c /// /// mode:c ///
/// End: /// /// End: ///
// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY--
function getParamValue(paramName) {
var cmdRe=RegExp(''+paramName+'=(*)');
var h=document.location;
var m;
if (m=cmdRe.exec(h)) {
try {
return decodeURI(m);
} catch (someError) {}
}
return null;
};

function substitute(data,cmdBody) {
// alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags);
var fromRe=RegExp(cmdBody.from, cmdBody.flags);
return data.replace(fromRe, cmdBody.to);
};

function execCmds(data, cmdList) {
for (var i=0; i<cmdList.length; ++i) {
data=cmdList.action(data, cmdList);
}
return data;
}

function parseCmd(str) {
// returns a list of commands
if (!str.length) return ;
var p=false;
switch (str.charAt(0)) {
case 's':
p=parseSubstitute(str);
break;
case 'j':
p=parseJavascript(str);
break;
default:
return false;
}
if (p) return .concat(parseCmd(p.remainder));
return false;
};

function unEscape(str, sep) {
return str.split('\\\\').join('\\')
.split('\\'+sep).join(sep)
.split('\\n').join('\n');
};


function runJavascript(data, argWrapper) {
// flags aren't used (yet)

// from the user's viewpoint,
// data is a special variable may appear inside code
// and gets assigned the text in the edit box

// alert('eval-ing '+argWrapper.code);

return eval(argWrapper.code);
};

function parseJavascript(str) {
// takes a string like j/code/;othercmds and parses it

var tmp,code,flags;

if (str.length<3) return false;
var sep=str.charAt(1);
str=str.substring(2);
tmp=skipOver(str,sep);
if (tmp) { code=tmp.segment.split('\n').join('\\n'); str=tmp.remainder; }
else return false;

flags='';
if (str.length) {
tmp=skipOver(str,';') || skipToEnd(str, ';');
if (tmp) {flags=tmp.segment; str=tmp.remainder; }
}

return { action: runJavascript, code: code, flags: flags, remainder: str };
};

function parseSubstitute(str) {
// takes a string like s/a/b/flags;othercmds and parses it

var from,to,flags,tmp;

if (str.length<4) return false;
var sep=str.charAt(1);
str=str.substring(2);

tmp=skipOver(str,sep);
if (tmp) { from=tmp.segment; str=tmp.remainder; }
else return false;

tmp=skipOver(str,sep);
if (tmp) { to=tmp.segment; str=tmp.remainder; }
else return false;

flags='';
if (str.length) {
tmp=skipOver(str,';') || skipToEnd(str, ';');
if (tmp) {flags=tmp.segment; str=tmp.remainder; }
}
return {action: substitute, from: from, to: to, flags: flags, remainder: str};

};

function skipOver(str,sep) {
var endSegment=findNext(str,sep);
if (endSegment<0) return false;
var segment=unEscape(str.substring(0,endSegment), sep);
return {segment: segment, remainder: str.substring(endSegment+1)};
}

function skipToEnd(str,sep) {
return {segment: str, remainder: ''};
}

function findNext(str, ch) {
for (var i=0; i<str.length; ++i) {
if (str.charAt(i)=='\\') i+=2;
if (str.charAt(i)==ch) return i;
}
return -1;
};

function runOnLoad(f) {
if (window.addEventListener) {
window.addEventListener("load",f,false);
}
else if (window.attachEvent) {
window.attachEvent("onload",f);
}
else {
window._old_popup_autoedit_onload = window.onload;
window.onload = function() {
window._old_popup_autoedit_onload();
f();
}
}
};

function autoEdit() {

var cmdString=getParamValue('autoedit');
if (cmdString) {
try {
var editbox=document.editform.wpTextbox1;
} catch (dang) { return; }
var cmdList=parseCmd(cmdString);
var input=editbox.value;
var output=execCmds(input, cmdList);
editbox.value=output;
}

var summary=getParamValue('autosummary');
if (summary) document.editform.wpSummary.value=summary;

var minor=getParamValue('autominor');
if (minor) {
switch (minor) {
case '1':
case 'yes':
case 'true':
document.editform.wpMinoredit.checked=true;
break;
case '0':
case 'no':
case 'false':
document.editform.wpMinoredit.checked=false;
}
}

var btn=getParamValue('autoclick');
if (btn) {
if (document.editform && eval('document.editform.'+btn)) {
var headings=document.getElementsByTagName('h1');
if (headings) {
var div=document.createElement('div');
var button=eval('document.editform.'+btn);
div.innerHTML='<font size=+1><b>The "' + button.value +
'" button has been automatically clicked.' +
' Please wait for the next page to load.</b></font>';
document.title='('+document.title+')';
headings.parentNode.insertBefore(div, headings);
button.click();
}
} else {
alert('autoedit.js\n\nautoclick: could not find button "'+ btn +'".');
}
}
};

runOnLoad(autoEdit);
// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY--
// Last update: 21:51, 15 Feb 2005 (UTC)

// Script to embed Live Preview in MediaWiki's edit page
function LivePreviewInstall()
{
copywarn = document.getElementById('editpage-copywarn');
if (copywarn != null) {
var cleaner = "<br style=\\'clear:both;\\' />";
LivePreviewHTML = '<input type="button" value="Live Preview" onclick="document.getElementById(\'PreviewBox\').innerHTML = wiki2html(editform.wpTextbox1.value) + \'' + cleaner + '\';" />';
//LivePreviewHTML = '<input type="button" value="Live Preview" onclick="document.getElementById(\'PreviewBox\').innerHTML = wiki2html(editform.wpTextbox1.value);" />';
LivePreviewHTML += '<div style="margin-top: 5px; margin-bottom: 5px; padding: 5px; border: 3px double orange;" id="PreviewBox"></div>';
copywarn.innerHTML = LivePreviewHTML + copywarn.innerHTML;
}
}

// User options
var wpUserName=wpUserName||'Wikipedian';
var wpUserSignature=wpUserSignature||wpUserName;
var wpShowImages=wpShowImages||true;

// System options
var wpLanguageCode=wpLanguageCode||'en';
var wpInterwikiCodes=wpInterwikiCodes||'ab|aa|af|ak|sq|als|am|ang|ar|an|arc|hy|roa-rup|as|ast|av|ay|az|bm|ba|eu|be|bn|bh|bi|bs|br|bg|my|ca|ch|ce|chr|chy|ny|zh|zh-tw|zh-cn|cho|cv|kw|co|cr|hr|cs|da|dv|nl|dz|en|eo|et|ee|fo|fj|fi|fr|fy|ff|gl|ka|de|got|el|kl|gn|gu|ht|ha|haw|he|hz|hi|ho|hu|is|io|ig|id|ia|ie|iu|ik|ga|it|ja|jv|kn|kr|csb|ks|kk|km|ki|rw|rn|tlh|kv|kg|ko|kj|ku|ky|lo|la|lv|li|ln|lt|jbo|nds|lg|lb|mk|mg|ms|ml|mt|gv|mi|minnan|mr|mh|zh-min-nan|mo|mn|mus|nah|na|nv|ne|se|no|nn|oc|or|om|pi|fa|pl|pt|pa|ps|qu|ro|rm|ru|sm|sg|sa|sc|gd|sr|sh|st|tn|sn|scn|simple|sd|si|sk|sl|so|st|es|su|sw|ss|sv|tl|ty|tg|ta|tt|te|th|bo|ti|tpi|to|tokipona|ts|tum|tr|tk|tw|uk|ur|ug|uz|ve|vi|vo|wa|cy|wo|xh|ii|yi|yo|za|zu';
var wpBaseArticlePath=wpBaseArticlePath||'/';
var wpMathBasePath=wpMathBasePath||'/math/';
var wpImageBasePath=wpImageBasePath||'http://upload.wikimedia.org/wikipedia/'+wpLanguageCode+'/';
var wpImageFallbackPath=wpImageFallbackPath||'http://upload.wikimedia.org/wikipedia/commons/';
var wpDefaultThumbWidth=wpDefaultThumbWidth||180;
var wpSkinMagnifyClip=wpSkinMagnifyClip||'/skins/common/images/magnify-clip.png';
var wpUserNamespace=wpUserNamespace||'User';
var wpImageNamespace=wpImageNamespace||'Image';
var wpCategoryNamespace=wpCategoryNamespace||'Category';

// Packed code (DO NOT MODIFY)
function wiki2html(str)
{str=strip_cr(str);var w=new WikiCode();w.lines=str.split(/\n/);w.parse();return w.html;};var wpSignature=']';var wpBlockImage=new RegExp('^\\[\\['+wpImageNamespace+':.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)','i');function WikiCode()
{this.lines=new Array;this.html=new String;this._endline=function(str)
{this.html+=str;this.lines.shift();};this.parse=function()
{var p=false;do{if(h_match=this.lines.match(/^(={1,6})(.*)\1(.*)$/)){p=false;this._endline('<h'+h_match.length+'>'+_parse_inline_nowiki(h_match)+'</h'+h_match.length+'>'+h_match);}else if(this.lines.match(/^/)){p=false;this._parse_list();}else if(this.lines.charAt(0)==' '){p=false;this._parse_pre();}else if(this.lines.substr(0,2)=='{|'){p=false;this._parse_table();}else if(this.lines.match(/^----+$/)){p=false;this._endline('<hr/>');}else if(this.lines.match(wpBlockImage)){p=false;this._parse_block_image();}else{if(this.lines==''){if(p=(this.lines.length>1&&this.lines=='')){this._endline('<p><br />');}}else{if(!p){this.html+='<p>';p=true;}
this.html+=_parse_inline_nowiki(this.lines)+' ';}
this.lines.shift();}}while(this.lines.length);};this._parse_list=function(){var prev=new String;var l_match,imatch,dt_match;while(this.lines.length&&(l_match=this.lines.match(/^(+)(.*)$/))){this.lines.shift();imatch=str_imatch(prev,l_match);for(var i=prev.length-1;i>=imatch;i--){if(prev.charAt(i)=='*'){this.html+='</ul>';}else if(prev.charAt(i)=='#'){this.html+='</ol>'}else{this.html+='</d'+((prev.charAt(i)==';')?'t':'d')+'>';switch(l_match.charAt(i)){case'':case'*':case'#':this.html+='</dl>';}}}
for(var i=imatch;i<l_match.length;i++){if(l_match.charAt(i)=='*'){this.html+='<ul>';}else if(l_match.charAt(i)=='#'){this.html+='<ol>';}else{switch(prev.charAt(i)){case'':case'*':case'#':this.html+='<dl>';}
this.html+='<d'+((l_match.charAt(i)==';')?'t':'d')+'>';}}
switch(l_match.charAt(l_match.length-1)){case'*':case'#':this.html+='<li>'+_parse_inline_nowiki(l_match);break;case';':if(dt_match=l_match.match(/(.*?) (:.*?)$/)){this.html+=_parse_inline_nowiki(dt_match);this.lines.unshift(dt_match);break;}
case':':this.html+=_parse_inline_nowiki(l_match);}
prev=l_match;}
for(i=prev.length-1;i>=0;i--){if(prev.charAt(i)=='*'){this.html+='</ul>';}else if(prev.charAt(i)=='#'){this.html+='</ol>';}else{this.html+='</d'+((prev.charAt(i)==';')?'t':'d')+'></dl>';}}};this._parse_table=function()
{var table_match;if(table_match=this.lines.match(/^\{\|( .*)$/)){this._endline('<table'+table_match+'>');}else this._endline('<table>');do{if(this.lines.charAt(0)=='|'){switch(this.lines.charAt(1)){case'}':this._endline('</table>');return;case'-':this._endline('<tr '+this.lines.match(/\|-*(.*)/)+'>');break;default:this._parse_table_data();}}else if(this.lines.charAt(0)=='!'){this._parse_table_data();}else{this.lines.shift();}}while(this.lines.length)};this._parse_table_data=function()
{var td_match,td_line;td_match=this.lines.shift().match(/^(\|\+|\||!)((?:(*?)\|(?!\|))?(.*))$/);if(td_match=='|+'){this.html+='<caption';}else{this.html+='<t'+((td_match=='|')?'d':'h');}
if(typeof td_match!='undefined'){this.html+=' '+td_match;td_line=td_match.split('||');}else{td_line=td_match.split('||');}
this.html+='>';while(td_line.length>1){this.lines.unshift(td_match+td_line.pop());}
this.html+=_parse_inline_nowiki(td_line);var td=new WikiCode;var table_count=0;while(this.lines.length){if(this.lines.charAt(0)=='|'){if(table_count==0)break;else if(this.lines.charAt(1)=='}')table_count--;}else if(this.lines.charAt(0)=='!'&&table_count==0){break;}else if(this.lines.substr(0,2)=='{|')table_count++;td.lines.push(this.lines.shift());}
if(td.lines.length){td.parse();}
this.html+=td.html;};this._parse_pre=function()
{this.html+='<pre>';do{this._endline(_parse_inline_nowiki(this.lines.substring(1,this.lines.length))+"\n");}while(this.lines.length&&this.lines.charAt(0)==' ');this.html+='</pre>';};this._parse_block_image=function()
{this.html+=_parse_image(this.lines.shift());};};function _parse_image(str)
{var attr=str.substring(wpImageNamespace.length+3,str.length-2).split(/\s*\|\s*/);var filename=attr;var caption=attr;var width,w_match;var thumb=false;var frame=false;var center=false;var align='';var html='';do{if(w_match=attr.match(/^(\d*)px$/)){width=w_match;}else switch(attr){case'thumb':case'thumbnail':thumb=true;case'frame':frame=true;break;case'none':case'right':case'left':center=false;align=attr;break;case'center':center=true;align='none';}
attr.shift();}while(attr.length);if(frame){if(align=='')align='right';html+="<div class='thumb t"+align+"'>";if(thumb){if(!width)width=wpDefaultThumbWidth;html+="<div style='width:"+(2+parseInt(width))+"px;'>";html+=_make_image(filename,caption,width);html+="<div class='thumbcaption'><div class='magnify' style='float:right'><a href='"+wpBaseArticlePath+wpImageNamespace+':'+filename+"' class='internal' title='Enlarge'><img src='"+wpSkinMagnifyClip+"' /></a></div>"+_parse_inline_nowiki(caption)+"</div>";}else{html+='<div>';html+=_make_image(filename,caption);html+="<div class='thumbcaption'>"+_parse_inline_nowiki(caption)+"</div>";}
html+='</div></div>';}else if(align!=''){html+="<div class='float"+align+"'><span>"+_make_image(filename,caption,width)+"</span></div>";}else{return _make_image(filename,caption,width);}
if(center){return"<div class='center'>"+html+'</div>';}else{return html;}};this._parse_inline_nowiki=function(str)
{var start,lastend=0
var substart=0,nestlev=0,open,close,subloop;var html='';while(-1!=(start=str.indexOf('<'+'nowiki>',substart))){html+=_parse_inline_wiki(str.substring(lastend,start));start+=8;substart=start;subloop=true;do{open=str.indexOf('<'+'nowiki>',substart);close=str.indexOf('</nowiki>',substart);if(close<=open||open==-1){if(close==-1){return html+html_entities(str.substr(start));}
substart=close+9;if(nestlev){nestlev--;}else{lastend=substart;html+=html_entities(str.substring(start,lastend-9));subloop=false;}}else{substart=open+8;nestlev++;}}while(subloop);}
return html+_parse_inline_wiki(str.substr(lastend));};function _make_image(filename,caption,width)
{filename=filename.charAt(0).toUpperCase()+filename.substr(1);filename=filename.replace(/ /g,'_');var md5=hex_md5(filename);var source=md5.charAt(0)+'/'+md5.substr(0,2)+'/'+filename;var img;if(wpShowImages){if(width){width="width='"+width+"px'";}
img="<img onerror='this.onerror=null;this.src=\""+wpImageFallbackPath+source+"\";' src='"+wpImageBasePath+source+"' alt='"+caption+"' "+width+"/>";}else{img=wpImageNamespace+':'+filename+" <em style='color:red;'>(images disabled)</em>";}
caption=_strip_inline_wiki(caption);return"<a class='image' title='"+caption+"' href='"+wpBaseArticlePath+wpImageNamespace+':'+filename+"'>"+img+"</a>";};function _parse_inline_images(str)
{var start,substart=0,nestlev=0;var loop,close,open,wiki,html;while(-1!=(start=str.indexOf(']',substart);open=str.indexOf('[[',substart);if(close<=open||open==-1){if(close==-1)return str;substart=close;if(nestlev){nestlev--;}else{wiki=str.substring(start,close+2);html=_parse_image(wiki);str=str.replace(wiki,html);substart=start+html.length;loop=false;}}else{substart=open;nestlev++;}}while(loop);}else{break;}}
return str;};function _parse_inline_wiki(str)
{var aux_match,math_md5;str=_parse_inline_images(str);while(aux_match=str.match(/<(?:)math>(.*?)<\/math>/i)){math_md5=hex_md5(aux_match);str=str.replace(aux_match,"<img src='"+wpMathBasePath+math_md5+'.png'+"' />");}
return str.replace(/'''''(.*?)''(.*?)'''/g,'<strong><em>$1</em>$2</strong>').replace(/'''''(.*?)'''(.*?)''/g,'<em><strong>$1</strong>$2</em>').replace(/'''(.*?)''(.*?)'''''/g,'<strong>$1<em>$2</em></strong>').replace(/'''(.*?)'''/g,'<strong>$1</strong>').replace(/''(.*?)''/g,'<em>$1</em>').replace(/~{5}(?!~)/g,Date()).replace(/~{4}(?!~)/g,wpSignature+' '+Date()).replace(/~{3}(?!~)/g,wpSignature).replace(RegExp('\\\\]','gi'),"<a href='"+wpBaseArticlePath+"$1'>$1</a>").replace(RegExp('\\\\]','gi'),'').replace(/\*?)\]\](\w*)/g,"<a href='"+wpBaseArticlePath+"$1'>$1$2</a>").replace(/\]+?)\]\](\w*)/g,"<a href='"+wpBaseArticlePath+"$1'>$2$3</a>").replace(/\]*?:)?(.*?)( *\(.*?\))?\|\]\]/g,"<a href='"+wpBaseArticlePath+"$1$2$3'>$2</a>").replace(/\]*?) (.*?)\]/g,"<a href='$1:$2$3'>$4</a>").replace(/\/g,"<a href='http://$1'></a>").replace(/\/g,"<a href='$1:$2$3'>$1:$2$3</a>").replace(/(^| )(http|news|ftp|mailto|gopher|irc):(\/*)(*)/g,"$1<a href='$2:$3$4'>$2:$3$4</a>").replace('__NOTOC__','').replace('__NOEDITSECTION__','');};function _strip_inline_wiki(str)
{return str.replace(/\]*\|(.*?)\]\]/g,'$1').replace(/\\]/g,'$1').replace(/''(.*?)''/g,'$1');};function max(a,b)
{if(a>b)return a;else return b;};function min(a,b)
{if(a<b)return a;else return b;};function str_imatch(str_a,str_b)
{var lim=min(str_a.length,str_b.length);for(var i=0;i<lim;i++){if(str_a.charAt(i)!=str_b.charAt(i))return i;}
return i;};function strip_cr(str)
{return str.replace(/\n\r/g,"\n").replace(/\r/g,'');};function html_entities(str)
{return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");};var chrsz=8;var hex_tab="0123456789abcdef";function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));};function core_md5(x,len)
{x|=0x80<<((len)%32);x=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x,7,-680876936);d=md5_ff(d,a,b,c,x,12,-389564586);c=md5_ff(c,d,a,b,x,17,606105819);b=md5_ff(b,c,d,a,x,22,-1044525330);a=md5_ff(a,b,c,d,x,7,-176418897);d=md5_ff(d,a,b,c,x,12,1200080426);c=md5_ff(c,d,a,b,x,17,-1473231341);b=md5_ff(b,c,d,a,x,22,-45705983);a=md5_ff(a,b,c,d,x,7,1770035416);d=md5_ff(d,a,b,c,x,12,-1958414417);c=md5_ff(c,d,a,b,x,17,-42063);b=md5_ff(b,c,d,a,x,22,-1990404162);a=md5_ff(a,b,c,d,x,7,1804603682);d=md5_ff(d,a,b,c,x,12,-40341101);c=md5_ff(c,d,a,b,x,17,-1502002290);b=md5_ff(b,c,d,a,x,22,1236535329);a=md5_gg(a,b,c,d,x,5,-165796510);d=md5_gg(d,a,b,c,x,9,-1069501632);c=md5_gg(c,d,a,b,x,14,643717713);b=md5_gg(b,c,d,a,x,20,-373897302);a=md5_gg(a,b,c,d,x,5,-701558691);d=md5_gg(d,a,b,c,x,9,38016083);c=md5_gg(c,d,a,b,x,14,-660478335);b=md5_gg(b,c,d,a,x,20,-405537848);a=md5_gg(a,b,c,d,x,5,568446438);d=md5_gg(d,a,b,c,x,9,-1019803690);c=md5_gg(c,d,a,b,x,14,-187363961);b=md5_gg(b,c,d,a,x,20,1163531501);a=md5_gg(a,b,c,d,x,5,-1444681467);d=md5_gg(d,a,b,c,x,9,-51403784);c=md5_gg(c,d,a,b,x,14,1735328473);b=md5_gg(b,c,d,a,x,20,-1926607734);a=md5_hh(a,b,c,d,x,4,-378558);d=md5_hh(d,a,b,c,x,11,-2022574463);c=md5_hh(c,d,a,b,x,16,1839030562);b=md5_hh(b,c,d,a,x,23,-35309556);a=md5_hh(a,b,c,d,x,4,-1530992060);d=md5_hh(d,a,b,c,x,11,1272893353);c=md5_hh(c,d,a,b,x,16,-155497632);b=md5_hh(b,c,d,a,x,23,-1094730640);a=md5_hh(a,b,c,d,x,4,681279174);d=md5_hh(d,a,b,c,x,11,-358537222);c=md5_hh(c,d,a,b,x,16,-722521979);b=md5_hh(b,c,d,a,x,23,76029189);a=md5_hh(a,b,c,d,x,4,-640364487);d=md5_hh(d,a,b,c,x,11,-421815835);c=md5_hh(c,d,a,b,x,16,530742520);b=md5_hh(b,c,d,a,x,23,-995338651);a=md5_ii(a,b,c,d,x,6,-198630844);d=md5_ii(d,a,b,c,x,10,1126891415);c=md5_ii(c,d,a,b,x,15,-1416354905);b=md5_ii(b,c,d,a,x,21,-57434055);a=md5_ii(a,b,c,d,x,6,1700485571);d=md5_ii(d,a,b,c,x,10,-1894986606);c=md5_ii(c,d,a,b,x,15,-1051523);b=md5_ii(b,c,d,a,x,21,-2054922799);a=md5_ii(a,b,c,d,x,6,1873313359);d=md5_ii(d,a,b,c,x,10,-30611744);c=md5_ii(c,d,a,b,x,15,-1560198380);b=md5_ii(b,c,d,a,x,21,1309151649);a=md5_ii(a,b,c,d,x,6,-145523070);d=md5_ii(d,a,b,c,x,10,-1120210379);c=md5_ii(c,d,a,b,x,15,718787259);b=md5_ii(b,c,d,a,x,21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}
return Array(a,b,c,d);};function md5_cmn(q,a,b,x,s,t)
{return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);};function md5_ff(a,b,c,d,x,s,t)
{return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);};function md5_gg(a,b,c,d,x,s,t)
{return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);};function md5_hh(a,b,c,d,x,s,t)
{return md5_cmn(b^c^d,a,b,x,s,t);};function md5_ii(a,b,c,d,x,s,t)
{return md5_cmn(c^(b|(~d)),a,b,x,s,t);};function safe_add(x,y)
{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);};function bit_rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));};function str2binl(str)
{var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)
bin|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin;};function binl2hex(binarray)
{var str='';for(var i=0;i<binarray.length*4;i++)
{str+=hex_tab.charAt((binarray>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray>>((i%4)*8))&0xF);}
return str;}; // </math>// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY--
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/

/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */

/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
function hex_hmac_md5(k, d)
{ return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function b64_hmac_md5(k, d)
{ return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function any_hmac_md5(k, d, e)
{ return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }

/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test()
{
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
* Calculate the MD5 of a raw string
*/
function rstr_md5(s)
{
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
}

/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstr_hmac_md5(key, data)
{
var bkey = rstr2binl(key);
if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);

var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad = bkey ^ 0x36363636;
opad = bkey ^ 0x5C5C5C5C;
}

var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
}

/*
* Convert a raw string to a hex string
*/
function rstr2hex(input)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var output = "";
var x;
for(var i = 0; i < input.length; i++)
{
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F)
+ hex_tab.charAt( x & 0x0F);
}
return output;
}

/*
* Convert a raw string to a base-64 string
*/
function rstr2b64(input)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var output = "";
var len = input.length;
for(var i = 0; i < len; i += 3)
{
var triplet = (input.charCodeAt(i) << 16)
| (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
| (i + 2 < len ? input.charCodeAt(i+2) : 0);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > input.length * 8) output += b64pad;
else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
}
}
return output;
}

/*
* Convert a raw string to an arbitrary string encoding
*/
function rstr2any(input, encoding)
{
var divisor = encoding.length;
var remainders = Array();
var i, q, x, quotient;

/* Convert to an array of 16-bit big-endian values, forming the dividend */
var dividend = Array(input.length / 2);
for(i = 0; i < dividend.length; i++)
{
dividend = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
}

/*
* Repeatedly perform a long division. The binary array forms the dividend,
* the length of the encoding is the divisor. Once computed, the quotient
* forms the dividend for the next step. We stop when the dividend is zero.
* All remainders are stored for later use.
*/
while(dividend.length > 0)
{
quotient = Array();
x = 0;
for(i = 0; i < dividend.length; i++)
{
x = (x << 16) + dividend;
q = Math.floor(x / divisor);
x -= q * divisor;
if(quotient.length > 0 || q > 0)
quotient = q;
}
remainders = x;
dividend = quotient;
}

/* Convert the remainders to the output string */
var output = "";
for(i = remainders.length - 1; i >= 0; i--)
output += encoding.charAt(remainders);

return output;
}

/*
* Encode a string as utf-8.
* For efficiency, this assumes the input is valid utf-16.
*/
function str2rstr_utf8(input)
{
var output = "";
var i = -1;
var x, y;

while(++i < input.length)
{
/* Decode utf-16 surrogate pairs */
x = input.charCodeAt(i);
y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
{
x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
i++;
}

/* Encode output as utf-8 */
if(x <= 0x7F)
output += String.fromCharCode(x);
else if(x <= 0x7FF)
output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
0x80 | ( x & 0x3F));
else if(x <= 0xFFFF)
output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
0x80 | ((x >>> 6 ) & 0x3F),
0x80 | ( x & 0x3F));
else if(x <= 0x1FFFFF)
output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
0x80 | ((x >>> 12) & 0x3F),
0x80 | ((x >>> 6 ) & 0x3F),
0x80 | ( x & 0x3F));
}
return output;
}

/*
* Encode a string as utf-16
*/
function str2rstr_utf16le(input)
{
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
(input.charCodeAt(i) >>> 8) & 0xFF);
return output;
}

function str2rstr_utf16be(input)
{
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
input.charCodeAt(i) & 0xFF);
return output;
}

/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input)
{
var output = Array(input.length >> 2);
for(var i = 0; i < output.length; i++)
output = 0;
for(var i = 0; i < input.length * 8; i += 8)
output |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
return output;
}

/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input)
{
var output = "";
for(var i = 0; i < input.length * 32; i += 8)
output += String.fromCharCode((input >>> (i % 32)) & 0xFF);
return output;
}

/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binl_md5(x, len)
{
/* append padding */
x |= 0x80 << ((len) % 32);
x = len;

var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;

for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;

a = md5_ff(a, b, c, d, x, 7 , -680876936);
d = md5_ff(d, a, b, c, x, 12, -389564586);
c = md5_ff(c, d, a, b, x, 17, 606105819);
b = md5_ff(b, c, d, a, x, 22, -1044525330);
a = md5_ff(a, b, c, d, x, 7 , -176418897);
d = md5_ff(d, a, b, c, x, 12, 1200080426);
c = md5_ff(c, d, a, b, x, 17, -1473231341);
b = md5_ff(b, c, d, a, x, 22, -45705983);
a = md5_ff(a, b, c, d, x, 7 , 1770035416);
d = md5_ff(d, a, b, c, x, 12, -1958414417);
c = md5_ff(c, d, a, b, x, 17, -42063);
b = md5_ff(b, c, d, a, x, 22, -1990404162);
a = md5_ff(a, b, c, d, x, 7 , 1804603682);
d = md5_ff(d, a, b, c, x, 12, -40341101);
c = md5_ff(c, d, a, b, x, 17, -1502002290);
b = md5_ff(b, c, d, a, x, 22, 1236535329);

a = md5_gg(a, b, c, d, x, 5 , -165796510);
d = md5_gg(d, a, b, c, x, 9 , -1069501632);
c = md5_gg(c, d, a, b, x, 14, 643717713);
b = md5_gg(b, c, d, a, x, 20, -373897302);
a = md5_gg(a, b, c, d, x, 5 , -701558691);
d = md5_gg(d, a, b, c, x, 9 , 38016083);
c = md5_gg(c, d, a, b, x, 14, -660478335);
b = md5_gg(b, c, d, a, x, 20, -405537848);
a = md5_gg(a, b, c, d, x, 5 , 568446438);
d = md5_gg(d, a, b, c, x, 9 , -1019803690);
c = md5_gg(c, d, a, b, x, 14, -187363961);
b = md5_gg(b, c, d, a, x, 20, 1163531501);
a = md5_gg(a, b, c, d, x, 5 , -1444681467);
d = md5_gg(d, a, b, c, x, 9 , -51403784);
c = md5_gg(c, d, a, b, x, 14, 1735328473);
b = md5_gg(b, c, d, a, x, 20, -1926607734);

a = md5_hh(a, b, c, d, x, 4 , -378558);
d = md5_hh(d, a, b, c, x, 11, -2022574463);
c = md5_hh(c, d, a, b, x, 16, 1839030562);
b = md5_hh(b, c, d, a, x, 23, -35309556);
a = md5_hh(a, b, c, d, x, 4 , -1530992060);
d = md5_hh(d, a, b, c, x, 11, 1272893353);
c = md5_hh(c, d, a, b, x, 16, -155497632);
b = md5_hh(b, c, d, a, x, 23, -1094730640);
a = md5_hh(a, b, c, d, x, 4 , 681279174);
d = md5_hh(d, a, b, c, x, 11, -358537222);
c = md5_hh(c, d, a, b, x, 16, -722521979);
b = md5_hh(b, c, d, a, x, 23, 76029189);
a = md5_hh(a, b, c, d, x, 4 , -640364487);
d = md5_hh(d, a, b, c, x, 11, -421815835);
c = md5_hh(c, d, a, b, x, 16, 530742520);
b = md5_hh(b, c, d, a, x, 23, -995338651);

a = md5_ii(a, b, c, d, x, 6 , -198630844);
d = md5_ii(d, a, b, c, x, 10, 1126891415);
c = md5_ii(c, d, a, b, x, 15, -1416354905);
b = md5_ii(b, c, d, a, x, 21, -57434055);
a = md5_ii(a, b, c, d, x, 6 , 1700485571);
d = md5_ii(d, a, b, c, x, 10, -1894986606);
c = md5_ii(c, d, a, b, x, 15, -1051523);
b = md5_ii(b, c, d, a, x, 21, -2054922799);
a = md5_ii(a, b, c, d, x, 6 , 1873313359);
d = md5_ii(d, a, b, c, x, 10, -30611744);
c = md5_ii(c, d, a, b, x, 15, -1560198380);
b = md5_ii(b, c, d, a, x, 21, 1309151649);
a = md5_ii(a, b, c, d, x, 6 , -145523070);
d = md5_ii(d, a, b, c, x, 10, -1120210379);
c = md5_ii(c, d, a, b, x, 15, 718787259);
b = md5_ii(b, c, d, a, x, 21, -343485551);

a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}

/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY--
//\/////
//\ overLIB 4.21 - You may not remove or change this notice.
//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
//\
//\ Contributors are listed on the homepage.
//\ This file might be old, always check for the latest version at:
//\ http://www.bosrup.com/web/overlib/
//\
//\ Please read the license agreement (available through the link above)
//\ before using overLIB. Direct any licensing questions to erik@bosrup.com.
//\
//\ Do not sell this as your own work or remove this copyright notice.
//\ For full details on copying or changing this script please read the
//\ license agreement at the link above. Please give credit on sites that
//\ use overLIB and submit changes of the script so other people can use
//\ them as well.
//\/////
//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
var olLoaded=0,pmStart=10000000,pmUpper=10001000,pmCount=pmStart+1,pmt='',pms=new Array(),olInfo=new Info('4.21',1),FREPLACE=0,FBEFORE=1,FAFTER=2,FALTERNATE=3,FCHAIN=4,olHideForm=0,olHautoFlag=0,olVautoFlag=0,hookPts=new Array(),postParse=new Array(),cmdLine=new Array(),runTime=new Array();
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
if(typeof ol_fgcolor=='undefined')var ol_fgcolor="#CCCCFF";if(typeof ol_bgcolor=='undefined')var ol_bgcolor="#333399";if(typeof ol_textcolor=='undefined')var ol_textcolor="#000000";if(typeof ol_capcolor=='undefined')var ol_capcolor="#FFFFFF";if(typeof ol_closecolor=='undefined')var ol_closecolor="#9999FF";if(typeof ol_textfont=='undefined')var ol_textfont="Verdana,Arial,Helvetica";if(typeof ol_captionfont=='undefined')var ol_captionfont="Verdana,Arial,Helvetica";if(typeof ol_closefont=='undefined')var ol_closefont="Verdana,Arial,Helvetica";if(typeof ol_textsize=='undefined')var ol_textsize="1";if(typeof ol_captionsize=='undefined')var ol_captionsize="1";if(typeof ol_closesize=='undefined')var ol_closesize="1";if(typeof ol_width=='undefined')var ol_width="200";if(typeof ol_border=='undefined')var ol_border="1";if(typeof ol_cellpad=='undefined')var ol_cellpad=2;if(typeof ol_offsetx=='undefined')var ol_offsetx=10;if(typeof ol_offsety=='undefined')var ol_offsety=10;if(typeof ol_text=='undefined')var ol_text="Default Text";if(typeof ol_cap=='undefined')var ol_cap="";if(typeof ol_sticky=='undefined')var ol_sticky=0;if(typeof ol_background=='undefined')var ol_background="";if(typeof ol_close=='undefined')var ol_close="Close";if(typeof ol_hpos=='undefined')var ol_hpos=RIGHT;if(typeof ol_status=='undefined')var ol_status="";if(typeof ol_autostatus=='undefined')var ol_autostatus=0;if(typeof ol_height=='undefined')var ol_height=-1;if(typeof ol_snapx=='undefined')var ol_snapx=0;if(typeof ol_snapy=='undefined')var ol_snapy=0;if(typeof ol_fixx=='undefined')var ol_fixx=-1;if(typeof ol_fixy=='undefined')var ol_fixy=-1;if(typeof ol_relx=='undefined')var ol_relx=null;if(typeof ol_rely=='undefined')var ol_rely=null;if(typeof ol_fgbackground=='undefined')var ol_fgbackground="";if(typeof ol_bgbackground=='undefined')var ol_bgbackground="";if(typeof ol_padxl=='undefined')var ol_padxl=1;if(typeof ol_padxr=='undefined')var ol_padxr=1;if(typeof ol_padyt=='undefined')var ol_padyt=1;if(typeof ol_padyb=='undefined')var ol_padyb=1;if(typeof ol_fullhtml=='undefined')var ol_fullhtml=0;if(typeof ol_vpos=='undefined')var ol_vpos=BELOW;if(typeof ol_aboveheight=='undefined')var ol_aboveheight=0;if(typeof ol_capicon=='undefined')var ol_capicon="";if(typeof ol_frame=='undefined')var ol_frame=self;if(typeof ol_timeout=='undefined')var ol_timeout=0;if(typeof ol_function=='undefined')var ol_function=null;if(typeof ol_delay=='undefined')var ol_delay=0;if(typeof ol_hauto=='undefined')var ol_hauto=0;if(typeof ol_vauto=='undefined')var ol_vauto=0;if(typeof ol_closeclick=='undefined')var ol_closeclick=0;if(typeof ol_wrap=='undefined')var ol_wrap=0;if(typeof ol_followmouse=='undefined')var ol_followmouse=1;if(typeof ol_mouseoff=='undefined')var ol_mouseoff=0;if(typeof ol_closetitle=='undefined')var ol_closetitle='Close';if(typeof ol_compatmode=='undefined')var ol_compatmode=0;if(typeof ol_css=='undefined')var ol_css=CSSOFF;if(typeof ol_fgclass=='undefined')var ol_fgclass="";if(typeof ol_bgclass=='undefined')var ol_bgclass="";if(typeof ol_textfontclass=='undefined')var ol_textfontclass="";if(typeof ol_captionfontclass=='undefined')var ol_captionfontclass="";if(typeof ol_closefontclass=='undefined')var ol_closefontclass="";
if(typeof ol_texts=='undefined')var ol_texts=new Array("Text 0","Text 1");if(typeof ol_caps=='undefined')var ol_caps=new Array("Caption 0","Caption 1");
var o3_text="",o3_cap="",o3_sticky=0,o3_background="",o3_close="Close",o3_hpos=RIGHT,o3_offsetx=2,o3_offsety=2,o3_fgcolor="",o3_bgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=100,o3_border=1,o3_cellpad=2,o3_status="",o3_autostatus=0,o3_height=-1,o3_snapx=0,o3_snapy=0,o3_fixx=-1,o3_fixy=-1,o3_relx=null,o3_rely=null,o3_fgbackground="",o3_bgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,o3_aboveheight=0,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="Verdana,Arial,Helvetica",o3_closefont="Verdana,Arial,Helvetica",o3_textsize="1",o3_captionsize="1",o3_closesize="1",o3_frame=self,o3_timeout=0,o3_timerid=0,o3_allowmove=0,o3_function=null,o3_delay=0,o3_delayid=0,o3_hauto=0,o3_vauto=0,o3_closeclick=0,o3_wrap=0,o3_followmouse=1,o3_mouseoff=0,o3_closetitle='',o3_compatmode=0,o3_css=CSSOFF,o3_fgclass="",o3_bgclass="",o3_textfontclass="",o3_captionfontclass="",o3_closefontclass="";
var o3_x=0,o3_y=0,o3_showingsticky=0,o3_removecounter=0;
var over=null,fnRef,hoveringSwitch=false,olHideDelay;
var isMac=(navigator.userAgent.indexOf("Mac")!=-1),olOp=(navigator.userAgent.toLowerCase().indexOf('opera')>-1&&document.createTextNode),olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4),olNs6=(document.getElementById)?true:false,olKq=(olNs6&&/konqueror/i.test(navigator.userAgent)),olIe4=(document.all)?true:false,olIe5=false,olIe55=false,docRoot='document.body';
if(olNs4){var oW=window.innerWidth;var oH=window.innerHeight;window.onresize=function(){if(oW!=window.innerWidth||oH!=window.innerHeight)location.reload();}}
if(olIe4){var agent=navigator.userAgent;if(/MSIE/.test(agent)){var versNum=parseFloat(agent.match(/MSIE(\d\.\d+)\.*/i));if(versNum>=5){olIe5=true;olIe55=(versNum>=5.5&&!olOp)?true:false;if(olNs6)olNs6=false;}}
if(olNs6)olIe4=false;}
if(document.compatMode&&document.compatMode=='CSS1Compat'){docRoot=((olIe4&&!olOp)?'document.documentElement':docRoot);}
if(window.addEventListener)window.addEventListener("load",OLonLoad_handler,false);else if(window.attachEvent)window.attachEvent("onload",OLonLoad_handler);
var capExtent;
function overlib(){if(!olLoaded||isExclusive(overlib.arguments))return true;if(olCheckMouseCapture)olMouseCapture();if(over){over=(typeof over.id!='string')?o3_frame.document.all:over;cClick();}
olHideDelay=0;o3_text=ol_text;o3_cap=ol_cap;o3_sticky=ol_sticky;o3_background=ol_background;o3_close=ol_close;o3_hpos=ol_hpos;o3_offsetx=ol_offsetx;o3_offsety=ol_offsety;o3_fgcolor=ol_fgcolor;o3_bgcolor=ol_bgcolor;o3_textcolor=ol_textcolor;o3_capcolor=ol_capcolor;o3_closecolor=ol_closecolor;o3_width=ol_width;o3_border=ol_border;o3_cellpad=ol_cellpad;o3_status=ol_status;o3_autostatus=ol_autostatus;o3_height=ol_height;o3_snapx=ol_snapx;o3_snapy=ol_snapy;o3_fixx=ol_fixx;o3_fixy=ol_fixy;o3_relx=ol_relx;o3_rely=ol_rely;o3_fgbackground=ol_fgbackground;o3_bgbackground=ol_bgbackground;o3_padxl=ol_padxl;o3_padxr=ol_padxr;o3_padyt=ol_padyt;o3_padyb=ol_padyb;o3_fullhtml=ol_fullhtml;o3_vpos=ol_vpos;o3_aboveheight=ol_aboveheight;o3_capicon=ol_capicon;o3_textfont=ol_textfont;o3_captionfont=ol_captionfont;o3_closefont=ol_closefont;o3_textsize=ol_textsize;o3_captionsize=ol_captionsize;o3_closesize=ol_closesize;o3_timeout=ol_timeout;o3_function=ol_function;o3_delay=ol_delay;o3_hauto=ol_hauto;o3_vauto=ol_vauto;o3_closeclick=ol_closeclick;o3_wrap=ol_wrap;o3_followmouse=ol_followmouse;o3_mouseoff=ol_mouseoff;o3_closetitle=ol_closetitle;o3_css=ol_css;o3_compatmode=ol_compatmode;o3_fgclass=ol_fgclass;o3_bgclass=ol_bgclass;o3_textfontclass=ol_textfontclass;o3_captionfontclass=ol_captionfontclass;o3_closefontclass=ol_closefontclass;
setRunTimeVariables();
fnRef='';
o3_frame=ol_frame;
if(!(over=createDivContainer()))return false;
parseTokens('o3_',overlib.arguments);if(!postParseChecks())return false;
if(o3_delay==0){return runHook("olMain",FREPLACE);}else{o3_delayid=setTimeout("runHook('olMain',FREPLACE)",o3_delay);return false;}}
function nd(time){if(olLoaded&&!isExclusive()){hideDelay(time);
if(o3_removecounter>=1){o3_showingsticky=0 };
if(o3_showingsticky==0){o3_allowmove=0;if(over!=null&&o3_timerid==0)runHook("hideObject",FREPLACE,over);}else{o3_removecounter++;}}
return true;}
function cClick(){if(olLoaded){runHook("hideObject",FREPLACE,over);o3_showingsticky=0;}
return false;}
function overlib_pagedefaults(){parseTokens('ol_',overlib_pagedefaults.arguments);}
function olMain(){var layerhtml,styleType;runHook("olMain",FBEFORE);
if(o3_background!=""||o3_fullhtml){
layerhtml=runHook('ol_content_background',FALTERNATE,o3_css,o3_text,o3_background,o3_fullhtml);}else{
styleType=(pms=="cssoff"||pms=="cssclass");
if(o3_fgbackground!="")o3_fgbackground="background=\""+o3_fgbackground+"\"";if(o3_bgbackground!="")o3_bgbackground=(styleType?"background=\""+o3_bgbackground+"\"":o3_bgbackground);
if(o3_fgcolor!="")o3_fgcolor=(styleType?"bgcolor=\""+o3_fgcolor+"\"":o3_fgcolor);if(o3_bgcolor!="")o3_bgcolor=(styleType?"bgcolor=\""+o3_bgcolor+"\"":o3_bgcolor);
if(o3_height>0)o3_height=(styleType?"height=\""+o3_height+"\"":o3_height);else o3_height="";
if(o3_cap==""){
layerhtml=runHook('ol_content_simple',FALTERNATE,o3_css,o3_text);}else{
if(o3_sticky){
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,o3_close);}else{
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,"");}}}
if(o3_sticky){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;}
o3_showingsticky=1;o3_removecounter=0;}
if(!runHook("createPopup",FREPLACE,layerhtml))return false;
if(o3_autostatus>0){o3_status=o3_text;if(o3_autostatus>1)o3_status=o3_cap;}
o3_allowmove=0;
if(o3_timeout>0){if(o3_timerid>0)clearTimeout(o3_timerid);o3_timerid=setTimeout("cClick()",o3_timeout);}
runHook("disp",FREPLACE,o3_status);runHook("olMain",FAFTER);
return(olOp&&event&&event.type=='mouseover'&&!o3_status)?'':(o3_status!='');}
function ol_content_simple(text){var cpIsMultiple=/,/.test(o3_cellpad);var txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">':((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_caption(text,title,close){var nameId,txt,cpIsMultiple=/,/.test(o3_cellpad);var closing,closeevent;
closing="";closeevent="onmouseover";if(o3_closeclick==1)closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onclick";if(o3_capicon!=""){nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if(typeof o3_dragimg!='undefined'&&o3_dragimg)nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon='<img src=\"'+o3_capicon+'\"'+nameId+' />';}
if(close!="")
closing='<td '+(!o3_compatmode&&o3_closefontclass?'class="'+o3_closefontclass:'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode&&o3_closefontclass)?' class="'+o3_closefontclass+'" ':' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass?'':wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass?'':wrapStr(1,o3_closesize,'close'))+'</a></td>';txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass?' class="'+o3_captionfontclass+'">':'>')+(o3_captionfontclass?'':'<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass?'':wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_background(text,picture,hasfullhtml){if(hasfullhtml){txt=text;}else{txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass?'" class="'+o3_textfontclass:'')+'">'+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';}
set_background(picture);return txt;}
function set_background(pic){if(pic==""){if(olNs4){over.background.src=null;}else if(over.style){over.style.backgroundImage="none";}
}else{if(olNs4){over.background.src=pic;}else if(over.style){over.style.width=o3_width+'px';over.style.backgroundImage="url("+pic+")";}}}
var olShowId=-1;
function disp(statustext){runHook("disp",FBEFORE);
if(o3_allowmove==0){runHook("placeLayer",FREPLACE);(olNs6&&olShowId<0)?olShowId=setTimeout("runHook('showObject',FREPLACE,over)",1):runHook("showObject",FREPLACE,over);o3_allowmove=(o3_sticky||o3_followmouse==0)?0:1;}
runHook("disp",FAFTER);
if(statustext!="")self.status=statustext;}
function createPopup(lyrContent){runHook("createPopup",FBEFORE);
if(o3_wrap){var wd,ww,theObj=(olNs4?over:over.style);theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);layerWrite(lyrContent);wd=(olNs4?over.clip.width:over.offsetWidth);if(wd>(ww=windowWidth())){lyrContent=lyrContent.replace(/\&nbsp;/g,' ');o3_width=ww;o3_wrap=0;}}
layerWrite(lyrContent);
if(o3_wrap)o3_width=(olNs4?over.clip.width:over.offsetWidth);
runHook("createPopup",FAFTER,lyrContent);
return true;}
function placeLayer(){var placeX,placeY,widthFix=0;
if(o3_frame.innerWidth)widthFix=18;iwidth=windowWidth();
winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;
placeX=runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
if(o3_frame.innerHeight){iheight=o3_frame.innerHeight;}else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')){iheight=eval('o3_frame.'+docRoot+'.clientHeight');}
scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;placeY=runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
repositionTo(over,placeX,placeY);}
function olMouseMove(e){var e=(e)?e:event;
if(e.pageX){o3_x=e.pageX;o3_y=e.pageY;}else if(e.clientX){o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
if(o3_allowmove==1)runHook("placeLayer",FREPLACE);
if(hoveringSwitch&&!olNs4&&runHook("cursorOff",FREPLACE)){(olHideDelay?hideDelay(olHideDelay):cClick());hoveringSwitch=!hoveringSwitch;}}
function no_overlib(){return ver3fix;}
function olMouseCapture(){capExtent=document;var fN,str='',l,k,f,wMv,sS,mseHandler=olMouseMove;var re=/function*(\w*)\(/;
wMv=(!olIe4&&window.onmousemove);if(document.onmousemove||wMv){if(wMv)capExtent=window;f=capExtent.onmousemove.toString();fN=f.match(re);if(fN==null){str=f+'(e);';}else if(fN=='anonymous'||fN=='olMouseMove'||(wMv&&fN=='onmousemove')){if(!olOp&&wMv){l=f.indexOf('{')+1;k=f.lastIndexOf('}');sS=f.substring(l,k);if((l=sS.indexOf('('))!=-1){sS=sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');if(eval("typeof "+sS+"=='undefined'"))window.onmousemove=null;else str=sS+'(e);';}}
if(!str){olCheckMouseCapture=false;return;}
}else{if(fN)str=fN+'(e);';else{l=f.indexOf('{')+1;k=f.lastIndexOf('}');str=f.substring(l,k)+'\n';}}
str+='olMouseMove(e);';mseHandler=new Function('e',str);}
capExtent.onmousemove=mseHandler;if(olNs4)capExtent.captureEvents(Event.MOUSEMOVE);}
function parseTokens(pf,ar){
var v,i,mode=-1,par=(pf!='ol_'),fnMark=(par&&!ar.length?1:0);
for(i=0;i<ar.length;i++){if(mode<0){
if(typeof ar=='number'&&ar>pmStart&&ar<pmUpper){fnMark=(par?1:0);i--;}else{switch(pf){case 'ol_':
ol_text=ar.toString();break;default:
o3_text=ar.toString();}}
mode=0;}else{
if(ar>=pmCount||ar==DONOTHING){continue;}
if(ar==INARRAY){fnMark=0;eval(pf+'text=ol_texts+'].toString()');continue;}
if(ar==CAPARRAY){eval(pf+'cap=ol_caps+'].toString()');continue;}
if(ar==STICKY){if(pf!='ol_')eval(pf+'sticky=1');continue;}
if(ar==BACKGROUND){eval(pf+'background="'+ar+'"');continue;}
if(ar==NOCLOSE){if(pf!='ol_')opt_NOCLOSE();continue;}
if(ar==CAPTION){eval(pf+"cap='"+escSglQuote(ar)+"'");continue;}
if(ar==CENTER||ar==LEFT||ar==RIGHT){eval(pf+'hpos='+ar);if(pf!='ol_')olHautoFlag=1;continue;}
if(ar==OFFSETX){eval(pf+'offsetx='+ar);continue;}
if(ar==OFFSETY){eval(pf+'offsety='+ar);continue;}
if(ar==FGCOLOR){eval(pf+'fgcolor="'+ar+'"');continue;}
if(ar==BGCOLOR){eval(pf+'bgcolor="'+ar+'"');continue;}
if(ar==TEXTCOLOR){eval(pf+'textcolor="'+ar+'"');continue;}
if(ar==CAPCOLOR){eval(pf+'capcolor="'+ar+'"');continue;}
if(ar==CLOSECOLOR){eval(pf+'closecolor="'+ar+'"');continue;}
if(ar==WIDTH){eval(pf+'width='+ar);continue;}
if(ar==BORDER){eval(pf+'border='+ar);continue;}
if(ar==CELLPAD){i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad'));continue;}
if(ar==STATUS){eval(pf+"status='"+escSglQuote(ar)+"'");continue;}
if(ar==AUTOSTATUS){eval(pf+'autostatus=('+pf+'autostatus==1)?0:1');continue;}
if(ar==AUTOSTATUSCAP){eval(pf+'autostatus=('+pf+'autostatus==2)?0:2');continue;}
if(ar==HEIGHT){eval(pf+'height='+pf+'aboveheight='+ar);continue;}
if(ar==CLOSETEXT){eval(pf+"close='"+escSglQuote(ar)+"'");continue;}
if(ar==SNAPX){eval(pf+'snapx='+ar);continue;}
if(ar==SNAPY){eval(pf+'snapy='+ar);continue;}
if(ar==FIXX){eval(pf+'fixx='+ar);continue;}
if(ar==FIXY){eval(pf+'fixy='+ar);continue;}
if(ar==RELX){eval(pf+'relx='+ar);continue;}
if(ar==RELY){eval(pf+'rely='+ar);continue;}
if(ar==FGBACKGROUND){eval(pf+'fgbackground="'+ar+'"');continue;}
if(ar==BGBACKGROUND){eval(pf+'bgbackground="'+ar+'"');continue;}
if(ar==PADX){eval(pf+'padxl='+ar);eval(pf+'padxr='+ar);continue;}
if(ar==PADY){eval(pf+'padyt='+ar);eval(pf+'padyb='+ar);continue;}
if(ar==FULLHTML){if(pf!='ol_')eval(pf+'fullhtml=1');continue;}
if(ar==BELOW||ar==ABOVE){eval(pf+'vpos='+ar);if(pf!='ol_')olVautoFlag=1;continue;}
if(ar==CAPICON){eval(pf+'capicon="'+ar+'"');continue;}
if(ar==TEXTFONT){eval(pf+"textfont='"+escSglQuote(ar)+"'");continue;}
if(ar==CAPTIONFONT){eval(pf+"captionfont='"+escSglQuote(ar)+"'");continue;}
if(ar==CLOSEFONT){eval(pf+"closefont='"+escSglQuote(ar)+"'");continue;}
if(ar==TEXTSIZE){eval(pf+'textsize="'+ar+'"');continue;}
if(ar==CAPTIONSIZE){eval(pf+'captionsize="'+ar+'"');continue;}
if(ar==CLOSESIZE){eval(pf+'closesize="'+ar+'"');continue;}
if(ar==TIMEOUT){eval(pf+'timeout='+ar);continue;}
if(ar==FUNCTION){if(pf=='ol_'){if(typeof ar!='number'){v=ar;ol_function=(typeof v=='function'?v:null);}}else{fnMark=0;v=null;if(typeof ar!='number')v=ar; opt_FUNCTION(v);} continue;}
if(ar==DELAY){eval(pf+'delay='+ar);continue;}
if(ar==HAUTO){eval(pf+'hauto=('+pf+'hauto==0)?1:0');continue;}
if(ar==VAUTO){eval(pf+'vauto=('+pf+'vauto==0)?1:0');continue;}
if(ar==CLOSECLICK){eval(pf+'closeclick=('+pf+'closeclick==0)?1:0');continue;}
if(ar==WRAP){eval(pf+'wrap=('+pf+'wrap==0)?1:0');continue;}
if(ar==FOLLOWMOUSE){eval(pf+'followmouse=('+pf+'followmouse==1)?0:1');continue;}
if(ar==MOUSEOFF){eval(pf+'mouseoff=('+pf+'mouseoff==0)?1:0');v=ar;if(pf!='ol_'&&eval(pf+'mouseoff')&&typeof v=='number'&&(v<pmStart||v>pmUpper))olHideDelay=ar;continue;}
if(ar==CLOSETITLE){eval(pf+"closetitle='"+escSglQuote(ar)+"'");continue;}
if(ar==CSSOFF||ar==CSSCLASS){eval(pf+'css='+ar);continue;}
if(ar==COMPATMODE){eval(pf+'compatmode=('+pf+'compatmode==0)?1:0');continue;}
if(ar==FGCLASS){eval(pf+'fgclass="'+ar+'"');continue;}
if(ar==BGCLASS){eval(pf+'bgclass="'+ar+'"');continue;}
if(ar==TEXTFONTCLASS){eval(pf+'textfontclass="'+ar+'"');continue;}
if(ar==CAPTIONFONTCLASS){eval(pf+'captionfontclass="'+ar+'"');continue;}
if(ar==CLOSEFONTCLASS){eval(pf+'closefontclass="'+ar+'"');continue;}
i=parseCmdLine(pf,i,ar);}}
if(fnMark&&o3_function)o3_text=o3_function();
if((pf=='o3_')&&o3_wrap){o3_width=0;
var tReg=/<.*\n*>/ig;if(!tReg.test(o3_text))o3_text=o3_text.replace(/+/g,'&nbsp;');if(!tReg.test(o3_cap))o3_cap=o3_cap.replace(/+/g,'&nbsp;');}
if((pf=='o3_')&&o3_sticky){if(!o3_close&&(o3_frame!=ol_frame))o3_close=ol_close;if(o3_mouseoff&&(o3_frame==ol_frame))opt_NOCLOSE(' ');}}
function layerWrite(txt){txt+="\n";if(olNs4){var lyr=o3_frame.document.layers.document
lyr.write(txt)
lyr.close()
}else if(typeof over.innerHTML!='undefined'){if(olIe5&&isMac)over.innerHTML='';over.innerHTML=txt;}else{range=o3_frame.document.createRange();range.setStartAfter(over);domfrag=range.createContextualFragment(txt);
while(over.hasChildNodes()){over.removeChild(over.lastChild);}
over.appendChild(domfrag);}}
function showObject(obj){runHook("showObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);theObj.visibility='visible';
runHook("showObject",FAFTER);}
function hideObject(obj){runHook("hideObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);if(olNs6&&olShowId>0){clearTimeout(olShowId);olShowId=0;}
theObj.visibility='hidden';theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);
if(o3_timerid>0)clearTimeout(o3_timerid);if(o3_delayid>0)clearTimeout(o3_delayid);
o3_timerid=0;o3_delayid=0;self.status="";
if(obj.onmouseout||obj.onmouseover){if(olNs4)obj.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);obj.onmouseout=obj.onmouseover=null;}
runHook("hideObject",FAFTER);}
function repositionTo(obj,xL,yL){var theObj=(olNs4?obj:obj.style);theObj.left=xL+(!olNs4?'px':0);theObj.top=yL+(!olNs4?'px':0);}
function cursorOff(){var left=parseInt(over.style.left);var top=parseInt(over.style.top);var right=left+(over.offsetWidth>=parseInt(o3_width)?over.offsetWidth:parseInt(o3_width));var bottom=top+(over.offsetHeight>=o3_aboveheight?over.offsetHeight:o3_aboveheight);
if(o3_x<left||o3_x>right||o3_y<top||o3_y>bottom)return true;
return false;}
function opt_FUNCTION(callme){o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):callme):callme()):(o3_function?o3_function():'No Function'));
return 0;}
function opt_NOCLOSE(unused){if(!unused)o3_close="";
if(olNs4){over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseover=function(){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }
over.onmouseout=function(e){if(olHideDelay)hideDelay(olHideDelay);else cClick(e);}
}else{over.onmouseover=function(){hoveringSwitch=true;if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }}
return 0;}
function opt_MULTIPLEARGS(i,args,parameter){var k=i,re,pV,str='';
for(k=i;k<args.length;k++){if(typeof args=='number'&&args>pmStart)break;str+=args+',';}
if(str)str=str.substring(0,--str.length);
k--;pV=(olNs4&&/cellpad/i.test(parameter))?str.split(','):str;eval(parameter+'="'+pV+'"');
return k;}
function nbspCleanup(){if(o3_wrap){o3_text=o3_text.replace(/\&nbsp;/g,' ');o3_cap=o3_cap.replace(/\&nbsp;/g,' ');}}
function escSglQuote(str){return str.toString().replace(/'/g,"\\'");}
function OLonLoad_handler(e){var re=/\w+\(.*\)+/g,olre=/overlib\(|nd\(|cClick\(/,fn,l,i;
if(!olLoaded)olLoaded=1;
if(window.removeEventListener&&e.eventPhase==3)window.removeEventListener("load",OLonLoad_handler,false);else if(window.detachEvent){window.detachEvent("onload",OLonLoad_handler);var fN=document.body.getAttribute('onload');if(fN){fN=fN.toString().match(re);if(fN&&fN.length){for(i=0;i<fN.length;i++){if(/anonymous/.test(fN))continue;while((l=fN.search(/\)+/))!=-1){fn=fN.substring(0,l+1);fN=fN.substring(l+2);if(olre.test(fn))eval(fn);}}}}}}
function wrapStr(endWrap,fontSizeStr,whichString){var fontStr,fontColor,isClose=((whichString=='close')?1:0),hasDims=/+$/.test(fontSizeStr);fontSizeStr=(olNs4)?(!hasDims?fontSizeStr:'1'):fontSizeStr;if(endWrap)return(hasDims&&!olNs4)?(isClose?'</span>':'</div>'):'</font>';else{fontStr='o3_'+whichString+'font';fontColor='o3_'+((whichString=='caption')? 'cap':whichString)+'color';return(hasDims&&!olNs4)?(isClose?'<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">':'<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">'):'<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7?'7':fontSizeStr)+'">';}}
function quoteMultiNameFonts(theFont){var v,pM=theFont.split(',');for(var i=0;i<pM.length;i++){v=pM;v=v.replace(/^\s+/,'').replace(/\s+$/,'');if(/\s/.test(v)&&!//.test(v)){v="\'"+v+"\'";pM=v;}}
return pM.join();}
function isExclusive(args){return false;}
function setCellPadStr(parameter){var Str='',j=0,ary=new Array(),top,bottom,left,right;
Str+='padding: ';ary=parameter.replace(/\s+/g,'').split(',');
switch(ary.length){case 2:
top=bottom=ary;left=right=ary;break;case 3:
top=ary;left=right=ary;bottom=ary;break;case 4:
top=ary;right=ary;bottom=ary;left=ary;break;}
Str+=((ary.length==1)?ary+'px;':top+'px '+right+'px '+bottom+'px '+left+'px;');
return Str;}
function hideDelay(time){if(time&&!o3_delay){if(o3_timerid>0)clearTimeout(o3_timerid);
o3_timerid=setTimeout("cClick()",(o3_timeout=time));}}
function horizontalPlacement(browserWidth,horizontalScrollAmount,widthFix){var placeX,iwidth=browserWidth,winoffset=horizontalScrollAmount;var parsedWidth=parseInt(o3_width);
if(o3_fixx>-1||o3_relx!=null){
placeX=(o3_relx!=null?( o3_relx<0?winoffset+o3_relx+iwidth-parsedWidth-widthFix:winoffset+o3_relx):o3_fixx);}else{
if(o3_hauto==1){if((o3_x-winoffset)>(iwidth/2)){o3_hpos=LEFT;}else{o3_hpos=RIGHT;}}
if(o3_hpos==CENTER){placeX=o3_x+o3_offsetx-(parsedWidth/2);
if(placeX<winoffset)placeX=winoffset;}
if(o3_hpos==RIGHT){placeX=o3_x+o3_offsetx;
if((placeX+parsedWidth)>(winoffset+iwidth-widthFix)){placeX=iwidth+winoffset-parsedWidth-widthFix;if(placeX<0)placeX=0;}}
if(o3_hpos==LEFT){placeX=o3_x-o3_offsetx-parsedWidth;if(placeX<winoffset)placeX=winoffset;}
if(o3_snapx>1){var snapping=placeX % o3_snapx;
if(o3_hpos==LEFT){placeX=placeX-(o3_snapx+snapping);}else{
placeX=placeX+(o3_snapx-snapping);}
if(placeX<winoffset)placeX=winoffset;}}
return placeX;}
function verticalPlacement(browserHeight,verticalScrollAmount){var placeY,iheight=browserHeight,scrolloffset=verticalScrollAmount;var parsedHeight=(o3_aboveheight?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight));
if(o3_fixy>-1||o3_rely!=null){
placeY=(o3_rely!=null?(o3_rely<0?scrolloffset+o3_rely+iheight-parsedHeight:scrolloffset+o3_rely):o3_fixy);}else{
if(o3_vauto==1){if((o3_y-scrolloffset)>(iheight/2)&&o3_vpos==BELOW&&(o3_y+parsedHeight+o3_offsety-(scrolloffset+iheight)>0)){o3_vpos=ABOVE;}else if(o3_vpos==ABOVE&&(o3_y-(parsedHeight+o3_offsety)-scrolloffset<0)){o3_vpos=BELOW;}}
if(o3_vpos==ABOVE){if(o3_aboveheight==0)o3_aboveheight=parsedHeight;
placeY=o3_y-(o3_aboveheight+o3_offsety);if(placeY<scrolloffset)placeY=scrolloffset;}else{
placeY=o3_y+o3_offsety;}
if(o3_snapy>1){var snapping=placeY % o3_snapy;
if(o3_aboveheight>0&&o3_vpos==ABOVE){placeY=placeY-(o3_snapy+snapping);}else{placeY=placeY+(o3_snapy-snapping);}
if(placeY<scrolloffset)placeY=scrolloffset;}}
return placeY;}
function checkPositionFlags(){if(olHautoFlag)olHautoFlag=o3_hauto=0;if(olVautoFlag)olVautoFlag=o3_vauto=0;return true;}
function windowWidth(){var w;if(o3_frame.innerWidth)w=o3_frame.innerWidth;else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth'))
w=eval('o3_frame.'+docRoot+'.clientWidth');return w;}
function createDivContainer(id,frm,zValue){id=(id||'overDiv'),frm=(frm||o3_frame),zValue=(zValue||1000);var objRef,divContainer=layerReference(id);
if(divContainer==null){if(olNs4){divContainer=frm.document.layers=new Layer(window.innerWidth,frm);objRef=divContainer;}else{var body=(olIe4?frm.document.all.tags('BODY'):frm.document.getElementsByTagName("BODY"));if(olIe4&&!document.getElementById){body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>');divContainer=layerReference(id);}else{divContainer=frm.document.createElement("DIV");divContainer.id=id;body.appendChild(divContainer);}
objRef=divContainer.style;}
objRef.position='absolute';objRef.visibility='hidden';objRef.zIndex=zValue;if(olIe4&&!olOp)objRef.left=objRef.top='0px';else objRef.left=objRef.top=-10000+(!olNs4?'px':0);}
return divContainer;}
function layerReference(id){return(olNs4?o3_frame.document.layers:(document.all?o3_frame.document.all:o3_frame.document.getElementById(id)));}
function isFunction(fnRef){var rtn=true;
if(typeof fnRef=='object'){for(var i=0;i<fnRef.length;i++){if(typeof fnRef=='function')continue;rtn=false;break;}
}else if(typeof fnRef!='function'){rtn=false;}
return rtn;}
function argToString(array,strtInd,argName){var jS=strtInd,aS='',ar=array;argName=(argName?argName:'ar');
if(ar.length>jS){for(var k=jS;k<ar.length;k++)aS+=argName+', ';aS=aS.substring(0,aS.length-2);}
return aS;}
function reOrder(hookPt,fnRef,order){var newPt=new Array(),match,i,j;
if(!order||typeof order=='undefined'||typeof order=='number')return hookPt;
if(typeof order=='function'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt=fnRef;}
for(i=0;i<hookPt.length;i++){match=false;if(typeof fnRef=='function'&&hookPt==fnRef){continue;}else{for(j=0;j<fnRef.length;j++)if(hookPt==fnRef){match=true;break;}}
if(!match)newPt=hookPt;}
newPt=order;
}else if(typeof order=='object'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt=fnRef;}
for(j=0;j<hookPt.length;j++){match=false;if(typeof fnRef=='function'&&hookPt==fnRef){continue;}else{for(i=0;i<fnRef.length;i++)if(hookPt==fnRef){match=true;break;}}
if(!match)newPt=hookPt;}
for(i=0;i<newPt.length;i++)hookPt=newPt;newPt.length=0;
for(j=0;j<hookPt.length;j++){match=false;for(i=0;i<order.length;i++){if(hookPt==order){match=true;break;}}
if(!match)newPt=hookPt;}
newPt=newPt.concat(order);}
hookPt=newPt;
return hookPt;}
function setRunTimeVariables(){if(typeof runTime!='undefined'&&runTime.length){for(var k=0;k<runTime.length;k++){runTime();}}}
function parseCmdLine(pf,i,args){if(typeof cmdLine!='undefined'&&cmdLine.length){for(var k=0;k<cmdLine.length;k++){var j=cmdLine(pf,i,args);if(j >-1){i=j;break;}}}
return i;}
function postParseChecks(pf,args){if(typeof postParse!='undefined'&&postParse.length){for(var k=0;k<postParse.length;k++){if(postParse(pf,args))continue;return false;}}
return true;}
function registerCommands(cmdStr){if(typeof cmdStr!='string')return;
var pM=cmdStr.split(',');pms=pms.concat(pM);
for(var i=0;i< pM.length;i++){eval(pM.toUpperCase()+'='+pmCount++);}}
function registerNoParameterCommands(cmdStr){if(!cmdStr&&typeof cmdStr!='string')return;pmt=(!pmt)?cmdStr:pmt+','+cmdStr;}
function registerHook(fnHookTo,fnRef,hookType,optPm){var hookPt,last=typeof optPm;
if(fnHookTo=='plgIn'||fnHookTo=='postParse')return;if(typeof hookPts=='undefined')hookPts=new FunctionReference();
hookPt=hookPts;
if(hookType!=null){if(hookType==FREPLACE){hookPt.ovload=fnRef;if(fnHookTo.indexOf('ol_content_')>-1)hookPt.alt]=fnRef;
}else if(hookType==FBEFORE||hookType==FAFTER){var hookPt=(hookType==1?hookPt.before:hookPt.after);
if(typeof fnRef=='object'){hookPt=hookPt.concat(fnRef);}else{hookPt=fnRef;}
if(optPm)hookPt=reOrder(hookPt,fnRef,optPm);
}else if(hookType==FALTERNATE){if(last=='number')hookPt.alt]=fnRef;}else if(hookType==FCHAIN){hookPt=hookPt.chain;if(typeof fnRef=='object')hookPt=hookPt.concat(fnRef);else hookPt=fnRef;}
return;}}
function registerRunTimeFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){runTime=runTime.concat(fn);}else{runTime=fn;}}}
function registerCmdLineFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){cmdLine=cmdLine.concat(fn);}else{cmdLine=fn;}}}
function registerPostParseFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){postParse=postParse.concat(fn);}else{postParse=fn;}}}
function runHook(fnHookTo,hookType){var l=hookPts,k,rtnVal=null,optPm,arS,ar=runHook.arguments;
if(hookType==FREPLACE){arS=argToString(ar,2);
if(typeof l=='undefined'||!(l=l.ovload))rtnVal=eval(fnHookTo+'('+arS+')');else rtnVal=eval('l('+arS+')');
}else if(hookType==FBEFORE||hookType==FAFTER){if(typeof l!='undefined'){l=(hookType==1?l.before:l.after);
if(l.length){arS=argToString(ar,2);for(var k=0;k<l.length;k++)eval('l('+arS+')');}}
}else if(hookType==FALTERNATE){optPm=ar;arS=argToString(ar,3);
if(typeof l=='undefined'||(l=l.alt])=='undefined'){rtnVal=eval(fnHookTo+'('+arS+')');}else{rtnVal=eval('l('+arS+')');}
}else if(hookType==FCHAIN){arS=argToString(ar,2);l=l.chain;
for(k=l.length;k>0;k--)if((rtnVal=eval('l('+arS+')'))!=void(0))break;}
return rtnVal;}
function FunctionReference(){this.ovload=null;this.before=new Array();this.after=new Array();this.alt=new Array();this.chain=new Array();}
function Info(version,prerelease){this.version=version;this.prerelease=prerelease;
this.simpleversion=Math.round(this.version*100);this.major=parseInt(this.simpleversion/100);this.minor=parseInt(this.simpleversion/10)-this.major * 10;this.revision=parseInt(this.simpleversion)-this.major * 100-this.minor * 10;this.meets=meets;}
function meets(reqdVersion){return(!reqdVersion)?false:this.simpleversion>=Math.round(100*parseFloat(reqdVersion));}
registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSOFF);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSOFF);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSOFF);registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSCLASS);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSCLASS);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSCLASS);registerPostParseFunction(checkPositionFlags);registerHook("hideObject",nbspCleanup,FAFTER);registerHook("horizontalPlacement",horizontalPlacement,FCHAIN);registerHook("verticalPlacement",verticalPlacement,FCHAIN);if(olNs4||(olIe5&&isMac)||olKq)olLoaded=1;registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
var olCheckMouseCapture=true;if((olNs4||olNs6||olIe4)){olMouseCapture();}else{overlib=no_overlib;nd=no_overlib;ver3fix=true;}

Revision as of 12:46, 18 September 2005

var popupVersion="Sat Sep 17 18:22:05 EDT 2005";
// CONTENTS
// Utility functions
// Popup stuff
//   global variables 
//   html generation 
//   downloading 
//   link generation 
//   manipulation functions 
//   tests 
//   actions 
//   thingies 
////////////////////////////////////////////////////////////////////
// Utility functions
////////////////////////////////////////////////////////////////////
function time() {
  var d=new Date();
  return d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds() +
    '.' + (d.getTime() % 1000);
};
var gMsg='';
function log(x) { if(gMsg!='')gMsg += '\n'; gMsg+=time() + ' ' + x; };
function myalert(x) { return alert(time()+'\n'+ x); };
////////////////////////////////////////////////////////////////////
// Popup stuff
////////////////////////////////////////////////////////////////////
// livepreview uses a broken hex_md5 function, so we avoid it
function md5_hex(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); };
/////////////////////
// GLOBAL VARIABLES //
//////////////////////
// regexes
var exceptions=RegExp('((title=|/)Special:|section=)') ;
var contributions=RegExp('(title=|/)Special:Contributions(&target=|/|/User:)(.*)') ;
var emailuser=    RegExp('(title=|/)Special:Emailuser' +'(&target=|/|/User:)(.*)') ;
var talk=RegExp('Talk:', 'i') ;
//                      (^|\]* ]) * 
//                      (^|\]* ])(]*(+) *px)?
//                                                        $4 = 120 as in 120px
var imageRegex= RegExp('(^|\\]* ])(]*(+) *px)?',
                       'img') ;
var imageRegexBracketCount = 4;
var categoryRegex= RegExp('\\]* ]) *', 'i') ;
var categoryRegexBracketCount = 1;
var stubRegex= RegExp('stub|This .*-related article is a .*stub', 'im') ;
var disambigRegex= 
  RegExp('(disambig|disambig|dab)' +
         '|is a .*disambiguation.*page', 'im') ;
var ipUserRegex=RegExp('(User:)?' + 
                       '((25|2|1||)\\.){3}' + 
                       '(25|2|1||)');
var oldidRegex=RegExp('oldid=(*)');
var splitLoc=window.location.href.split('/');
var thisWiki=splitLoc;
var wikimediaWiki=RegExp('wiki\(edia\|source\|books\)\.org\|wiktionary\.org').test(thisWiki);
var localWiki=RegExp('^localhost').test(thisWiki);
var protocol=splitLoc.split(':');
var titletail='/index.php?title=';
if (wikimediaWiki) titletail = '/w' + titletail;
else if (localWiki) titletail = '/wiki' + titletail;
// eg sourceJS('http://www.bosrup.com/web/overlib/overlib.js');
function sourceJS(url) {
  var str='<script type="text/javascript" src="';
  str += url;
  str += '"></script>';
  return document.write(str);
};
// eg sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/overlib.js');
function sourceWikipediaJS(wiki, name) {
  var url='http://' + wiki + titletail;
  url += name;
  url += '&action=raw&ctype=text/javascript&dontcountme=s';
  return sourceJS(url);
};
// eg sourceLupinJS('overlib');
function sourceLupinJS(name) {
  return sourceWikipediaJS('en.wikipedia.org', 'User:Lupin/'+name + '.js');
};
/* // include files directly for a better response
if (thisWiki.indexOf('localhost') == 0) {
  sourceWikipediaJS(thisWiki, 'User:Lupin/livepreview.js');
  sourceWikipediaJS(thisWiki, 'User:Lupin/overlib.js');
  sourceWikipediaJS(thisWiki, 'User:Lupin/md5-2.2alpha.js');
} else {
  sourceLupinJS('livepreview');
  sourceLupinJS('overlib');
  sourceLupinJS('md5-2.2alpha');
}
*/
// /REGEX
// we're not set up for interwiki stuff yet - only affect en, commons 
// and wiktionary links
var reStart='*://';
var preTitles='wiki/|w/index\\.php\\?title=';
if (!wikimediaWiki) {
  preTitles = 'wiki/index\\.php\\?title=|wiki/index\\.php/|'+preTitles
    + '|index\\.php\\?title=' ;
}
var reEnd='/(' + preTitles + ')(*)';
var re = RegExp(reStart + thisWiki.split('.').join('\\.') + reEnd);
var titlebase=protocol+'://'+thisWiki+titletail;     
var wikibase=protocol+'://'+thisWiki+'/';
var popupImagesToggleSize=true;
var popupImageSize=60;
var imageSources=new Array ();
imageSources.push(
   {active: false, wiki: thisWiki, thumb: true,  width: popupImageSize}, 
   {active: false, wiki: thisWiki, thumb: true,  width: 180}, // default
   {active: false, wiki: thisWiki, thumb: true,  width: 120}, // gallery
   {active: false, wiki: thisWiki, thumb: true,  width: 200}, // common?
   {active: false, wiki: thisWiki, thumb: true,  width: 210},
   {active: false, wiki: thisWiki, thumb: true,  width: 230},
   {active: false, wiki: thisWiki, thumb: true,  width: 250}, // common?
   {active: false, wiki: thisWiki, thumb: true,  width: 300},
   {active: false, wiki: thisWiki, thumb: false, width: 0} // no comma
);
if (wikimediaWiki && thisWiki!='commons.wikimedia.org') {
  imageSources.push(
   {active: false, wiki: 'commons.wikimedia.org', 
     thumb: true,  width: popupImageSize},
   {active: false, wiki: 'commons.wikimedia.org', 
     thumb: true,  width: 180},
   {active: false, wiki: 'commons.wikimedia.org', 
     thumb: true,  width: 120},
   {active: false, wiki: 'commons.wikimedia.org', 
     thumb: false, width: 0} // no trailing comma
  );
}
// downloading images are put here
var imageArray=new Array();
// page caching
var gCachedPages = new Array ();
var gImageCache = new Array();
// FIXME what is this for?
var gImage=null; // global for image
// check to see if images are done with this timer
var popupImageTimer=null;
// misc debug messages
var popupDebug=null;
// These are for checkImages()
var counter=0;
var checkImagesTimer=null;
var loopcounter=0;
// ids change with each popup: popupImage0, popupImage1 etc
var popupImageId=0;
var kateBase='http://kohl.wikimedia.org/~kate/cgi-bin/count_edits' 
             + '?dbname='
switch(thisWiki) {
 case 'commons.wikimedia.org': kateBase += 'commonswiki';
   break;
 case  'en.wiktionary.org': kateBase += 'enwiktionary';
   break;
 default: kateBase += 'enwiki';
}
kateBase += '&user=';
// for myDecodeURI
var decodeExtras = new Array ();
decodeExtras.push ( 
  {from: '%2C', to: ',' },
  {from: '_',   to: ' ' },
  {from: '%26',   to: '&' } // no ,
);
// for setPopupHTML - needed for timers and stuff
var popupHTMLTimers=new Array();
var popupHTMLLoopFunctions = new Array();
// FIXME - eliminate this
var redirCount=0;
// Cookie handling
// pasted straight from http://www.quirksmode.org/js/cookies.html
function createCookie(name,value,days)
{
  if (days)
    {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
};
function readCookie(name)
{
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++)
    {
      var c = ca;
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
  return null;
};
function eraseCookie(name)
{
  createCookie(name,"",-1);
};
// options
// if there's no cookie, this should expand to something like
// if (window.foo===null) window.foo=window.dfoo;
function defaultize(x) {
  var val=null;
  var a='window.'+x;
  var b='window.d'+x;
  if (x!='popupCookies') {
    defaultize('popupCookies');
    if (popupCookies && (val=readCookie(x))) {
      eval(a + '=' + val + ';');
      return;
    }
  }
  eval('if ('+a+'===null) '+a+'=' + b + ';');
};
// this should expand to something like
// if (typeof window.foo=='undefined') { window.foo=null; }; window.dfoo = 0.5;
function newOption(x, def) {
  var a='window.'  + x;
  var b='window.d' + x;
  eval('if (typeof '+ a + '==\'undefined\') {' + a + '=null; }; ' + 
       b + '=' + def + ';');
};
// user-settable parameters and defaults
newOption('popupDelay', 0.5);
newOption('removeTitles', true);
newOption('imagePopupsForImages', true);
newOption('popupSummaryData', true);
newOption('simplePopups',  false);
newOption('popupAdminLinks',  false);
newOption('popupImages', true);
newOption('popupPreviews', true);
newOption('popupMaxPreviewSentences', 4);
newOption('popupMaxPreviewCharacters', 600);
newOption('popupNavLinks', true);
newOption('popupNavLinkSeparator', "' &sdot; '");
newOption('popupOnlyArticleLinks', true);
newOption('popupNeverGetThumbs', false);
newOption('popupImagesFromThisWikiOnly', false);
newOption('popupAppendRedirNavLinks', true);
newOption('popupMaxWidth', 300);
newOption('popupSimplifyMainLink', true);
newOption('popupMinImageWidth', 50);
newOption('popupLastEditLink', true);
newOption('popupHistoricalLinks', true);
newOption('popupFixRedirs', true);
newOption('popupLiveOptions', false);
newOption('popupCookies', false);
newOption('popupUnsimplifyLink', false);
// browser-specific hacks
// if (typeof window.opera != 'undefined') {}
if ((self.navigator.appName)=='Konqueror') {
  dpopupNavLinkSeparator=' &bull; ';
} else if ((self.navigator.appName).indexOf("Microsoft")!=-1) {
  dpopupNavLinkSeparator=' &#183; ';
}
// String.prototype.parenSplit should do what ECMAscript says 
// String.prototype.split does, interspersing paren matches between
// the split elements
if (String('abc'.split(/(b)/))!='a,b,c') {
  // broken String.split, e.g. konq, IE
  String.prototype.parenSplit=function (re) {
    var m=re.exec(this);
    if (!m) return ;
    // without this, we have 
    // 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/)
    for(var i=0; i<m.length; ++i) {
      if (typeof m=='undefined') m='';
    }
    return 
      .concat(m.slice(1))
      .concat(this.substring(m.index+m.length).parenSplit(re));
  };
} else {
  String.prototype.parenSplit=function (re) {return this.split(re);};
}
/////////////////////
// HTML GENERATION //
/////////////////////
// generate html for popup image
// <a id="popupImageLinkn"><img id="popupImagen">
// where n=popupImageId
function imageHTML(article) {
  var ret='';
  popupImageId++;
  ret += '<a id="popupImageLink' + popupImageId + '">';
  ret += '<img align="right" valign="top" id="popupImage' + popupImageId + '" ' 
    + 'style="display: none;"></img>';
  ret += '</a>';
  return ret;
};
function isInToc(a) {
  return isSubElementOf(a,'toc');
};
function isInArticle(a) { 
  // content is for monobook.. damn. was hoping to avoid skin references
  if (document.getElementById('article')) return isSubElementOf(a, 'article');
  else return isSubElementOf(a, 'content');
};
function isSubElementOf(a, tag) {
  var obj = a;
  var i=0;
  // this may well slow things down when this function is iterated
  // would perhaps be more efficient to cache this result before the 
  // function is called. or maybe the browser does that magically anyway
  var tagged=document.getElementById(tag);
  if (!tagged) return false;
  do {obj = obj.parentNode; ++i; }
  while (obj != tagged && obj.nodeName != 'HTML');
  if (obj.nodeName == 'HTML') return false;
  return true;
};
function articleFromURL(h) {
  if (typeof h != 'String') h=String(h);
  var article=null;
  var contribs=contributions.exec(h);
  if (contribs != null) {
    article='User:'+contribs;
    return article;
  } 
  var email=emailuser.exec(h);
  if (email != null) {
    article='User:'+email;
    return article;
  } 
  // no more special cases to check --
  // hopefully it's not a disguised user-related page
  var m=re.exec(h);
  if(m===null) return null;
  article=m;
  return article;
};
function articleFromAnchor(a) {
  // log('articleFromAnchor');
  var h=a.href;
  return articleFromURL(h);
};
function oldidFromAnchor(a) {
  // log('oldidFromAnchor');
  var h=a.href;
  var m=oldidRegex.exec(h);
  if (m) return m;
  return null;
};
// Generate html for whole popup
function popupHTML (a) {
  var c=a.className;
  // if (c=='new') alert('new!');
  var article = articleFromAnchor(a);
  var html='';
  html +=imageHTML(article);
  var hint=a.originalTitle;
  if (hint == '' || hint == null)
    hint = safeDecodeURI(article);
  var oldid=null;
  defaultize('popupHistoricalLinks');
  if (popupHistoricalLinks)
    oldid=oldidFromAnchor(a);
  defaultize('popupNavLinks');
  if (popupNavLinks)
    html += navLinksHTML(article, hint, oldid);
  defaultize('popupUnsimplifyLink');
  if (popupUnsimplifyLink)
    html += popupUnsimplifyHTML();
  html += emptySpanHTML('popupWarnRedir',   popupImageId);
  html += emptySpanHTML('popupGubbins'  ,   popupImageId);
  html += emptySpanHTML('popupLiveOptions', popupImageId);
  html += emptySpanHTML('popupPreview'  ,   popupImageId);
  return html;
}; 
function popupUnsimplifyHTML() {
  var html = '';
  html += '<span id="popupUnsimplifySpan' + popupImageId + '">';
  html += '<br>';
  html += '<span onClick="javascript:popupUnsimplify()" ' 
    + 'style="cursor:pointer; border: thin dotted black" ' 
    + 'title="Download preview data from the Misplaced Pages servers">' 
    + 'Get preview data' 
    + '</span>';
  html += '</span>';
  return html;
};
function popupUnsimplify() {
};
function isIpUser(user) {
  return ipUserRegex.test(user);
};
function popupToggleVar(varstring) {
  defaultize(varstring);
  eval('window.'+varstring+'=!window.' + varstring);
  defaultize('popupCookies');
  if (popupCookies) {
    createCookie(varstring, String(eval(varstring)));
  }
};
newOption('popupLiveOptionsExpanded', false);
function popupToggleShowOptions (dummy) {
  defaultize('popupLiveOptionsExpanded');
  if (!dummy) window.popupLiveOptionsExpanded=!window.popupLiveOptionsExpanded;
  setPopupHTML((window.popupLiveOptionsExpanded) ? '&lt;&lt;' : '&gt;&gt;',
               'optionPopped');
  var s=document.getElementById('popupOptionsDiv');
  // if (!s) return;
  if (window.popupLiveOptionsExpanded) s.style.display='inline';
  else s.style.display='none';
};
function popupOptionsCheckboxHTML(varstring, label, title) {
  var html='<br>';
  html += '<span title="'+title+'">';
  html += '<input type="checkbox" id="'+varstring+'Checkbox" ';
  html += (eval(varstring)) ? 'checked="checked" ' : '';
  html += 'onClick="javascript:popupToggleVar(' + "'" + varstring + "'" + 
    ')">' + label + '</input></span>';
  return html;
};
function popupLiveOptionsHTML() {
  defaultize('simplePopups');
  defaultize('popupUnsimplifyLink');
  var html = '';
  html += '<br>';
  html += '<span title="Show/hide options" ';
  html += 'style="border: thin dotted black; cursor: pointer" ';
  html += 'onClick="javascript:popupToggleShowOptions()">';
  html += 'Options <span id="optionPopped' + popupImageId 
    + '"></span>';
  html += '</span>';
  html += '<div style="display: none" id="popupOptionsDiv">';
  html += popupOptionsCheckboxHTML('simplePopups', 'Simple popups', 
               'Never download extra stuff for images/previews');
  html += popupOptionsCheckboxHTML('popupUnsimplifyLink', 'Preview only on click', 
               'Only start downloading when told to do so');
  //html += popupOptionsCheckboxHTML('popupCookies', 'cookies', 
  //             'Use cookies to store popups options');
  html += popupOptionsCheckboxHTML('popupNavLinks', 'Show navigation links', 
               'Display navigation links at the top of the popup');
  html += popupOptionsCheckboxHTML('popupImages', 'Show image previews', 
               'Load images');
  html += popupOptionsCheckboxHTML('popupSummaryData', 'Show summary data', 
               'Show page summary data');
  html += popupOptionsCheckboxHTML('popupPreviews', 'Show text previews', 
               'Show previews');
  var extraOptions=[
                    'imagePopupsForImages',
                    'popupAdminLinks',
                    'popupAppendRedirNavLinks',
                    'popupCookies',
                    'popupFixRedirs',
                    'popupHistoricalLinks',
                    'popupImagesFromThisWikiOnly',
                    'popupLastEditLink',
                    'popupLiveOptions',
                    'popupNeverGetThumbs',
                    'popupOnlyArticleLinks',
                    'popupSimplifyMainLink',
                    'removeTitles' // no ,
  ];
  for (var i=0; i<extraOptions.length; ++i) {
    html += popupOptionsCheckboxHTML(extraOptions, extraOptions, 
                                     'Toggle this option');
  }
  html += '</div>';
  return html;
};
function mainLinkHTML(article, hint, oldid) {
  var html='';
  var visibleMainLinkText=safeDecodeURI(article);
  defaultize('popupSimplifyMainLink');
  if ( popupSimplifyMainLink ) { 
    var s= visibleMainLinkText.split('/');
    visibleMainLinkText = s;
    if (visibleMainLinkText == '' && s.length > 1) {
      // shouldn't happen...
      visibleMainLinkText=s;
    }
  }
  if (typeof hint =='undefined') hint=safeDecodeURI(article);
  if (oldid) hint = 'Revision '+ oldid +' of ' + hint;
  html+='<b>';
  html+=titledWikiLink(article, 'view', visibleMainLinkText, hint, oldid);
  if (oldid)
    html+='|' + titledWikiLink(article, 'view', 'cur', 
                               'Current revision of '+visibleMainLinkText);
  html+='</b>';
  defaultize('popupLastEditLink');
  if (popupLastEditLink) {
    html += popupNavLinkSeparator 
      + titledDiffLink(article, 'lastEdit', 
                       'Show the last edit made to '+visibleMainLinkText,
                       'prev', 'cur');
  }
  if (oldid) {
    if (popupLastEditLink) html += '|';
    else html += popupNavLinkSeparator;
    html += titledDiffLink(article, 'oldEdit', 
                           'Show the edit made to get revision '+ oldid,
                           'prev', oldid); 
    html += '|' + titledDiffLink(article, 'diffCur',
                           'Show differences between revision '+oldid
                           +' and the current revision',
                           oldid, 'cur');
  }
  return html;
};
function emptySpanHTML(name, id) {
  return '<span id="' + name + id + '"></span>';
};
function userNavLinksHTML(article) {
  // contribs - count - email - block
  // count only if applicable; block only if popupAdminLinks
  var html = '';
  html += contribsLink(article, 'contribs');
  var k = kateLink(article, 'count'); 
  if (k) html += popupNavLinkSeparator + kateLink(article, 'count');
  html += popupNavLinkSeparator + emailLink(article, 'email');
  if (popupAdminLinks) html += popupNavLinkSeparator + blockLink(article, 'block');
  return html;
};
function reportErrorHTML(err) {
  return 'Error: '+err+ ' Please <a href="' + 
    'http://en.wikipedia.org/User_talk:Lupin?action=edit&section=new' + 
    '">report this</a>!';
};
// this function, rather ugly
function editingNavLinksHTML(article, oldid) {
  // edit - history - un|watch - talk|edit|new, OR (if a talk page)
  // edit|new - history - un|watch - article|edit
  var html = '';
  var t=talkPage(article);
  if (t) {
    // it's not a talk page
    if (oldid) {
      html += wikiLink(article, 'edit', 'editOld', oldid)
        + '|' + wikiLink(article, 'edit', 'cur', null);
    } else {
      html += wikiLink(article, 'edit', 'edit');
    }
    html += popupNavLinkSeparator + wikiLink(article, 'history', 'history');
    html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un') 
      + '|' + wikiLink(article, 'watch', 'watch');
    html += popupNavLinkSeparator + 
      '<b>' + wikiLink(t, 'view', 'talk') + '</b>' +
      '|' + wikiLink(t, 'edit', 'edit') +
      '|' + wikiLink(t, 'edit&section=new', 'new');
  } else {
    var ta=articleFromTalkPage(article);
    if (!ta) return reportErrorHTML('Not a talk page and not an article.');
    // it's a talk page
    if (oldid) {
      html += wikiLink(article, 'edit', 'editOld', oldid)
        + '|' + wikiLink(article, 'edit', 'cur', null);
    } else {
      html += wikiLink(article, 'edit', 'edit');
    }
    html += '|' + wikiLink(article, 'edit&section=new', 'new');
    html += popupNavLinkSeparator + wikiLink(article, 'history', 'history');
    html += popupNavLinkSeparator + wikiLink(article, 'unwatch', 'un') 
      + '|' + wikiLink(article, 'watch', 'watch');
    html += popupNavLinkSeparator + 
      '<b>' + wikiLink(ta, 'view', 'article') + '</b>' +
      '|' + wikiLink(ta, 'edit', 'edit');
  }
  return html;
};
function miscNavLinksHTML(article) {
  // whatLinksHere - relatedChanges - move
  var html='';
  html += specialLink(article, 'Whatlinkshere', 'whatLinksHere');
  html += popupNavLinkSeparator + specialLink(article, 'Recentchangeslinked', 
                                              'relatedChanges');
  html += popupNavLinkSeparator + specialLink(article, 'Movepage', 'move');
  return html;
};
function adminNavLinksHTML(article) {
  var html = '';
  html += wikiLink(article, 'unprotect', 'un') + '|';
  html += wikiLink(article, 'protect', 'protect');
  html += popupNavLinkSeparator + undeleteLink(article, 'un') + '|';
  html += wikiLink(article, 'delete', 'delete');
  return html;
};
function navLinksHTML (article, hint, oldid) {
  var html='';
  defaultize('popupNavLinkSeparator');
  html += mainLinkHTML(article, hint, oldid);
  // Get rid of anchor (or whatever the bit after the # is called) now
  article=removeAnchor(article);
  // span for blinkenlights
  html+=emptySpanHTML('popupImageStatus', popupImageId);
  defaultize('popupAdminLinks');
  if (userName(article) != null) 
    html += '<br>' + userNavLinksHTML(article);
  html += '<br>' + editingNavLinksHTML(article, oldid);
  html += '<br>' + miscNavLinksHTML(article);
  if (popupAdminLinks) 
    html += '<br>' + adminNavLinksHTML(article);
  return html;
};
/////////////////
// DOWNLOADING //
/////////////////
//////////////
//
// downloader
//
//
function downloader(url) {
  // Source: http://jibbering.com/2002/4/httprequest.html
  this.http= false;
  /*@cc_on @*/
  /*@if (@_jscript_version >= 5)
  // JScript gives us Conditional compilation, 
  // we can cope with old IE versions.
  // and security blocked creation of the objects.
  try {
  this.http = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
  try {
  this.http = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
  // this.http = false;
  }
  }
  @end @*/
  if (! this.http && typeof XMLHttpRequest!='undefined') {
    this.http = new XMLHttpRequest();
  }
  this.url = url;
  this.id=null;
  this.callbackFunction = null;
};
new downloader();
downloader.prototype.send = function (x) {
  if (!this.http) return;
  return this.http.send(x);
};
downloader.prototype.abort = function () {
  if (!this.http) return;
  return this.http.abort();
};
downloader.prototype.setCallback = function (f) { 
  if(!this.http) return;
  this.http.onreadystatechange = f;
  this.callbackFunction = f;
};
downloader.prototype.runCallback = function () {
  this.callbackFunction(this);
};
downloader.prototype.getData = function () { 
  if(!this.http) return;
  return this.http.responseText;
};
downloader.prototype.setTarget = function () { 
  if(!this.http) return;
  this.http.open("GET", this.url, true); 
};
downloader.prototype.start=function () { 
  // alert('downloader instance got told to start()');
  if(!this.http) return;  
  return this.http.send(null);
};
downloader.prototype.getReadyState=function () {
  if(!this.http) return;
  return this.http.readyState;
};
function newDownload(url, id, callback) {
  var d=new downloader(url);
  d.id=id;
  d.setTarget();
  var f = function () {
    if (d.getReadyState() == 4)
    { d.data=d.getData(); callback(d);}
  };
  d.setCallback(f);
  return d;//d.start();
};
function fakeDownload(url,id,callback,data) {
  var d=newDownload(url,callback);
  d.id=id;
  d.data=data;
  return callback(d);
};
function startDownload(url, id, callback) {
  var d=newDownload(url, id, callback);
  d.start();
};
//
//
// downloader
//
//////////////
// Schematic for a getWiki call
//
//   getWiki->-getPageWithCaching
//                    |
//       false        |          true
// getPage<-->-onComplete(a fake download)
//   \.
//     (async)->addPageToCache(download)->-onComplete(download)
function getWiki(wikipage, onComplete, oldid) {
  // set global variable (ugh) to holdwikipage
  window.currentArticle=wikipage;
  // log('getWiki, wikipage='+wikipage); 
  // set ctype=text/css to get around opera bug
  var url = titlebase + removeAnchor(wikipage) + '&action=raw&ctype=text/css';
  if (oldid!=null && oldid!='')
    url += '&oldid='+oldid;
  return getPageWithCaching(url, onComplete);
};
// check cache to see if page exists
function getPageWithCaching(url, onComplete) {
  log ('getPageWithCaching, url='+url);
  var i=findInPageCache(url);
  if (i > -1) {
    return fakeDownload(url, popupImageId, onComplete, gCachedPages.data);
  }
  return getPage(url, onComplete);
};
function getPage(url, onComplete) {
  log ('getPage, url='+url);
  var callback= function (d) { 
    // log('callback from getPage activated');
    addPageToCache(d); onComplete(d) } ;
  return startDownload(url, popupImageId, callback);
};
function findInPageCache(url) {
  for (var i=0; i<gCachedPages.length; ++i) {
    if (url==gCachedPages.url) return i;
  }
  return -1; 
};
function cachedPage (url,data) {
  this.url=url;
  this.data=data;
};
function addPageToCache(download) {
  log ('addPageToCache, page.url='+download.url);
  var page = new cachedPage(download.url, download.data);
  return gCachedPages.push(page);
};
/*
  var gCurrentDownload = null;
  function abortCurrentDownload(download) {
  if (gCurrentDownload) {
  try { gCurrentDownload.abort(); }
  catch (anerror) {return 'could not abort download object';}
  }
  return true;
  }
*/
/////////////////////
// LINK GENERATION //
/////////////////////
function titledDiffLink(article, text, title, from, to) {
  return titledWikiLink(article, 
                        to + '&oldid=' + from,   
                        text,
                        title,
                        null,
                        'diff');
};
function wikiLink(article, action, text, oldid) {
  var prehint=null;
  switch (action) {
  case 'edit':             prehint = 'Edit ';                 break;
  case 'history':          prehint = 'Show history for ';     break;
  case 'unwatch':          prehint = 'Stop watching ';        break;
  case 'watch':            prehint = 'Watch ';                break;
  case 'view':             prehint = 'Go to ';                break;
  case 'unprotect':        prehint = 'Unprotect ';            break;
  case 'protect':          prehint = 'Protect ';              break;
  case 'delete':           prehint = 'Delete ';               break;
  case 'edit&section=new': prehint = 'Start a new topic on '; break;
  default: true;
  }
  if (action!='edit' && action!='view') oldid=null;
  var hint;
  if (prehint != null) {
    if (oldid) prehint += 'revision '+oldid +' of ';
    hint=prehint + safeDecodeURI(article);
  }
  else hint = safeDecodeURI(article + '&action=' + action) 
         + (oldid) ? '&oldid='+oldid : '';
  return titledWikiLink(article, action, text, hint, oldid);
};
function appendParamsToLink(linkstr, params) {
  var sp=linkstr.parenSplit(RegExp('(href="+?)"', 'i'));
  if (sp.length<2) return null;
  var ret=sp.shift() + sp.shift();
  ret += '&' + params + '"';
  ret += sp.join('');
 return ret;
};
function titledWikiLink(article, action, text, title, oldid, actionName) {
  var base = titlebase +  article;
  var url=base;
  // no need to add action&view, and this confuses anchors
  if (typeof actionName=='undefined' || actionName=='') {
    actionName='action';
  }
  if (action != 'view') url = base + '&' + actionName + '=' + action;
  var hint='';
  if (title != null && title != '')
    hint = 'title="' + title + '"'; 
  if (oldid != null && oldid != '')
    url+='&oldid='+oldid;
  return '<a href="' + url + '" ' + hint + '>' + text + '</a>';
};
function specialLink(article, specialpage, text, sep) {
  var base = titlebase +  'Special:'+specialpage;
  if (typeof sep == 'undefined' || sep===null) sep='&target=';
  var url = base + sep + article;
  var prehint=null;
  switch (specialpage) {
  case 'Whatlinkshere':       prehint='Show articles which link to '; break;
  case 'Recentchangeslinked': prehint='Show changes in articles related to '; break;
  case 'Contributions':       prehint='Show contributions made by '; break;
  case 'Emailuser':           prehint='Email '; break;
  case 'Blockip':             prehint='Block '; break;
  case 'Movepage':            prehint='Move '; break;
  case 'Undelete':            prehint='Show deletion history for '; break;
  }
  var hint;
  if (prehint != null) hint = prehint + safeDecodeURI(article);
  else hint = safeDecodeURI(specialpage+':'+article) ;
  return '<a href="' + url + '" title="' + hint + '">' + text + '</a>';
};
function literalizeRegex(str){
  return str.replace(RegExp('(])', 'g'), '\\$1');
};
function redirLink(redirMatch) { 
  /* NB redirMatch is in wikiText */
  defaultize('popupAppendRedirNavLinks');
  defaultize('popupNavLinks');
  defaultize('popupFixRedirs');
  var ret='';
  if (popupAppendRedirNavLinks && popupNavLinks) {
    ret += '<hr>';
    if (popupFixRedirs && typeof autoEdit != 'undefined' && autoEdit) {
      // this'll break if charAt(0) is nasty
      var cA=literalizeRegex(decodeURI(window.currentArticle));
      var chs=cA.charAt(0).toUpperCase();
      chs='';
      var currentArticleRegexBit=chs+cA.substring(1);
      currentArticleRegexBit=currentArticleRegexBit
        .split(RegExp('', 'g')).join('');
/*       alert('window.currentArticle='+window.currentArticle + */
/*             '\ncA='+cA + */
/*             '\ncurrentArticleRegexBit='+currentArticleRegexBit); */
      // autoedit=s~\ad)\]\]~]~g;s~\AD)~[[Computer-aided%20design|~g
      var lk=titledWikiLink(removeAnchor(articleFromURL(document.location)),
                            'edit', 'Redirects',
                            'Fix this redirect');
      var cmd='s~\\\\]~]~g;';
      cmd +=  's~\\~[['+redirMatch+'|~g';
      cmd += '&autoclick=wpDiff';
      cmd += '&autominor=true';
      cmd += '&autosummary=Bypassing redirect from [[' + window.currentArticle.split('_').join(' ')
        + ']] to ]';
      ret += appendParamsToLink(lk, 'autoedit='+cmd);
      ret += ' to ';
    }
    else ret += 'Redirects to ';
    ret += navLinksHTML(wikiMarkupToAddressFragment(redirMatch));
    return ret;
  }
  else return '<br> Redirects to ' +
         titledWikiLink(myEncodeURI(redirMatch), 'view', 
                        safeDecodeURI(redirMatch), 'Bypass redirect');
};
function doNotRedirLink(redirPage, linkText, hintText) { 
  /* NB redirPage is in wikiText */
  return titledWikiLink(myEncodeURI(redirPage), 'edit', linkText, hintText);
};
function contribsLink(article, text) {
  return specialLink(userName(article), 'Contributions', text);
};
function emailLink(article, text) {
  return specialLink(userName(article), 'Emailuser', text);
};
function blockLink(article, text) {
  return specialLink(userName(article), 'Blockip', text, '&ip=');
};
function kateLink(article, text) {
  if (isIpUser(userName(article)) || ! wikimediaWiki) return null;
  var uN=safeDecodeURI(userName(article));
  return '<a href="' + kateBase + uN + '" title="'
    + 'Count the contributions made by ' + uN + '">' + text + '</a>';
};
function undeleteLink(article, text) {
  return specialLink(article, 'Undelete', text, '/');
};
////////////////////////////
// MANIPULATION FUNCTIONS //
////////////////////////////
function upcaseFirst(str) {
  return str.charAt(0).toUpperCase() + str.substring(1);
};
function formatBytes(num) {
  return (num > 949) ? (Math.round(num/100)/10+'kB') : (num +'&nbsp;bytes') ;
};
function popupFilterStubDetect(data) {
  return (isStub(data)) ? 'stub' : '';
};
function popupFilterDisambigDetect(data) {
  return (isDisambig(data)) ? 'disambig' : '';
};
function popupFilterPageSize(data) {
  return formatBytes(data.length);
};
function popupFilterCountLinks(data) {
  var num=countLinks(data);
  return String(num) + '&nbsp;wikiLink' + ((num!=1)?'s':'');
};
function popupFilterCountImages(data) {
  var num=countImages(data);
  return String(num) + '&nbsp;image' + ((num!=1)?'s':'');
};
function popupFilterCountCategories(data) {
  var num=countCategories(data);
  return String(num) + '&nbsp;categor' + ((num!=1)?'ies':'y');
};
var popupFilters=new Array();
popupFilters.push(popupFilterStubDetect);
popupFilters.push(popupFilterDisambigDetect);
popupFilters.push(popupFilterPageSize);
popupFilters.push(popupFilterCountLinks);
popupFilters.push(popupFilterCountImages);
popupFilters.push(popupFilterCountCategories);
if (typeof extraPopupFilters=='undefined') { var extraPopupFilters=new Array(); }
function getPageInfo(data) {
  if (!data || data.length == 0) return 'Empty page';
  var pageInfoArray=new Array();
  for (var i=0; i<popupFilters.length; ++i) {
    var s=popupFilters(data);
    if (s!='') pageInfoArray.push(s);
  }
  for (var i=0; i<extraPopupFilters.length; ++i) {
    var s=extraPopupFilters(data);
    if (s!='') pageInfoArray.push(s);
  }
  var pageInfo=pageInfoArray.join(', ');
  if (pageInfo != '' ) 
    pageInfo = upcaseFirst(pageInfo);
  return pageInfo;
};     
function getValidImageFromWikiText(wikiText) {
  var imagePage=null;
  // nb in imageRegex we're interested in the second bracketed expression 
  // this may change if the regex changes :-(
  //var match=imageRegex.exec(wikiText);
  var matched=null;
  var match;
  defaultize('popupMinImageWidth');
  while ( match = imageRegex.exec(wikiText)) {
    /* now find a sane image name - exclude templates by seeking { */
    var m = match;
    var pxWidth=match;
    if ( isValidImageName(m) && 
         (!pxWidth || parseInt(pxWidth) >= popupMinImageWidth) ) { 
      matched=m; 
      break;
    }
  } 
  imageRegex.lastIndex=0;
  if (!matched) return null;
  if (matched.charAt(0) >= 'a' && matched.charAt(0) <= 'z') {
    // upcase first character if ascii
    matched = upcaseFirst(matched);
  }
  imagePage='Image:'+matched;
  return imagePage;
};
function countLinks(wikiText) { 
  // this could be improved!
  return wikiText.split('[[').length - 1;
};
// if N = # matches, n = # brackets, then
// String.parenSplit(regex) intersperses the N+1 split elements
// with Nn other elements. So total length is
// L= N+1 + Nn = N(n+1)+1. So N=(L-1)/(n+1).
function countImages(wikiText) {
  return (wikiText.parenSplit(imageRegex).length - 1) / 
    (imageRegexBracketCount + 1);
};
function countCategories(wikiText) {
  return (wikiText.parenSplit(categoryRegex).length - 1) /
    (categoryRegexBracketCount + 1);
};
function talkPage(article) {
  if (article.indexOf('Talk:') > -1 || article.indexOf('talk:') > -1 ) 
    return null;
  var i=article.indexOf(':');
  if (i == -1) return 'Talk:'+article;
  else return article.substring(0,i)+'_talk:' + article.substring(i+1);
};
function articleFromTalkPage(talkpage) {
  var i=talkpage.indexOf('Talk:');
  var j=talkpage.indexOf('_talk:');
  if ( i == -1 && j  == -1 ) return null;
  if ( i > -1 ) return talkpage.substring(i+5);
  return talkpage.split('_talk:').join(':');
};
function userName(article) {
  var i=article.indexOf('User');
  var j=article.indexOf(':');
  if  (i != 0 || j < -1) return null;
  var k=article.indexOf('/');
  if (k==-1) return article.substring(j+1);
  else return article.substring(j+1,k);
};
function stripNamespace(article) {
  // this isn't very sophisticated 
  // it just removes everything up to the final :
  var list = article.split(':');
  return list;
};
function imagePathComponent(article) {
  var stripped=stripNamespace(article);
  var forhash=safeDecodeURI(stripped).split(' ').join('_');
  var hash=md5_hex(forhash);
  var pathcpt=hash.substring(0,1) + '/' + hash.substring(0,2) + '/';
  return pathcpt;
};
function getImageUrlStart(wiki) { // this returns a trailing slash
  switch (wiki) {
    case 'en.wikipedia.org':  
      return 'http://upload.wikimedia.org/wikipedia/en/';
    case 'commons.wikimedia.org':
      return 'http://upload.wikimedia.org/wikipedia/commons/';
    case 'en.wiktionary.org':
      return 'http://en.wiktionary.org/upload/en/';
    default: // unsupported - take a guess
      if (wikimediaWiki) {
        var lang=wiki.split('.');
        return 'http://' + wiki + '/upload/' + lang +'/';
      }
      else /* this should work for wikicities */
        return 'http://' + wiki + '/images/';
  }
};
function imageURL(img, wiki) {
  defaultize('popupImagesFromThisWikiOnly');
  if (popupImagesFromThisWikiOnly && wiki != thisWiki) return null;
  var imgurl=null;
  if (isImage(img)) {
    var pathcpt = imagePathComponent(img);
    var stripped=stripNamespace(img);
    imgurl=getImageUrlStart(wiki) + pathcpt + stripped;
  }
  return imgurl;
};
function imageThumbURL(img, wiki, width) {
  // 
  // eg http://upload.wikimedia.org/wikipedia/en/thumb/6/61/ 
  //           Rubiks_cube_solved.jpg/120px-Rubiks_cube_solved.jpg
  //           ^^^^^^^^^^^^^^^^^^^^^^^ 
  //          wikicities omits this bit
  //  AND wikicities needs a new pathcpt for each filename including thumbs
  defaultize('popupImagesFromThisWikiOnly');
  if (popupImagesFromThisWikiOnly && wiki != thisWiki) return null;
  defaultize('popupNeverGetThumbs');
  if (popupNeverGetThumbs) return null;
  var imgurl=null;
  if (isImage(img)) {
    var stripped=stripNamespace(img);
    var pathcpt;
    if (wikimediaWiki) pathcpt = imagePathComponent(stripped);
    else pathcpt = imagePathComponent(width+'px-'+stripped);
    imgurl=getImageUrlStart(wiki) +  "thumb/" + pathcpt;
    if (wikimediaWiki) imgurl += stripped + '/';
    imgurl += width +"px-" + stripped;
  }
  return imgurl;
};
// (a) myDecodeURI (first standard decodeURI, then exceptions)
// (b) change spaces to underscores
// (c) encodeURI (just the straight one, no exceptions)
function wikiMarkupToAddressFragment (str) { // for images
  var ret = safeDecodeURI(str);
  ret = ret.split(' ').join('_');
  ret = encodeURI(ret);
  return ret;
};
function addressFragmentToWikiMarkup (str) { 
  // seemingly, not :( the inverse of wikiMarkupToAddressFragment
  return safeDecodeURI(str);
};
function myDecodeURI (str) {
  log('myDecodeURI, str=' + str);
  var ret;
  try { ret=decodeURI(str); }
  catch (summat) { return null; }
  for (var i=0; i<decodeExtras.length; ++i) {
    var from=decodeExtras.from;
    var to=decodeExtras.to;
    ret=ret.split(from).join(to);
  }
  return ret;
};
function safeDecodeURI(str) {
  var ret=myDecodeURI(str);
  return ret || str;
};
function myEncodeURI (str) {
  log ('myEncodeURI: str='+str);
  var ret=str;
  ret=encodeURI(ret);
  for (var i=0; i<decodeExtras.length; ++i) {
    var from=decodeExtras.from;
    var to=decodeExtras.to;
    ret=ret.split(to).join(from);
  }
  return ret;
};
function removeAnchor(article) {
  // is there a #? if not, we're done
  var i=article.indexOf('#');
  if (i == -1) return article;
  return article.substring(0,i);
};
///////////
// TESTS //
///////////
function isStub(data) { return stubRegex.test(data); };
function isDisambig(data) { return disambigRegex.test(data); };
function isValidImageName(str){ // extend as needed...
  return ( str.split('{').length == 1 );
};
function isInNamespace(article, namespace) {
  var i=article.indexOf(namespace+':');
  var j=article.indexOf(namespace+'_talk:');
  if  (i == -1 && j == -1) return false;
  return true;
};
function isImage(thing) {
  return isInNamespace(thing, 'Image');
};
function isImageOk(img)
{ 
  // IE test
  if (!img.complete)
    return false;
  // gecko test
  if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0)
    return false;
  // test for konqueror and opera   
  // note that img.width must not be defined in the html with a width="..."
  // for this to work.
  // konq seems to give "broken images" width 16, presumably an icon width
  // this test would probably work in gecko too, *except for very small images*
  if (typeof img.width == 'undefined' || img.width <=  16) return false;
  // No other way of checking: assume it's ok.
  return true;
};
function anchorContainsImage(a) {
  // iterate over children of anchor a
  // see if any are images
  if (a===null) return false;
  kids=a.childNodes;
  for (var i=0; i<kids.length; ++i) {
    if (kids.nodeName=='IMG') return true;
  }
  return false;
};
/////////////
// ACTIONS //
/////////////
var imageCache = new Array ();
function loadThisImage (image) {
  if (!popupImages) return;
  if (!isValidImageName(image)) return false;
  if(popupDebug != null)
    alert(msg);
  msg='List of urls:\n';
  var imageUrls=new Array();
  for (var i=0; i<imageSources.length; ++i) {
    var url;
    if (imageSources.thumb) 
      url=imageThumbURL(image, imageSources.wiki, imageSources.width);
    else 
      url=imageURL(image, imageSources.wiki);
    for (var j=0; j<gImageCache.length; ++j) {
      if (url == gImageCache) return loadThisImageAtThisUrl(image, url);
    }
    if (url!=null) imageUrls.push(url);
  }
  msg='imageUrls:\n';
  for (var i=0; i<imageUrls.length; ++i) {
    var url = imageUrls;
    imageSources.active=false;
    msg += '\n'+url; 
    imageArray=new Image();
    imageArray.src=url;
  }
  //myalert(msg); 
  if (popupDebug) alert (msg);
  if (popupImageTimer != null) {
    clearInterval(popupImageTimer);
    counter=0;
  }
  gImage=image;
  popupImageTimer=setInterval("checkImages()", 250);
  return;
};
function loadThisImageAtThisUrl(image, url) {
  //myalert('loading "best" image:\n'+url);
  gImage=image;
  imageArray = new Array();
  imageArray = new Image();
  imageArray.src=url;
  if (popupImageTimer != null) {
    clearInterval(popupImageTimer);
    counter=0;
  }
  popupImageTimer=setInterval("checkImages()", 250);
  return;
};
function loadImages(article) {
  if(! isImage(article) ) return;
  if (popupDebug) alert('loadImages, article='+article);
  return loadThisImage(article);
};
function setPopupHTML (str, elementId, popupId, onSuccess) {
  if (typeof popupId === 'undefined') popupId = popupImageId;
  var popupElement=
    document.getElementById(elementId+popupId);
  var timer;
  if (typeof popupHTMLTimers == 'undefined') {
    timer=null;
  }
  else {
    timer=popupHTMLTimers;
  }
  if (popupElement != null) {
    if(timer) clearInterval(timer);
    popupHTMLTimers=null;
    popupElement.innerHTML=str;
    if (onSuccess) onSuccess();
    return true;
  } else {
    var loopFunction=function() { setPopupHTML(str,elementId,popupId,onSuccess);}
    popupHTMLLoopFunctions = loopFunction;
    if (!timer) {
      var doThis = 'popupHTMLLoopFunctions()';
      popupHTMLTimers = setInterval(doThis, 600);
    }
  }
};
function setImageStatus(str, id) {
  return setPopupHTML(str, 'popupImageStatus', id);
};
function setPopupTrailer(str,id) {
  return setPopupHTML(str, 'popupGubbins', id);
};
function checkImages() {
  if (checkImagesTimer!=null) {
    clearInterval(checkImagesTimer);
    checkImagesTimer=null;
    if (loopcounter > 10); {loopcounter=0; return;}
    loopcounter++;
  } else counter++;
  var status =  ( counter % 2 ) ? ':' : '.' ;
  setImageStatus(status);
  if (counter > 100) {counter = 0; clearInterval(popupImageTimer);}
  var popupImage=null;
  popupImage=document.getElementById("popupImage"+popupImageId);
  if (popupImage == null) {
    // this doesn't seem to happen any more in practise for some reason
    // still, I'll leave it in
    checkImagesTimer=setInterval("checkImages()",333);
    return;
  }
  // get the first image to successfully load
  // and put it in the popupImage
  for(var i = 0; i < imageArray.length; ++i) {
    if(isImageOk(imageArray)) {
      // stop all the gubbins, assign the image and return
      clearInterval(popupImageTimer);
      if(isImage(gImage)) {
        popupImage.src=imageArray.src;
        popupImage.width=popupImageSize;
        popupImage.style.display='inline';
        imageSources.active=true;
        // should we check to see if it's already there? maybe...
        gImageCache.push(imageArray.src); 
        setPopupImageLink(gImage, imageSources.wiki);
        stopImagesDownloading();
      }
      setImageStatus('');
      // reset evil nonconstant globals
      delete imageArray; imageArray=new Array();
      popupImageTimer=null;
      counter=0;
      loopcounter=0;
      return popupImage.src; 
    }
  }
};
function stopImagesDownloading() {
  gImage=null;
  if (imageArray == null) return null;
  var i;
  for (i=0; i<imageArray.length; ++i) {
    //imageArray.src=''; // this is a REALLY BAD IDEA
    delete imageArray;
    //imageArray = new Image();
  }
  imageArray = new Array ();
  return i;
};
function toggleSize() {
  var imgContainer=this;
  if (!imgContainer) { alert('imgContainer is null :/'); return;}
  img=imgContainer.firstChild;
  if (!img) { alert('img is null :/'); return;}
  var msg=''; 
  for (var i=0; i<imgContainer.childNodes.length; ++i)
    msg += '\nimgContainer.childNodes.width=' + 
      imgContainer.childNodes.width;
  if (!img.style.width || img.style.width=='')
    img.style.width='100%'; 
  else img.style.width=''; // popupImageSize+'px';
};
function setPopupImageLink (img, wiki) {
  if( wiki === null || img === null ) return null;
  var a=document.getElementById("popupImageLink"+popupImageId);
  if (a === null) return null; 
  var linkURL = imageURL(img, wiki); 
  if (linkURL != null) {
    if (popupImagesToggleSize) {
      a.onclick=toggleSize;
      a.title='Toggle image size';
    } else {
      a.href=linkURL;
      a.title='Open full-size image';
    }
  }
  return linkURL;
};
var ranSetupTooltipsAlready=false;
function setupTooltips() {
  if (ranSetupTooltipsAlready) return;
  ranSetupTooltipsAlready=true;
  var anchors;
  defaultize('popupOnlyArticleLinks');
  if (popupOnlyArticleLinks)
    anchors=( document.getElementById('article') || 
              document.getElementById('content')   ).getElementsByTagName('A');
  else
    anchors=document.getElementsByTagName('A');
  // alert(anchors.length + 'anchors');
  var s='';
  defaultize('removeTitles');
  for (var i=0; i<anchors.length; ++i) {
    var a=anchors;
    var h=a.href;
    // var contribs=contributions.test(h);
    // var email=emailuser.test(h);
    // var exc=exceptions.test(h);
    // var m=re.test(h);
    if (
        ( (re.test(h)  && !exceptions.test(h)) 
          || 
          (contributions.test(h) && h.indexOf('&limit=') == -1 ) 
        )
        && (! isInToc(a)) 
       ) {
      a.onmouseover=mouseOverWikiLink;
      a.onmouseout= mouseOutWikiLink;
      a.onclick= killPopup;
      if (removeTitles && typeof a.originalTitle=='undefined') {
        a.originalTitle=a.title;
        a.title='';
      }
    }
  }
};
//////////////
// THINGIES //
//////////////
// How the URLs for images in the popup come about
//   loadPreviewImage 
//          |                                  
//       getWiki                                
//          |<----------------see other schematic for details 
//    insertPreviewImage      (insertPreviewImage = onComplete)
//          |
//          |            insertPreviewImage gets a wikiText fragment from 
//          |                       the wikiText downloaded by getWiki
//          |                                   
//           
//       |                                      
//       |                     mouseOverWikiLink  (gets an "address fragment",       
//       |                            |            no processing needed)
//       \->-loadThisImage---<----loadImages    
//                 |                            
//           -->--hopefully valid image urls
var currentLink=null;
function mouseOverWikiLink() {
  // FIXME: should not generate the HTML until the delay has elapsed,
  //        and then popup immediately. Can be a CPU hog otherwise.
  /* // good idea? dunno
     if ( typeof o3_showingsticky != "undefined" && o3_showingsticky != 0 ) {
     return;
     }
  */
  var a=this;
  if (a==currentLink) return;
  else currentLink=a;
  var html = popupHTML(a);
  var article=articleFromAnchor(a); 
  var oldid=oldidFromAnchor(a);
  if (popupImageTimer != null) {
    clearInterval(popupImageTimer);
    counter=0;
  }
  defaultize('popupDelay');
  defaultize('popupImages');
  defaultize('popupMaxWidth');
  log('running overlib now');
  if (typeof popupMaxWidth == 'number') {
    window.setmaxwidth = function () {
      over.style.maxWidth = popupMaxWidth+'px'; 
      // hack for IE
      // see http://www.svendtofte.com/code/max_width_in_ie/
      // who knows if this will work? not me.
      // use setExpression as documented here on msdn: http://tinyurl.com/dqljn 
      if (over.style.setExpression) {
        over.style.setExpression('width', 
                                 'document.body.clientWidth > '
                                 + popupMaxWidth + ' ? "' 
                                 + popupMaxWidth + 'px": "auto" );');
      }
    };
    registerHook("createPopup", window.setmaxwidth, FAFTER);
  }
  // add CSS class to table
  window.addPopupStylesheetClasses = function () {
    var tables=over.getElementsByTagName('table');
    tables.className='popupBorderTable';
    tables.className='popupTable';
    var fonts=over.getElementsByTagName('font');
    fonts.className='popupFont';
  };
  registerHook("createPopup", window.addPopupStylesheetClasses, FAFTER);
  overlib(html, STICKY, WRAP, CELLPAD, 5, OFFSETX, 2, OFFSETY, 2, 
          DELAY, popupDelay*1000);
  defaultize('popupLiveOptions');
  if (popupLiveOptions) {
    setPopupHTML(popupLiveOptionsHTML(), 'popupLiveOptions', popupImageId,
                 function () { popupToggleShowOptions(true); } );
  }
  defaultize('simplePopups');
  if(simplePopups) return;
  window.popupUnsimplify = function () {
    defaultize('imagePopupsForImages');
    var previewImage=true;
    gImage=null;
    if (isImage(article) && ( imagePopupsForImages || ! anchorContainsImage(a) )) {
      loadImages(article);
    }
    else if (!isImage(article) && previewImage) {
      redirCount=0;
      loadPreviewImage(article, oldid);
    }
    var s=document.getElementById('popupUnsimplifySpan' + popupImageId);
    if (s && s.style) {
      s.style.display='none';
    }
  };
  defaultize('popupUnsimplifyLink');
  if (popupUnsimplifyLink) {
    return;
  }
  window.popupUnsimplify();
};
function loadPreviewImage(article, oldid) {
  return getWiki(article, insertPreviewImage, oldid);
};
function loadPreviewImageFromRedir(redirPage, redirMatch) {
  /* redirMatch is a regex match */
  var target = redirMatch;
  var trailingRubbish=redirMatch;
  ++redirCount;
  var warnRedir = redirLink(target);
/*if (trailingRubbish.length > 0) {
    warnRedir += ', '+formatBytes(trailingRubbish.length);
    warnRedir += '&nbsp;' + 
      doNotRedirLink(redirPage, 'hidden', 'Show text hidden after #redirect]');
  }
*/
  setPopupHTML(warnRedir, 'popupWarnRedir');
  return loadPreviewImage(myEncodeURI(target));
};
function extractChunk(str, header, breakChar) {
  if (str.indexOf(header) != 0) return null;
  if (!breakChar) return str.substring(header.length);
  var findChar=str.indexOf(breakChar);
  if (findChar==-1) return str.substring(header.length);
  return str.substring(header.length, findChar);
};
function urlToWikiPage (url) {
  log ('urlToWikiPage\nurl='+url);
  var urlFragment=null;
  if (!urlFragment) urlFragment=extractChunk(url, titlebase, '&');
  if (!urlFragment) urlFragment=extractChunk(url, wikibase, '?');
  if (!urlFragment) return null;
  return addressFragmentToWikiMarkup(urlFragment);
};
function insertPreviewImage(download) {
  if (download.id != popupImageId) return;
  var wikiText=download.data;
  var redirectRegex= RegExp('^*redirect*\\]*)\\]\\]\\s*(.*)',
                            'i') ;
  var redirMatch = redirectRegex.exec(wikiText);
  if (redirMatch && redirCount==0) { 
    return loadPreviewImageFromRedir(urlToWikiPage(download.url), redirMatch);
  } else redirCount=0;
  defaultize('popupSummaryData');
  if (popupSummaryData) {
    var pgInfo=getPageInfo(wikiText);
    setPopupTrailer('<br>' + pgInfo);
  }
  var imagePage=getValidImageFromWikiText(wikiText);
  if(imagePage) {
    // loadThisImage expects an "address fragment"
    imagePage = wikiMarkupToAddressFragment(imagePage); 
    loadThisImage(imagePage);
  }
  defaultize('popupPreviews');
  if (popupPreviews) {popupPreview(download);}
};
var localTest=false;
function popupPreview(download) {
  // FIXME: horizonal rules should be skipped
  // FIXME: get rid of html tagsx
  if (localTest)
    var data = download.substring(0,8000); // FOR TESTING
  else {
    if (!download || typeof download.data=='undefined' 
        || typeof download.data.length=='undefined') return;
    var data=download.data.substring(0,10000); // huge pages be gone
  }
  var datum=new Array();
  datum.push(data.substring(0,1000));
  //   we strip in order:
  // 
  //    * html comments <!-- ... -->
  //    * contents of <div...> ... </div> and <gallery> ... </gallery>
  //    * HACK: {{taxobox_start ... taxobox_end}}
  //    * templates {{ .... }} (replace with spaces so that '''{{template}}''' works)
  //    * wikitext tables 
  //    * wikitext images and category tags
  //    * wikitext rules ----
  //    * lines starting with a :
  //    * html tables
  //    * a mop-up: delete all lines starting with <
  //    * all html tags
  //    * "chunks" of italic text (heuristics alert)
  //    * __TOC__, __NOTOC__
  // hasta la vista, comments
  // NB *? is non-greedy (minimal) version of * - see 
  // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:RegExp
  data=data.replace(RegExp('<!--(\\n|.)*?-->', 'g'), '');
  // say goodbye, divs (can be nested, so use * not *?)
  data=data.replace(RegExp('< *div* *>(.|\\n)*< */ *div *>',
                             'gi'), '');
  // and galleries
  data=data.replace(RegExp('< *gallery* *>(.|\\n)*?< */ *gallery *>',
                             'gi'),
                      '');
  // taxobox hack... in fact, there's a saudiprincebox_begin, so let's be more general
  data=data.replace(RegExp('*boxbegin' + 
                           '(.|\\n)**boxend *',
                           'gi'), '');
  // float_begin, ... float_end
  data=data.replace(RegExp('*floatbegin' + 
                           '(.|\\n)**floatend.*?',
                           'gi'), '');
  // try to remove templates
  data=data.replace(RegExp('(*|)*', 'g'), ' ');
//datum.push(data);
  // tables are bad, too
  data=data.replace
    (RegExp('\\|((|\\|)*||\\|)*\\|', 'g')
     , '');
  datum.push(data.substring(0,1000));
  // remove lines starting with a pipe
  data=data.replace(RegExp('^.*$', 'mg'), '');
  // images are a nono
  // who says regexes aren't fun?
  // this ain't so good, try it on ]
  // i think we should match:
  // ] where ....... is consists of repetitions of any of:
  // 1. not 
  // 2. )* ]] 
  // 3. )* ]
  var imagedetector
    ='\\s*(image|category)\\s*:(]|\\]*\\]\\]|\\]*\\])*\\]\\]';
  var crudeImageRegex = RegExp(imagedetector, 'gi');
  // alert(data.match(crudeImageRegex).join('\n-\n'));
  data=data.replace(crudeImageRegex, '');
  // we simply *can't* be doing with horizontal rules right now
  data=data.replace(RegExp('^-{4,}','mg'),'');
  // no indented lines 
  data=data.replace(RegExp('(^|\\n) *:*','g'), '\n');
  // or html tables // this doesn't cope with embedded tables
  //data=data.replace(RegExp('<table*>(||<|</|'+
  // may this is good enough?
  data=data.replace(RegExp('<table.*?>(.|\\n.)*?\\n?</ *table *>\\n+', 'gi'),
                    '');
  // let's delete lines starting with <. it's worth a try.
  data=data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n');
  // and those pesky html tags
  data=data.replace(RegExp('<.*?>','g'),'');
  // chunks of italic text? you crazy, man?
  var italicChunkRegex=new RegExp
    ("((^|\\n)\\s*:*\\s*''(|'''|'){20}(.|\\n)*''*\\n)*"
     , 'g');
  data=data.replace(italicChunkRegex, '');
  //return data; //TESTING
  // replace __TOC__, __NOTOC__ and whatever else there is
  // this'll probably do
  data=data.replace(RegExp('^__*__ *$', 'gmi'),'');
  // dont't be givin' me no subsequent paragraphs, either, you hear me?
  /// first we "normalize" section headings, removing whitespace after, adding before
  data=data.replace(RegExp('\\s*(==+*==+)\\s*', 'g'), '\n\n$1 ');
  /// then we want to get rid of paragraph breaks whose text ends badly
  data=data.replace(RegExp('() *\\n{2,}', 'g'), '$1\n');
  data=data.replace(RegExp('^*'), '');
  stuff=(RegExp('^(|\\n)*')).exec(data);
  if (stuff) 
    data = stuff;  
  /// now put \n\n after sections so that bullets and numbered lists work
  data=data.replace(RegExp('(==+*==+)\\s*', 'g'), '$1\n\n');
  // superfluous sentences are RIGHT OUT.
  // note: exactly 1 set of parens here needed to make the slice work
  data = data.parenSplit(RegExp('(+*\\s)','g'));
  // leading space is bad, mmkay?
  data=data.replace(RegExp('^\\s*'), '');
  var notSentenceEnds=RegExp('(|etc|sic|Dr|Mr|Mrs|Ms)$'
                             + '|' +
                             '\\]*$'
                             , 'i');
  data = fixSentenceEnds(data, notSentenceEnds);
  defaultize('popupMaxPreviewSentences');
  defaultize('popupMaxPreviewCharacters');
  var n=popupMaxPreviewSentences; 
  var d;
  do {d=firstSentences(data,n); --n; } 
  while ( d.length > popupMaxPreviewCharacters && n > 0 );
  data = d;
  datum.push('\n\nfinal one:');
  datum.push(data.substring(0,1000));
  if (localTest) return data; // FOR TESTING
  var newhtml=wiki2html(data); // needs livepreview
  if (!RegExp('^\\s*$').test(newhtml) && 
      (popupNavLinks || popupSummaryData)) 
    {
      newhtml = '<hr>' + newhtml;
      setPopupHTML(newhtml, 'popupPreview');
    }
};
function fixSentenceEnds(strs, reg) { 
  // take an array of strings, strs
  // join strs to strs & strs if strs matches regex reg
  for (var i=0; i<strs.length-2; ++i) {
    if (reg.test(strs)) {
      a=new Array ();
      for (var j=0; j<strs.length; ++j) {
        if (j<i)   a=strs;
        if (j==i)  a=strs+strs+strs;
        if (j>i+2) a=strs;
      }
      return fixSentenceEnds(a,reg);
    }
  }
  //alert('returning '+strs.join('\n\n'));
  return strs;
};
function firstSentences(strs, howmany) {
  var t=strs.slice(0, 2*howmany);
  return t.join('');
};
var stopPopupTimer=null;
function fuzzyCursorOff(fuzz) {
  if (!over) return null;
  var left = parseInt(over.style.left);
  var top = parseInt(over.style.top);
  var right = left + 
    (over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width));
  var bottom = top + 
    (over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight);
  if (o3_x < left-fuzz || o3_x > right+fuzz || o3_y < top-fuzz || o3_y > bottom + fuzz)
    return true;
  return false;
};
// seems that fuzzyCursorOff should precede mouseOutWikiLink in the source
// or sometimes during page loads, errors are generated
function mouseOutWikiLink () {
  if (fuzzyCursorOff(5)) { 
    if (stopPopupTimer) {
      clearInterval(stopPopupTimer); 
      stopPopupTimer=null; 
    }
    killPopup(); 
    return;
  }
  if (!stopPopupTimer) 
    stopPopupTimer=setInterval("mouseOutWikiLink()", 500);
};
function killPopup() {
  // o3_showingsticky should be defined in overlib.js
  //if ( typeof o3_showingsticky != "undefined" && o3_showingsticky == 0 ) {
  cClick();
  currentLink=null;
  // abortCurrentDownload();
  stopImagesDownloading();
  if (checkImagesTimer != null) {
    clearInterval(checkImagesTimer); checkImagesTimer=null;
  }
  if (popupImageTimer != null) {
    clearInterval(popupImageTimer); popupImageTimer=null;
  }
  //}
  return true; // preserve default action (eg from onclick)
};
////////////////////////////////////////////////////////////////////
// Run things
////////////////////////////////////////////////////////////////////
if (window.addEventListener) {
  window.addEventListener("load",setupTooltips,false);
}
else if (window.attachEvent) {
  window.attachEvent("onload",setupTooltips);
}
else {
  window._old_popup_onload = window.onload;
  window.onload = function() {
    window._old_popup_onload();
    setupTooltips();
  }
}
/// Local Variables: ///
/// mode:c ///
/// End: ///
// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- 
function getParamValue(paramName) {
  var cmdRe=RegExp(''+paramName+'=(*)');
  var h=document.location;
  var m;
  if (m=cmdRe.exec(h)) {
    try { 
      return decodeURI(m);
    } catch (someError) {}
  }
  return null;
};
function substitute(data,cmdBody) {
  // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags);
  var fromRe=RegExp(cmdBody.from, cmdBody.flags);
  return data.replace(fromRe, cmdBody.to);
};
function execCmds(data, cmdList) {
  for (var i=0; i<cmdList.length; ++i) {
    data=cmdList.action(data, cmdList);
  }
  return data;
}
function parseCmd(str) {
  // returns a list of commands
  if (!str.length) return ;
  var p=false;
  switch (str.charAt(0)) {
  case 's':
    p=parseSubstitute(str);
    break;
  case 'j':
    p=parseJavascript(str);
    break;
  default:
    return false;
  }
  if (p) return .concat(parseCmd(p.remainder));
  return false;
};
function unEscape(str, sep) {
  return str.split('\\\\').join('\\')
        .split('\\'+sep).join(sep)
        .split('\\n').join('\n');
};
function runJavascript(data, argWrapper) {
  // flags aren't used (yet)
  // from the user's viewpoint,
  // data is a special variable may appear inside code
  // and gets assigned the text in the edit box
  // alert('eval-ing '+argWrapper.code);
  return eval(argWrapper.code);
};
function parseJavascript(str) {
  // takes a string like j/code/;othercmds and parses it
  var tmp,code,flags;
  if (str.length<3) return false;
  var sep=str.charAt(1);
  str=str.substring(2);
  tmp=skipOver(str,sep);
  if (tmp) { code=tmp.segment.split('\n').join('\\n'); str=tmp.remainder; }
  else return false;
  flags='';
  if (str.length) {
    tmp=skipOver(str,';') || skipToEnd(str, ';');
    if (tmp) {flags=tmp.segment; str=tmp.remainder; }
  }
  return { action: runJavascript, code: code, flags: flags, remainder: str };
};
function parseSubstitute(str) {
  // takes a string like s/a/b/flags;othercmds and parses it
  var from,to,flags,tmp;
  if (str.length<4) return false;
  var sep=str.charAt(1);
  str=str.substring(2);
  tmp=skipOver(str,sep);
  if (tmp) { from=tmp.segment; str=tmp.remainder; } 
  else return false;
  tmp=skipOver(str,sep);
  if (tmp) { to=tmp.segment; str=tmp.remainder; } 
  else return false;
  flags='';
  if (str.length) {
    tmp=skipOver(str,';') || skipToEnd(str, ';');
    if (tmp) {flags=tmp.segment; str=tmp.remainder; }
  }
  return {action: substitute, from: from, to: to, flags: flags, remainder: str};
};
function skipOver(str,sep) {
  var endSegment=findNext(str,sep);
  if (endSegment<0) return false;
  var segment=unEscape(str.substring(0,endSegment), sep);
  return {segment: segment, remainder: str.substring(endSegment+1)};
}
function skipToEnd(str,sep) {
  return {segment: str, remainder: ''};
}
function findNext(str, ch) {
  for (var i=0; i<str.length; ++i) {
    if (str.charAt(i)=='\\') i+=2;
    if (str.charAt(i)==ch) return i;
  }
  return -1;
};
function runOnLoad(f) {
  if (window.addEventListener) {
    window.addEventListener("load",f,false);
  }
  else if (window.attachEvent) {
    window.attachEvent("onload",f);
  }
  else {
    window._old_popup_autoedit_onload = window.onload;
    window.onload = function() {
      window._old_popup_autoedit_onload();
      f();
    }
  }
};
function autoEdit() {
  var cmdString=getParamValue('autoedit');
  if (cmdString) {
    try { 
      var editbox=document.editform.wpTextbox1;
    } catch (dang) { return; }
    var cmdList=parseCmd(cmdString);
    var input=editbox.value;
    var output=execCmds(input, cmdList);
    editbox.value=output;
  }
  var summary=getParamValue('autosummary');
  if (summary) document.editform.wpSummary.value=summary;
  var minor=getParamValue('autominor');
  if (minor) {
    switch (minor) {
    case '1':
    case 'yes':
    case 'true':
      document.editform.wpMinoredit.checked=true;
      break;
    case '0':
    case 'no':
    case 'false':
      document.editform.wpMinoredit.checked=false;
    }
  }
  var btn=getParamValue('autoclick');
  if (btn) {
    if (document.editform && eval('document.editform.'+btn)) {
      var headings=document.getElementsByTagName('h1');
      if (headings) {
        var div=document.createElement('div');
        var button=eval('document.editform.'+btn);
        div.innerHTML='<font size=+1><b>The "' + button.value + 
          '" button has been automatically clicked.' + 
          ' Please wait for the next page to load.</b></font>';
        document.title='('+document.title+')';
        headings.parentNode.insertBefore(div, headings);
        button.click();
      }
    } else {
      alert('autoedit.js\n\nautoclick: could not find button "'+ btn +'".');
    }  
  }
};
runOnLoad(autoEdit);
// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- 
// Last update: 21:51, 15 Feb 2005 (UTC)
// Script to embed Live Preview in MediaWiki's edit page
function LivePreviewInstall()
{
 copywarn = document.getElementById('editpage-copywarn');
 if (copywarn != null) {
  var cleaner = "<br style=\\'clear:both;\\' />";
  LivePreviewHTML = '<input type="button" value="Live Preview" onclick="document.getElementById(\'PreviewBox\').innerHTML = wiki2html(editform.wpTextbox1.value) + \'' + cleaner + '\';" />';
  //LivePreviewHTML = '<input type="button" value="Live Preview" onclick="document.getElementById(\'PreviewBox\').innerHTML = wiki2html(editform.wpTextbox1.value);" />';
  LivePreviewHTML += '<div style="margin-top: 5px; margin-bottom: 5px; padding: 5px; border: 3px double orange;" id="PreviewBox"></div>';
  copywarn.innerHTML = LivePreviewHTML + copywarn.innerHTML;
 }
}
// User options
var wpUserName=wpUserName||'Wikipedian';
var wpUserSignature=wpUserSignature||wpUserName;
var wpShowImages=wpShowImages||true;
// System options
var wpLanguageCode=wpLanguageCode||'en';
var wpInterwikiCodes=wpInterwikiCodes||'ab|aa|af|ak|sq|als|am|ang|ar|an|arc|hy|roa-rup|as|ast|av|ay|az|bm|ba|eu|be|bn|bh|bi|bs|br|bg|my|ca|ch|ce|chr|chy|ny|zh|zh-tw|zh-cn|cho|cv|kw|co|cr|hr|cs|da|dv|nl|dz|en|eo|et|ee|fo|fj|fi|fr|fy|ff|gl|ka|de|got|el|kl|gn|gu|ht|ha|haw|he|hz|hi|ho|hu|is|io|ig|id|ia|ie|iu|ik|ga|it|ja|jv|kn|kr|csb|ks|kk|km|ki|rw|rn|tlh|kv|kg|ko|kj|ku|ky|lo|la|lv|li|ln|lt|jbo|nds|lg|lb|mk|mg|ms|ml|mt|gv|mi|minnan|mr|mh|zh-min-nan|mo|mn|mus|nah|na|nv|ne|se|no|nn|oc|or|om|pi|fa|pl|pt|pa|ps|qu|ro|rm|ru|sm|sg|sa|sc|gd|sr|sh|st|tn|sn|scn|simple|sd|si|sk|sl|so|st|es|su|sw|ss|sv|tl|ty|tg|ta|tt|te|th|bo|ti|tpi|to|tokipona|ts|tum|tr|tk|tw|uk|ur|ug|uz|ve|vi|vo|wa|cy|wo|xh|ii|yi|yo|za|zu';
var wpBaseArticlePath=wpBaseArticlePath||'/';
var wpMathBasePath=wpMathBasePath||'/math/';
var wpImageBasePath=wpImageBasePath||'http://upload.wikimedia.org/wikipedia/'+wpLanguageCode+'/';
var wpImageFallbackPath=wpImageFallbackPath||'http://upload.wikimedia.org/wikipedia/commons/';
var wpDefaultThumbWidth=wpDefaultThumbWidth||180;
var wpSkinMagnifyClip=wpSkinMagnifyClip||'/skins/common/images/magnify-clip.png';
var wpUserNamespace=wpUserNamespace||'User';
var wpImageNamespace=wpImageNamespace||'Image';
var wpCategoryNamespace=wpCategoryNamespace||'Category';
// Packed code (DO NOT MODIFY)
function wiki2html(str)
{str=strip_cr(str);var w=new WikiCode();w.lines=str.split(/\n/);w.parse();return w.html;};var wpSignature=']';var wpBlockImage=new RegExp('^\\[\\['+wpImageNamespace+':.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)','i');function WikiCode()
{this.lines=new Array;this.html=new String;this._endline=function(str)
{this.html+=str;this.lines.shift();};this.parse=function()
{var p=false;do{if(h_match=this.lines.match(/^(={1,6})(.*)\1(.*)$/)){p=false;this._endline('<h'+h_match.length+'>'+_parse_inline_nowiki(h_match)+'</h'+h_match.length+'>'+h_match);}else if(this.lines.match(/^/)){p=false;this._parse_list();}else if(this.lines.charAt(0)==' '){p=false;this._parse_pre();}else if(this.lines.substr(0,2)=='{|'){p=false;this._parse_table();}else if(this.lines.match(/^----+$/)){p=false;this._endline('<hr/>');}else if(this.lines.match(wpBlockImage)){p=false;this._parse_block_image();}else{if(this.lines==''){if(p=(this.lines.length>1&&this.lines=='')){this._endline('<p><br />');}}else{if(!p){this.html+='<p>';p=true;}
this.html+=_parse_inline_nowiki(this.lines)+' ';}
this.lines.shift();}}while(this.lines.length);};this._parse_list=function(){var prev=new String;var l_match,imatch,dt_match;while(this.lines.length&&(l_match=this.lines.match(/^(+)(.*)$/))){this.lines.shift();imatch=str_imatch(prev,l_match);for(var i=prev.length-1;i>=imatch;i--){if(prev.charAt(i)=='*'){this.html+='</ul>';}else if(prev.charAt(i)=='#'){this.html+='</ol>'}else{this.html+='</d'+((prev.charAt(i)==';')?'t':'d')+'>';switch(l_match.charAt(i)){case'':case'*':case'#':this.html+='</dl>';}}}
for(var i=imatch;i<l_match.length;i++){if(l_match.charAt(i)=='*'){this.html+='<ul>';}else if(l_match.charAt(i)=='#'){this.html+='<ol>';}else{switch(prev.charAt(i)){case'':case'*':case'#':this.html+='<dl>';}
this.html+='<d'+((l_match.charAt(i)==';')?'t':'d')+'>';}}
switch(l_match.charAt(l_match.length-1)){case'*':case'#':this.html+='<li>'+_parse_inline_nowiki(l_match);break;case';':if(dt_match=l_match.match(/(.*?) (:.*?)$/)){this.html+=_parse_inline_nowiki(dt_match);this.lines.unshift(dt_match);break;}
case':':this.html+=_parse_inline_nowiki(l_match);}
prev=l_match;}
for(i=prev.length-1;i>=0;i--){if(prev.charAt(i)=='*'){this.html+='</ul>';}else if(prev.charAt(i)=='#'){this.html+='</ol>';}else{this.html+='</d'+((prev.charAt(i)==';')?'t':'d')+'></dl>';}}};this._parse_table=function()
{var table_match;if(table_match=this.lines.match(/^\{\|( .*)$/)){this._endline('<table'+table_match+'>');}else this._endline('<table>');do{if(this.lines.charAt(0)=='|'){switch(this.lines.charAt(1)){case'}':this._endline('</table>');return;case'-':this._endline('<tr '+this.lines.match(/\|-*(.*)/)+'>');break;default:this._parse_table_data();}}else if(this.lines.charAt(0)=='!'){this._parse_table_data();}else{this.lines.shift();}}while(this.lines.length)};this._parse_table_data=function()
{var td_match,td_line;td_match=this.lines.shift().match(/^(\|\+|\||!)((?:(*?)\|(?!\|))?(.*))$/);if(td_match=='|+'){this.html+='<caption';}else{this.html+='<t'+((td_match=='|')?'d':'h');}
if(typeof td_match!='undefined'){this.html+=' '+td_match;td_line=td_match.split('||');}else{td_line=td_match.split('||');}
this.html+='>';while(td_line.length>1){this.lines.unshift(td_match+td_line.pop());}
this.html+=_parse_inline_nowiki(td_line);var td=new WikiCode;var table_count=0;while(this.lines.length){if(this.lines.charAt(0)=='|'){if(table_count==0)break;else if(this.lines.charAt(1)=='}')table_count--;}else if(this.lines.charAt(0)=='!'&&table_count==0){break;}else if(this.lines.substr(0,2)=='{|')table_count++;td.lines.push(this.lines.shift());}
if(td.lines.length){td.parse();}
this.html+=td.html;};this._parse_pre=function()
{this.html+='<pre>';do{this._endline(_parse_inline_nowiki(this.lines.substring(1,this.lines.length))+"\n");}while(this.lines.length&&this.lines.charAt(0)==' ');this.html+='</pre>';};this._parse_block_image=function()
{this.html+=_parse_image(this.lines.shift());};};function _parse_image(str)
{var attr=str.substring(wpImageNamespace.length+3,str.length-2).split(/\s*\|\s*/);var filename=attr;var caption=attr;var width,w_match;var thumb=false;var frame=false;var center=false;var align='';var html='';do{if(w_match=attr.match(/^(\d*)px$/)){width=w_match;}else switch(attr){case'thumb':case'thumbnail':thumb=true;case'frame':frame=true;break;case'none':case'right':case'left':center=false;align=attr;break;case'center':center=true;align='none';}
attr.shift();}while(attr.length);if(frame){if(align=='')align='right';html+="<div class='thumb t"+align+"'>";if(thumb){if(!width)width=wpDefaultThumbWidth;html+="<div style='width:"+(2+parseInt(width))+"px;'>";html+=_make_image(filename,caption,width);html+="<div class='thumbcaption'><div class='magnify' style='float:right'><a href='"+wpBaseArticlePath+wpImageNamespace+':'+filename+"' class='internal' title='Enlarge'><img src='"+wpSkinMagnifyClip+"' /></a></div>"+_parse_inline_nowiki(caption)+"</div>";}else{html+='<div>';html+=_make_image(filename,caption);html+="<div class='thumbcaption'>"+_parse_inline_nowiki(caption)+"</div>";}
html+='</div></div>';}else if(align!=''){html+="<div class='float"+align+"'><span>"+_make_image(filename,caption,width)+"</span></div>";}else{return _make_image(filename,caption,width);}
if(center){return"<div class='center'>"+html+'</div>';}else{return html;}};this._parse_inline_nowiki=function(str)
{var start,lastend=0
var substart=0,nestlev=0,open,close,subloop;var html='';while(-1!=(start=str.indexOf('<'+'nowiki>',substart))){html+=_parse_inline_wiki(str.substring(lastend,start));start+=8;substart=start;subloop=true;do{open=str.indexOf('<'+'nowiki>',substart);close=str.indexOf('</nowiki>',substart);if(close<=open||open==-1){if(close==-1){return html+html_entities(str.substr(start));}
substart=close+9;if(nestlev){nestlev--;}else{lastend=substart;html+=html_entities(str.substring(start,lastend-9));subloop=false;}}else{substart=open+8;nestlev++;}}while(subloop);}
return html+_parse_inline_wiki(str.substr(lastend));};function _make_image(filename,caption,width)
{filename=filename.charAt(0).toUpperCase()+filename.substr(1);filename=filename.replace(/ /g,'_');var md5=hex_md5(filename);var source=md5.charAt(0)+'/'+md5.substr(0,2)+'/'+filename;var img;if(wpShowImages){if(width){width="width='"+width+"px'";}
img="<img onerror='this.onerror=null;this.src=\""+wpImageFallbackPath+source+"\";' src='"+wpImageBasePath+source+"' alt='"+caption+"' "+width+"/>";}else{img=wpImageNamespace+':'+filename+" <em style='color:red;'>(images disabled)</em>";}
caption=_strip_inline_wiki(caption);return"<a class='image' title='"+caption+"' href='"+wpBaseArticlePath+wpImageNamespace+':'+filename+"'>"+img+"</a>";};function _parse_inline_images(str)
{var start,substart=0,nestlev=0;var loop,close,open,wiki,html;while(-1!=(start=str.indexOf(']',substart);open=str.indexOf('[[',substart);if(close<=open||open==-1){if(close==-1)return str;substart=close;if(nestlev){nestlev--;}else{wiki=str.substring(start,close+2);html=_parse_image(wiki);str=str.replace(wiki,html);substart=start+html.length;loop=false;}}else{substart=open;nestlev++;}}while(loop);}else{break;}}
return str;};function _parse_inline_wiki(str)
{var aux_match,math_md5;str=_parse_inline_images(str);while(aux_match=str.match(/<(?:)math>(.*?)<\/math>/i)){math_md5=hex_md5(aux_match);str=str.replace(aux_match,"<img src='"+wpMathBasePath+math_md5+'.png'+"' />");}
return str.replace(/'''''(.*?)''(.*?)'''/g,'<strong><em>$1</em>$2</strong>').replace(/'''''(.*?)'''(.*?)''/g,'<em><strong>$1</strong>$2</em>').replace(/'''(.*?)''(.*?)'''''/g,'<strong>$1<em>$2</em></strong>').replace(/'''(.*?)'''/g,'<strong>$1</strong>').replace(/''(.*?)''/g,'<em>$1</em>').replace(/~{5}(?!~)/g,Date()).replace(/~{4}(?!~)/g,wpSignature+' '+Date()).replace(/~{3}(?!~)/g,wpSignature).replace(RegExp('\\\\]','gi'),"<a href='"+wpBaseArticlePath+"$1'>$1</a>").replace(RegExp('\\\\]','gi'),'').replace(/\*?)\]\](\w*)/g,"<a href='"+wpBaseArticlePath+"$1'>$1$2</a>").replace(/\]+?)\]\](\w*)/g,"<a href='"+wpBaseArticlePath+"$1'>$2$3</a>").replace(/\]*?:)?(.*?)( *\(.*?\))?\|\]\]/g,"<a href='"+wpBaseArticlePath+"$1$2$3'>$2</a>").replace(/\]*?) (.*?)\]/g,"<a href='$1:$2$3'>$4</a>").replace(/\/g,"<a href='http://$1'></a>").replace(/\/g,"<a href='$1:$2$3'>$1:$2$3</a>").replace(/(^| )(http|news|ftp|mailto|gopher|irc):(\/*)(*)/g,"$1<a href='$2:$3$4'>$2:$3$4</a>").replace('__NOTOC__','').replace('__NOEDITSECTION__','');};function _strip_inline_wiki(str)
{return str.replace(/\]*\|(.*?)\]\]/g,'$1').replace(/\\]/g,'$1').replace(/''(.*?)''/g,'$1');};function max(a,b)
{if(a>b)return a;else return b;};function min(a,b)
{if(a<b)return a;else return b;};function str_imatch(str_a,str_b)
{var lim=min(str_a.length,str_b.length);for(var i=0;i<lim;i++){if(str_a.charAt(i)!=str_b.charAt(i))return i;}
return i;};function strip_cr(str)
{return str.replace(/\n\r/g,"\n").replace(/\r/g,'');};function html_entities(str)
{return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");};var chrsz=8;var hex_tab="0123456789abcdef";function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));};function core_md5(x,len)
{x|=0x80<<((len)%32);x=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x,7,-680876936);d=md5_ff(d,a,b,c,x,12,-389564586);c=md5_ff(c,d,a,b,x,17,606105819);b=md5_ff(b,c,d,a,x,22,-1044525330);a=md5_ff(a,b,c,d,x,7,-176418897);d=md5_ff(d,a,b,c,x,12,1200080426);c=md5_ff(c,d,a,b,x,17,-1473231341);b=md5_ff(b,c,d,a,x,22,-45705983);a=md5_ff(a,b,c,d,x,7,1770035416);d=md5_ff(d,a,b,c,x,12,-1958414417);c=md5_ff(c,d,a,b,x,17,-42063);b=md5_ff(b,c,d,a,x,22,-1990404162);a=md5_ff(a,b,c,d,x,7,1804603682);d=md5_ff(d,a,b,c,x,12,-40341101);c=md5_ff(c,d,a,b,x,17,-1502002290);b=md5_ff(b,c,d,a,x,22,1236535329);a=md5_gg(a,b,c,d,x,5,-165796510);d=md5_gg(d,a,b,c,x,9,-1069501632);c=md5_gg(c,d,a,b,x,14,643717713);b=md5_gg(b,c,d,a,x,20,-373897302);a=md5_gg(a,b,c,d,x,5,-701558691);d=md5_gg(d,a,b,c,x,9,38016083);c=md5_gg(c,d,a,b,x,14,-660478335);b=md5_gg(b,c,d,a,x,20,-405537848);a=md5_gg(a,b,c,d,x,5,568446438);d=md5_gg(d,a,b,c,x,9,-1019803690);c=md5_gg(c,d,a,b,x,14,-187363961);b=md5_gg(b,c,d,a,x,20,1163531501);a=md5_gg(a,b,c,d,x,5,-1444681467);d=md5_gg(d,a,b,c,x,9,-51403784);c=md5_gg(c,d,a,b,x,14,1735328473);b=md5_gg(b,c,d,a,x,20,-1926607734);a=md5_hh(a,b,c,d,x,4,-378558);d=md5_hh(d,a,b,c,x,11,-2022574463);c=md5_hh(c,d,a,b,x,16,1839030562);b=md5_hh(b,c,d,a,x,23,-35309556);a=md5_hh(a,b,c,d,x,4,-1530992060);d=md5_hh(d,a,b,c,x,11,1272893353);c=md5_hh(c,d,a,b,x,16,-155497632);b=md5_hh(b,c,d,a,x,23,-1094730640);a=md5_hh(a,b,c,d,x,4,681279174);d=md5_hh(d,a,b,c,x,11,-358537222);c=md5_hh(c,d,a,b,x,16,-722521979);b=md5_hh(b,c,d,a,x,23,76029189);a=md5_hh(a,b,c,d,x,4,-640364487);d=md5_hh(d,a,b,c,x,11,-421815835);c=md5_hh(c,d,a,b,x,16,530742520);b=md5_hh(b,c,d,a,x,23,-995338651);a=md5_ii(a,b,c,d,x,6,-198630844);d=md5_ii(d,a,b,c,x,10,1126891415);c=md5_ii(c,d,a,b,x,15,-1416354905);b=md5_ii(b,c,d,a,x,21,-57434055);a=md5_ii(a,b,c,d,x,6,1700485571);d=md5_ii(d,a,b,c,x,10,-1894986606);c=md5_ii(c,d,a,b,x,15,-1051523);b=md5_ii(b,c,d,a,x,21,-2054922799);a=md5_ii(a,b,c,d,x,6,1873313359);d=md5_ii(d,a,b,c,x,10,-30611744);c=md5_ii(c,d,a,b,x,15,-1560198380);b=md5_ii(b,c,d,a,x,21,1309151649);a=md5_ii(a,b,c,d,x,6,-145523070);d=md5_ii(d,a,b,c,x,10,-1120210379);c=md5_ii(c,d,a,b,x,15,718787259);b=md5_ii(b,c,d,a,x,21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}
return Array(a,b,c,d);};function md5_cmn(q,a,b,x,s,t)
{return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);};function md5_ff(a,b,c,d,x,s,t)
{return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);};function md5_gg(a,b,c,d,x,s,t)
{return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);};function md5_hh(a,b,c,d,x,s,t)
{return md5_cmn(b^c^d,a,b,x,s,t);};function md5_ii(a,b,c,d,x,s,t)
{return md5_cmn(c^(b|(~d)),a,b,x,s,t);};function safe_add(x,y)
{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);};function bit_rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));};function str2binl(str)
{var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)
bin|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin;};function binl2hex(binarray)
{var str='';for(var i=0;i<binarray.length*4;i++)
{str+=hex_tab.charAt((binarray>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray>>((i%4)*8))&0xF);}
return str;}; // </math>// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- 
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;   /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
function b64_md5(s)    { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
function hex_hmac_md5(k, d)
  { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function b64_hmac_md5(k, d)
  { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function any_hmac_md5(k, d, e)
  { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }
/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
/*
 * Calculate the MD5 of a raw string
 */
function rstr_md5(s)
{
  return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
}
/*
 * Calculate the HMAC-MD5, of a key and some data (raw strings)
 */
function rstr_hmac_md5(key, data)
{
  var bkey = rstr2binl(key);
  if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);
  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad = bkey ^ 0x36363636;
    opad = bkey ^ 0x5C5C5C5C;
  }
  var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
  return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
}
/*
 * Convert a raw string to a hex string
 */
function rstr2hex(input)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var output = "";
  var x;
  for(var i = 0; i < input.length; i++)
  {
    x = input.charCodeAt(i);
    output += hex_tab.charAt((x >>> 4) & 0x0F)
           +  hex_tab.charAt( x        & 0x0F);
  }
  return output;
}
/*
 * Convert a raw string to a base-64 string
 */
function rstr2b64(input)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var output = "";
  var len = input.length;
  for(var i = 0; i < len; i += 3)
  {
    var triplet = (input.charCodeAt(i) << 16)
                | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
                | (i + 2 < len ? input.charCodeAt(i+2)      : 0);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > input.length * 8) output += b64pad;
      else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
    }
  }
  return output;
}
/*
 * Convert a raw string to an arbitrary string encoding
 */
function rstr2any(input, encoding)
{
  var divisor = encoding.length;
  var remainders = Array();
  var i, q, x, quotient;
  /* Convert to an array of 16-bit big-endian values, forming the dividend */
  var dividend = Array(input.length / 2);
  for(i = 0; i < dividend.length; i++)
  {
    dividend = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
  }
  /*
   * Repeatedly perform a long division. The binary array forms the dividend,
   * the length of the encoding is the divisor. Once computed, the quotient
   * forms the dividend for the next step. We stop when the dividend is zero.
   * All remainders are stored for later use.
   */
  while(dividend.length > 0)
  {
    quotient = Array();
    x = 0;
    for(i = 0; i < dividend.length; i++)
    {
      x = (x << 16) + dividend;
      q = Math.floor(x / divisor);
      x -= q * divisor;
      if(quotient.length > 0 || q > 0)
        quotient = q;
    }
    remainders = x;
    dividend = quotient;
  }
  /* Convert the remainders to the output string */
  var output = "";
  for(i = remainders.length - 1; i >= 0; i--)
    output += encoding.charAt(remainders);
  return output;
}
/*
 * Encode a string as utf-8.
 * For efficiency, this assumes the input is valid utf-16.
 */
function str2rstr_utf8(input)
{
  var output = "";
  var i = -1;
  var x, y;
  while(++i < input.length)
  {
    /* Decode utf-16 surrogate pairs */
    x = input.charCodeAt(i);
    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
    {
      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
      i++;
    }
    /* Encode output as utf-8 */
    if(x <= 0x7F)
      output += String.fromCharCode(x);
    else if(x <= 0x7FF)
      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
                                    0x80 | ( x         & 0x3F));
    else if(x <= 0xFFFF)
      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
                                    0x80 | ((x >>> 6 ) & 0x3F),
                                    0x80 | ( x         & 0x3F));
    else if(x <= 0x1FFFFF)
      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
                                    0x80 | ((x >>> 12) & 0x3F),
                                    0x80 | ((x >>> 6 ) & 0x3F),
                                    0x80 | ( x         & 0x3F));
  }
  return output;
}
/*
 * Encode a string as utf-16
 */
function str2rstr_utf16le(input)
{
  var output = "";
  for(var i = 0; i < input.length; i++)
    output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,
                                  (input.charCodeAt(i) >>> 8) & 0xFF);
  return output;
}
function str2rstr_utf16be(input)
{
  var output = "";
  for(var i = 0; i < input.length; i++)
    output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
                                   input.charCodeAt(i)        & 0xFF);
  return output;
}
/*
 * Convert a raw string to an array of little-endian words
 * Characters >255 have their high-byte silently ignored.
 */
function rstr2binl(input)
{
  var output = Array(input.length >> 2);
  for(var i = 0; i < output.length; i++)
    output = 0;
  for(var i = 0; i < input.length * 8; i += 8)
    output |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
  return output;
}
/*
 * Convert an array of little-endian words to a string
 */
function binl2rstr(input)
{
  var output = "";
  for(var i = 0; i < input.length * 32; i += 8)
    output += String.fromCharCode((input >>> (i % 32)) & 0xFF);
  return output;
}
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length.
 */
function binl_md5(x, len)
{
  /* append padding */
  x |= 0x80 << ((len) % 32);
  x = len;
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    a = md5_ff(a, b, c, d, x, 7 , -680876936);
    d = md5_ff(d, a, b, c, x, 12, -389564586);
    c = md5_ff(c, d, a, b, x, 17,  606105819);
    b = md5_ff(b, c, d, a, x, 22, -1044525330);
    a = md5_ff(a, b, c, d, x, 7 , -176418897);
    d = md5_ff(d, a, b, c, x, 12,  1200080426);
    c = md5_ff(c, d, a, b, x, 17, -1473231341);
    b = md5_ff(b, c, d, a, x, 22, -45705983);
    a = md5_ff(a, b, c, d, x, 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x, 12, -1958414417);
    c = md5_ff(c, d, a, b, x, 17, -42063);
    b = md5_ff(b, c, d, a, x, 22, -1990404162);
    a = md5_ff(a, b, c, d, x, 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x, 12, -40341101);
    c = md5_ff(c, d, a, b, x, 17, -1502002290);
    b = md5_ff(b, c, d, a, x, 22,  1236535329);
    a = md5_gg(a, b, c, d, x, 5 , -165796510);
    d = md5_gg(d, a, b, c, x, 9 , -1069501632);
    c = md5_gg(c, d, a, b, x, 14,  643717713);
    b = md5_gg(b, c, d, a, x, 20, -373897302);
    a = md5_gg(a, b, c, d, x, 5 , -701558691);
    d = md5_gg(d, a, b, c, x, 9 ,  38016083);
    c = md5_gg(c, d, a, b, x, 14, -660478335);
    b = md5_gg(b, c, d, a, x, 20, -405537848);
    a = md5_gg(a, b, c, d, x, 5 ,  568446438);
    d = md5_gg(d, a, b, c, x, 9 , -1019803690);
    c = md5_gg(c, d, a, b, x, 14, -187363961);
    b = md5_gg(b, c, d, a, x, 20,  1163531501);
    a = md5_gg(a, b, c, d, x, 5 , -1444681467);
    d = md5_gg(d, a, b, c, x, 9 , -51403784);
    c = md5_gg(c, d, a, b, x, 14,  1735328473);
    b = md5_gg(b, c, d, a, x, 20, -1926607734);
    a = md5_hh(a, b, c, d, x, 4 , -378558);
    d = md5_hh(d, a, b, c, x, 11, -2022574463);
    c = md5_hh(c, d, a, b, x, 16,  1839030562);
    b = md5_hh(b, c, d, a, x, 23, -35309556);
    a = md5_hh(a, b, c, d, x, 4 , -1530992060);
    d = md5_hh(d, a, b, c, x, 11,  1272893353);
    c = md5_hh(c, d, a, b, x, 16, -155497632);
    b = md5_hh(b, c, d, a, x, 23, -1094730640);
    a = md5_hh(a, b, c, d, x, 4 ,  681279174);
    d = md5_hh(d, a, b, c, x, 11, -358537222);
    c = md5_hh(c, d, a, b, x, 16, -722521979);
    b = md5_hh(b, c, d, a, x, 23,  76029189);
    a = md5_hh(a, b, c, d, x, 4 , -640364487);
    d = md5_hh(d, a, b, c, x, 11, -421815835);
    c = md5_hh(c, d, a, b, x, 16,  530742520);
    b = md5_hh(b, c, d, a, x, 23, -995338651);
    a = md5_ii(a, b, c, d, x, 6 , -198630844);
    d = md5_ii(d, a, b, c, x, 10,  1126891415);
    c = md5_ii(c, d, a, b, x, 15, -1416354905);
    b = md5_ii(b, c, d, a, x, 21, -57434055);
    a = md5_ii(a, b, c, d, x, 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x, 10, -1894986606);
    c = md5_ii(c, d, a, b, x, 15, -1051523);
    b = md5_ii(b, c, d, a, x, 21, -2054922799);
    a = md5_ii(a, b, c, d, x, 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x, 10, -30611744);
    c = md5_ii(c, d, a, b, x, 15, -1560198380);
    b = md5_ii(b, c, d, a, x, 21,  1309151649);
    a = md5_ii(a, b, c, d, x, 6 , -145523070);
    d = md5_ii(d, a, b, c, x, 10, -1120210379);
    c = md5_ii(c, d, a, b, x, 15,  718787259);
    b = md5_ii(b, c, d, a, x, 21, -343485551);
    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);
}
/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}
/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}// --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- // --FILE BOUNDARY-- 
//\/////
//\  overLIB 4.21 - You may not remove or change this notice.
//\  Copyright Erik Bosrup 1998-2004. All rights reserved.
//\
//\  Contributors are listed on the homepage.
//\  This file might be old, always check for the latest version at:
//\  http://www.bosrup.com/web/overlib/
//\
//\  Please read the license agreement (available through the link above)
//\  before using overLIB. Direct any licensing questions to erik@bosrup.com.
//\
//\  Do not sell this as your own work or remove this copyright notice. 
//\  For full details on copying or changing this script please read the
//\  license agreement at the link above. Please give credit on sites that
//\  use overLIB and submit changes of the script so other people can use
//\  them as well.
//\/////
//\  THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
var olLoaded=0,pmStart=10000000,pmUpper=10001000,pmCount=pmStart+1,pmt='',pms=new Array(),olInfo=new Info('4.21',1),FREPLACE=0,FBEFORE=1,FAFTER=2,FALTERNATE=3,FCHAIN=4,olHideForm=0,olHautoFlag=0,olVautoFlag=0,hookPts=new Array(),postParse=new Array(),cmdLine=new Array(),runTime=new Array();
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
if(typeof ol_fgcolor=='undefined')var ol_fgcolor="#CCCCFF";if(typeof ol_bgcolor=='undefined')var ol_bgcolor="#333399";if(typeof ol_textcolor=='undefined')var ol_textcolor="#000000";if(typeof ol_capcolor=='undefined')var ol_capcolor="#FFFFFF";if(typeof ol_closecolor=='undefined')var ol_closecolor="#9999FF";if(typeof ol_textfont=='undefined')var ol_textfont="Verdana,Arial,Helvetica";if(typeof ol_captionfont=='undefined')var ol_captionfont="Verdana,Arial,Helvetica";if(typeof ol_closefont=='undefined')var ol_closefont="Verdana,Arial,Helvetica";if(typeof ol_textsize=='undefined')var ol_textsize="1";if(typeof ol_captionsize=='undefined')var ol_captionsize="1";if(typeof ol_closesize=='undefined')var ol_closesize="1";if(typeof ol_width=='undefined')var ol_width="200";if(typeof ol_border=='undefined')var ol_border="1";if(typeof ol_cellpad=='undefined')var ol_cellpad=2;if(typeof ol_offsetx=='undefined')var ol_offsetx=10;if(typeof ol_offsety=='undefined')var ol_offsety=10;if(typeof ol_text=='undefined')var ol_text="Default Text";if(typeof ol_cap=='undefined')var ol_cap="";if(typeof ol_sticky=='undefined')var ol_sticky=0;if(typeof ol_background=='undefined')var ol_background="";if(typeof ol_close=='undefined')var ol_close="Close";if(typeof ol_hpos=='undefined')var ol_hpos=RIGHT;if(typeof ol_status=='undefined')var ol_status="";if(typeof ol_autostatus=='undefined')var ol_autostatus=0;if(typeof ol_height=='undefined')var ol_height=-1;if(typeof ol_snapx=='undefined')var ol_snapx=0;if(typeof ol_snapy=='undefined')var ol_snapy=0;if(typeof ol_fixx=='undefined')var ol_fixx=-1;if(typeof ol_fixy=='undefined')var ol_fixy=-1;if(typeof ol_relx=='undefined')var ol_relx=null;if(typeof ol_rely=='undefined')var ol_rely=null;if(typeof ol_fgbackground=='undefined')var ol_fgbackground="";if(typeof ol_bgbackground=='undefined')var ol_bgbackground="";if(typeof ol_padxl=='undefined')var ol_padxl=1;if(typeof ol_padxr=='undefined')var ol_padxr=1;if(typeof ol_padyt=='undefined')var ol_padyt=1;if(typeof ol_padyb=='undefined')var ol_padyb=1;if(typeof ol_fullhtml=='undefined')var ol_fullhtml=0;if(typeof ol_vpos=='undefined')var ol_vpos=BELOW;if(typeof ol_aboveheight=='undefined')var ol_aboveheight=0;if(typeof ol_capicon=='undefined')var ol_capicon="";if(typeof ol_frame=='undefined')var ol_frame=self;if(typeof ol_timeout=='undefined')var ol_timeout=0;if(typeof ol_function=='undefined')var ol_function=null;if(typeof ol_delay=='undefined')var ol_delay=0;if(typeof ol_hauto=='undefined')var ol_hauto=0;if(typeof ol_vauto=='undefined')var ol_vauto=0;if(typeof ol_closeclick=='undefined')var ol_closeclick=0;if(typeof ol_wrap=='undefined')var ol_wrap=0;if(typeof ol_followmouse=='undefined')var ol_followmouse=1;if(typeof ol_mouseoff=='undefined')var ol_mouseoff=0;if(typeof ol_closetitle=='undefined')var ol_closetitle='Close';if(typeof ol_compatmode=='undefined')var ol_compatmode=0;if(typeof ol_css=='undefined')var ol_css=CSSOFF;if(typeof ol_fgclass=='undefined')var ol_fgclass="";if(typeof ol_bgclass=='undefined')var ol_bgclass="";if(typeof ol_textfontclass=='undefined')var ol_textfontclass="";if(typeof ol_captionfontclass=='undefined')var ol_captionfontclass="";if(typeof ol_closefontclass=='undefined')var ol_closefontclass="";
if(typeof ol_texts=='undefined')var ol_texts=new Array("Text 0","Text 1");if(typeof ol_caps=='undefined')var ol_caps=new Array("Caption 0","Caption 1");
var o3_text="",o3_cap="",o3_sticky=0,o3_background="",o3_close="Close",o3_hpos=RIGHT,o3_offsetx=2,o3_offsety=2,o3_fgcolor="",o3_bgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=100,o3_border=1,o3_cellpad=2,o3_status="",o3_autostatus=0,o3_height=-1,o3_snapx=0,o3_snapy=0,o3_fixx=-1,o3_fixy=-1,o3_relx=null,o3_rely=null,o3_fgbackground="",o3_bgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,o3_aboveheight=0,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="Verdana,Arial,Helvetica",o3_closefont="Verdana,Arial,Helvetica",o3_textsize="1",o3_captionsize="1",o3_closesize="1",o3_frame=self,o3_timeout=0,o3_timerid=0,o3_allowmove=0,o3_function=null,o3_delay=0,o3_delayid=0,o3_hauto=0,o3_vauto=0,o3_closeclick=0,o3_wrap=0,o3_followmouse=1,o3_mouseoff=0,o3_closetitle='',o3_compatmode=0,o3_css=CSSOFF,o3_fgclass="",o3_bgclass="",o3_textfontclass="",o3_captionfontclass="",o3_closefontclass="";
var o3_x=0,o3_y=0,o3_showingsticky=0,o3_removecounter=0;
var over=null,fnRef,hoveringSwitch=false,olHideDelay;
var isMac=(navigator.userAgent.indexOf("Mac")!=-1),olOp=(navigator.userAgent.toLowerCase().indexOf('opera')>-1&&document.createTextNode),olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4),olNs6=(document.getElementById)?true:false,olKq=(olNs6&&/konqueror/i.test(navigator.userAgent)),olIe4=(document.all)?true:false,olIe5=false,olIe55=false,docRoot='document.body';
if(olNs4){var oW=window.innerWidth;var oH=window.innerHeight;window.onresize=function(){if(oW!=window.innerWidth||oH!=window.innerHeight)location.reload();}}
if(olIe4){var agent=navigator.userAgent;if(/MSIE/.test(agent)){var versNum=parseFloat(agent.match(/MSIE(\d\.\d+)\.*/i));if(versNum>=5){olIe5=true;olIe55=(versNum>=5.5&&!olOp)?true:false;if(olNs6)olNs6=false;}}
if(olNs6)olIe4=false;}
if(document.compatMode&&document.compatMode=='CSS1Compat'){docRoot=((olIe4&&!olOp)?'document.documentElement':docRoot);}
if(window.addEventListener)window.addEventListener("load",OLonLoad_handler,false);else if(window.attachEvent)window.attachEvent("onload",OLonLoad_handler);
var capExtent;
function overlib(){if(!olLoaded||isExclusive(overlib.arguments))return true;if(olCheckMouseCapture)olMouseCapture();if(over){over=(typeof over.id!='string')?o3_frame.document.all:over;cClick();}
olHideDelay=0;o3_text=ol_text;o3_cap=ol_cap;o3_sticky=ol_sticky;o3_background=ol_background;o3_close=ol_close;o3_hpos=ol_hpos;o3_offsetx=ol_offsetx;o3_offsety=ol_offsety;o3_fgcolor=ol_fgcolor;o3_bgcolor=ol_bgcolor;o3_textcolor=ol_textcolor;o3_capcolor=ol_capcolor;o3_closecolor=ol_closecolor;o3_width=ol_width;o3_border=ol_border;o3_cellpad=ol_cellpad;o3_status=ol_status;o3_autostatus=ol_autostatus;o3_height=ol_height;o3_snapx=ol_snapx;o3_snapy=ol_snapy;o3_fixx=ol_fixx;o3_fixy=ol_fixy;o3_relx=ol_relx;o3_rely=ol_rely;o3_fgbackground=ol_fgbackground;o3_bgbackground=ol_bgbackground;o3_padxl=ol_padxl;o3_padxr=ol_padxr;o3_padyt=ol_padyt;o3_padyb=ol_padyb;o3_fullhtml=ol_fullhtml;o3_vpos=ol_vpos;o3_aboveheight=ol_aboveheight;o3_capicon=ol_capicon;o3_textfont=ol_textfont;o3_captionfont=ol_captionfont;o3_closefont=ol_closefont;o3_textsize=ol_textsize;o3_captionsize=ol_captionsize;o3_closesize=ol_closesize;o3_timeout=ol_timeout;o3_function=ol_function;o3_delay=ol_delay;o3_hauto=ol_hauto;o3_vauto=ol_vauto;o3_closeclick=ol_closeclick;o3_wrap=ol_wrap;o3_followmouse=ol_followmouse;o3_mouseoff=ol_mouseoff;o3_closetitle=ol_closetitle;o3_css=ol_css;o3_compatmode=ol_compatmode;o3_fgclass=ol_fgclass;o3_bgclass=ol_bgclass;o3_textfontclass=ol_textfontclass;o3_captionfontclass=ol_captionfontclass;o3_closefontclass=ol_closefontclass;
setRunTimeVariables();
fnRef='';
o3_frame=ol_frame;
if(!(over=createDivContainer()))return false;
parseTokens('o3_',overlib.arguments);if(!postParseChecks())return false;
if(o3_delay==0){return runHook("olMain",FREPLACE);}else{o3_delayid=setTimeout("runHook('olMain',FREPLACE)",o3_delay);return false;}}
function nd(time){if(olLoaded&&!isExclusive()){hideDelay(time);
if(o3_removecounter>=1){o3_showingsticky=0 };
if(o3_showingsticky==0){o3_allowmove=0;if(over!=null&&o3_timerid==0)runHook("hideObject",FREPLACE,over);}else{o3_removecounter++;}}
return true;}
function cClick(){if(olLoaded){runHook("hideObject",FREPLACE,over);o3_showingsticky=0;}
return false;}
function overlib_pagedefaults(){parseTokens('ol_',overlib_pagedefaults.arguments);}
function olMain(){var layerhtml,styleType;runHook("olMain",FBEFORE);
if(o3_background!=""||o3_fullhtml){
layerhtml=runHook('ol_content_background',FALTERNATE,o3_css,o3_text,o3_background,o3_fullhtml);}else{
styleType=(pms=="cssoff"||pms=="cssclass");
if(o3_fgbackground!="")o3_fgbackground="background=\""+o3_fgbackground+"\"";if(o3_bgbackground!="")o3_bgbackground=(styleType?"background=\""+o3_bgbackground+"\"":o3_bgbackground);
if(o3_fgcolor!="")o3_fgcolor=(styleType?"bgcolor=\""+o3_fgcolor+"\"":o3_fgcolor);if(o3_bgcolor!="")o3_bgcolor=(styleType?"bgcolor=\""+o3_bgcolor+"\"":o3_bgcolor);
if(o3_height>0)o3_height=(styleType?"height=\""+o3_height+"\"":o3_height);else o3_height="";
if(o3_cap==""){
layerhtml=runHook('ol_content_simple',FALTERNATE,o3_css,o3_text);}else{
if(o3_sticky){
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,o3_close);}else{
layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,"");}}}
if(o3_sticky){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;}
o3_showingsticky=1;o3_removecounter=0;}
if(!runHook("createPopup",FREPLACE,layerhtml))return false;
if(o3_autostatus>0){o3_status=o3_text;if(o3_autostatus>1)o3_status=o3_cap;}
o3_allowmove=0;
if(o3_timeout>0){if(o3_timerid>0)clearTimeout(o3_timerid);o3_timerid=setTimeout("cClick()",o3_timeout);}
runHook("disp",FREPLACE,o3_status);runHook("olMain",FAFTER);
return(olOp&&event&&event.type=='mouseover'&&!o3_status)?'':(o3_status!='');}
function ol_content_simple(text){var cpIsMultiple=/,/.test(o3_cellpad);var txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">':((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_caption(text,title,close){var nameId,txt,cpIsMultiple=/,/.test(o3_cellpad);var closing,closeevent;
closing="";closeevent="onmouseover";if(o3_closeclick==1)closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onclick";if(o3_capicon!=""){nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if(typeof o3_dragimg!='undefined'&&o3_dragimg)nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon='<img src=\"'+o3_capicon+'\"'+nameId+' />';}
if(close!="")
closing='<td '+(!o3_compatmode&&o3_closefontclass?'class="'+o3_closefontclass:'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode&&o3_closefontclass)?' class="'+o3_closefontclass+'" ':' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass?'':wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass?'':wrapStr(1,o3_closesize,'close'))+'</a></td>';txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass?' class="'+o3_captionfontclass+'">':'>')+(o3_captionfontclass?'':'<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass?'':wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple)?'cellpadding="'+o3_cellpad+'" ':'')+'cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
set_background("");return txt;}
function ol_content_background(text,picture,hasfullhtml){if(hasfullhtml){txt=text;}else{txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass?'" class="'+o3_textfontclass:'')+'">'+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';}
set_background(picture);return txt;}
function set_background(pic){if(pic==""){if(olNs4){over.background.src=null;}else if(over.style){over.style.backgroundImage="none";}
}else{if(olNs4){over.background.src=pic;}else if(over.style){over.style.width=o3_width+'px';over.style.backgroundImage="url("+pic+")";}}}
var olShowId=-1;
function disp(statustext){runHook("disp",FBEFORE);
if(o3_allowmove==0){runHook("placeLayer",FREPLACE);(olNs6&&olShowId<0)?olShowId=setTimeout("runHook('showObject',FREPLACE,over)",1):runHook("showObject",FREPLACE,over);o3_allowmove=(o3_sticky||o3_followmouse==0)?0:1;}
runHook("disp",FAFTER);
if(statustext!="")self.status=statustext;}
function createPopup(lyrContent){runHook("createPopup",FBEFORE);
if(o3_wrap){var wd,ww,theObj=(olNs4?over:over.style);theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);layerWrite(lyrContent);wd=(olNs4?over.clip.width:over.offsetWidth);if(wd>(ww=windowWidth())){lyrContent=lyrContent.replace(/\&nbsp;/g,' ');o3_width=ww;o3_wrap=0;}}
layerWrite(lyrContent);
if(o3_wrap)o3_width=(olNs4?over.clip.width:over.offsetWidth);
runHook("createPopup",FAFTER,lyrContent);
return true;}
function placeLayer(){var placeX,placeY,widthFix=0;
if(o3_frame.innerWidth)widthFix=18;iwidth=windowWidth();
winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;
placeX=runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
if(o3_frame.innerHeight){iheight=o3_frame.innerHeight;}else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')){iheight=eval('o3_frame.'+docRoot+'.clientHeight');}
scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;placeY=runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
repositionTo(over,placeX,placeY);}
function olMouseMove(e){var e=(e)?e:event;
if(e.pageX){o3_x=e.pageX;o3_y=e.pageY;}else if(e.clientX){o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
if(o3_allowmove==1)runHook("placeLayer",FREPLACE);
if(hoveringSwitch&&!olNs4&&runHook("cursorOff",FREPLACE)){(olHideDelay?hideDelay(olHideDelay):cClick());hoveringSwitch=!hoveringSwitch;}}
function no_overlib(){return ver3fix;}
function olMouseCapture(){capExtent=document;var fN,str='',l,k,f,wMv,sS,mseHandler=olMouseMove;var re=/function*(\w*)\(/;
wMv=(!olIe4&&window.onmousemove);if(document.onmousemove||wMv){if(wMv)capExtent=window;f=capExtent.onmousemove.toString();fN=f.match(re);if(fN==null){str=f+'(e);';}else if(fN=='anonymous'||fN=='olMouseMove'||(wMv&&fN=='onmousemove')){if(!olOp&&wMv){l=f.indexOf('{')+1;k=f.lastIndexOf('}');sS=f.substring(l,k);if((l=sS.indexOf('('))!=-1){sS=sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');if(eval("typeof "+sS+"=='undefined'"))window.onmousemove=null;else str=sS+'(e);';}}
if(!str){olCheckMouseCapture=false;return;}
}else{if(fN)str=fN+'(e);';else{l=f.indexOf('{')+1;k=f.lastIndexOf('}');str=f.substring(l,k)+'\n';}}
str+='olMouseMove(e);';mseHandler=new Function('e',str);}
capExtent.onmousemove=mseHandler;if(olNs4)capExtent.captureEvents(Event.MOUSEMOVE);}
function parseTokens(pf,ar){
var v,i,mode=-1,par=(pf!='ol_'),fnMark=(par&&!ar.length?1:0);
for(i=0;i<ar.length;i++){if(mode<0){
if(typeof ar=='number'&&ar>pmStart&&ar<pmUpper){fnMark=(par?1:0);i--;}else{switch(pf){case 'ol_':
ol_text=ar.toString();break;default:
o3_text=ar.toString();}}
mode=0;}else{
if(ar>=pmCount||ar==DONOTHING){continue;}
if(ar==INARRAY){fnMark=0;eval(pf+'text=ol_texts+'].toString()');continue;}
if(ar==CAPARRAY){eval(pf+'cap=ol_caps+'].toString()');continue;}
if(ar==STICKY){if(pf!='ol_')eval(pf+'sticky=1');continue;}
if(ar==BACKGROUND){eval(pf+'background="'+ar+'"');continue;}
if(ar==NOCLOSE){if(pf!='ol_')opt_NOCLOSE();continue;}
if(ar==CAPTION){eval(pf+"cap='"+escSglQuote(ar)+"'");continue;}
if(ar==CENTER||ar==LEFT||ar==RIGHT){eval(pf+'hpos='+ar);if(pf!='ol_')olHautoFlag=1;continue;}
if(ar==OFFSETX){eval(pf+'offsetx='+ar);continue;}
if(ar==OFFSETY){eval(pf+'offsety='+ar);continue;}
if(ar==FGCOLOR){eval(pf+'fgcolor="'+ar+'"');continue;}
if(ar==BGCOLOR){eval(pf+'bgcolor="'+ar+'"');continue;}
if(ar==TEXTCOLOR){eval(pf+'textcolor="'+ar+'"');continue;}
if(ar==CAPCOLOR){eval(pf+'capcolor="'+ar+'"');continue;}
if(ar==CLOSECOLOR){eval(pf+'closecolor="'+ar+'"');continue;}
if(ar==WIDTH){eval(pf+'width='+ar);continue;}
if(ar==BORDER){eval(pf+'border='+ar);continue;}
if(ar==CELLPAD){i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad'));continue;}
if(ar==STATUS){eval(pf+"status='"+escSglQuote(ar)+"'");continue;}
if(ar==AUTOSTATUS){eval(pf+'autostatus=('+pf+'autostatus==1)?0:1');continue;}
if(ar==AUTOSTATUSCAP){eval(pf+'autostatus=('+pf+'autostatus==2)?0:2');continue;}
if(ar==HEIGHT){eval(pf+'height='+pf+'aboveheight='+ar);continue;}
if(ar==CLOSETEXT){eval(pf+"close='"+escSglQuote(ar)+"'");continue;}
if(ar==SNAPX){eval(pf+'snapx='+ar);continue;}
if(ar==SNAPY){eval(pf+'snapy='+ar);continue;}
if(ar==FIXX){eval(pf+'fixx='+ar);continue;}
if(ar==FIXY){eval(pf+'fixy='+ar);continue;}
if(ar==RELX){eval(pf+'relx='+ar);continue;}
if(ar==RELY){eval(pf+'rely='+ar);continue;}
if(ar==FGBACKGROUND){eval(pf+'fgbackground="'+ar+'"');continue;}
if(ar==BGBACKGROUND){eval(pf+'bgbackground="'+ar+'"');continue;}
if(ar==PADX){eval(pf+'padxl='+ar);eval(pf+'padxr='+ar);continue;}
if(ar==PADY){eval(pf+'padyt='+ar);eval(pf+'padyb='+ar);continue;}
if(ar==FULLHTML){if(pf!='ol_')eval(pf+'fullhtml=1');continue;}
if(ar==BELOW||ar==ABOVE){eval(pf+'vpos='+ar);if(pf!='ol_')olVautoFlag=1;continue;}
if(ar==CAPICON){eval(pf+'capicon="'+ar+'"');continue;}
if(ar==TEXTFONT){eval(pf+"textfont='"+escSglQuote(ar)+"'");continue;}
if(ar==CAPTIONFONT){eval(pf+"captionfont='"+escSglQuote(ar)+"'");continue;}
if(ar==CLOSEFONT){eval(pf+"closefont='"+escSglQuote(ar)+"'");continue;}
if(ar==TEXTSIZE){eval(pf+'textsize="'+ar+'"');continue;}
if(ar==CAPTIONSIZE){eval(pf+'captionsize="'+ar+'"');continue;}
if(ar==CLOSESIZE){eval(pf+'closesize="'+ar+'"');continue;}
if(ar==TIMEOUT){eval(pf+'timeout='+ar);continue;}
if(ar==FUNCTION){if(pf=='ol_'){if(typeof ar!='number'){v=ar;ol_function=(typeof v=='function'?v:null);}}else{fnMark=0;v=null;if(typeof ar!='number')v=ar; opt_FUNCTION(v);} continue;}
if(ar==DELAY){eval(pf+'delay='+ar);continue;}
if(ar==HAUTO){eval(pf+'hauto=('+pf+'hauto==0)?1:0');continue;}
if(ar==VAUTO){eval(pf+'vauto=('+pf+'vauto==0)?1:0');continue;}
if(ar==CLOSECLICK){eval(pf+'closeclick=('+pf+'closeclick==0)?1:0');continue;}
if(ar==WRAP){eval(pf+'wrap=('+pf+'wrap==0)?1:0');continue;}
if(ar==FOLLOWMOUSE){eval(pf+'followmouse=('+pf+'followmouse==1)?0:1');continue;}
if(ar==MOUSEOFF){eval(pf+'mouseoff=('+pf+'mouseoff==0)?1:0');v=ar;if(pf!='ol_'&&eval(pf+'mouseoff')&&typeof v=='number'&&(v<pmStart||v>pmUpper))olHideDelay=ar;continue;}
if(ar==CLOSETITLE){eval(pf+"closetitle='"+escSglQuote(ar)+"'");continue;}
if(ar==CSSOFF||ar==CSSCLASS){eval(pf+'css='+ar);continue;}
if(ar==COMPATMODE){eval(pf+'compatmode=('+pf+'compatmode==0)?1:0');continue;}
if(ar==FGCLASS){eval(pf+'fgclass="'+ar+'"');continue;}
if(ar==BGCLASS){eval(pf+'bgclass="'+ar+'"');continue;}
if(ar==TEXTFONTCLASS){eval(pf+'textfontclass="'+ar+'"');continue;}
if(ar==CAPTIONFONTCLASS){eval(pf+'captionfontclass="'+ar+'"');continue;}
if(ar==CLOSEFONTCLASS){eval(pf+'closefontclass="'+ar+'"');continue;}
i=parseCmdLine(pf,i,ar);}}
if(fnMark&&o3_function)o3_text=o3_function();
if((pf=='o3_')&&o3_wrap){o3_width=0;
var tReg=/<.*\n*>/ig;if(!tReg.test(o3_text))o3_text=o3_text.replace(/+/g,'&nbsp;');if(!tReg.test(o3_cap))o3_cap=o3_cap.replace(/+/g,'&nbsp;');}
if((pf=='o3_')&&o3_sticky){if(!o3_close&&(o3_frame!=ol_frame))o3_close=ol_close;if(o3_mouseoff&&(o3_frame==ol_frame))opt_NOCLOSE(' ');}}
function layerWrite(txt){txt+="\n";if(olNs4){var lyr=o3_frame.document.layers.document
lyr.write(txt)
lyr.close()
}else if(typeof over.innerHTML!='undefined'){if(olIe5&&isMac)over.innerHTML='';over.innerHTML=txt;}else{range=o3_frame.document.createRange();range.setStartAfter(over);domfrag=range.createContextualFragment(txt);
while(over.hasChildNodes()){over.removeChild(over.lastChild);}
over.appendChild(domfrag);}}
function showObject(obj){runHook("showObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);theObj.visibility='visible';
runHook("showObject",FAFTER);}
function hideObject(obj){runHook("hideObject",FBEFORE);
var theObj=(olNs4?obj:obj.style);if(olNs6&&olShowId>0){clearTimeout(olShowId);olShowId=0;}
theObj.visibility='hidden';theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);
if(o3_timerid>0)clearTimeout(o3_timerid);if(o3_delayid>0)clearTimeout(o3_delayid);
o3_timerid=0;o3_delayid=0;self.status="";
if(obj.onmouseout||obj.onmouseover){if(olNs4)obj.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);obj.onmouseout=obj.onmouseover=null;}
runHook("hideObject",FAFTER);}
function repositionTo(obj,xL,yL){var theObj=(olNs4?obj:obj.style);theObj.left=xL+(!olNs4?'px':0);theObj.top=yL+(!olNs4?'px':0);}
function cursorOff(){var left=parseInt(over.style.left);var top=parseInt(over.style.top);var right=left+(over.offsetWidth>=parseInt(o3_width)?over.offsetWidth:parseInt(o3_width));var bottom=top+(over.offsetHeight>=o3_aboveheight?over.offsetHeight:o3_aboveheight);
if(o3_x<left||o3_x>right||o3_y<top||o3_y>bottom)return true;
return false;}
function opt_FUNCTION(callme){o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):callme):callme()):(o3_function?o3_function():'No Function'));
return 0;}
function opt_NOCLOSE(unused){if(!unused)o3_close="";
if(olNs4){over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseover=function(){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }
over.onmouseout=function(e){if(olHideDelay)hideDelay(olHideDelay);else cClick(e);}
}else{over.onmouseover=function(){hoveringSwitch=true;if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }}
return 0;}
function opt_MULTIPLEARGS(i,args,parameter){var k=i,re,pV,str='';
for(k=i;k<args.length;k++){if(typeof args=='number'&&args>pmStart)break;str+=args+',';}
if(str)str=str.substring(0,--str.length);
k--;pV=(olNs4&&/cellpad/i.test(parameter))?str.split(','):str;eval(parameter+'="'+pV+'"');
return k;}
function nbspCleanup(){if(o3_wrap){o3_text=o3_text.replace(/\&nbsp;/g,' ');o3_cap=o3_cap.replace(/\&nbsp;/g,' ');}}
function escSglQuote(str){return str.toString().replace(/'/g,"\\'");}
function OLonLoad_handler(e){var re=/\w+\(.*\)+/g,olre=/overlib\(|nd\(|cClick\(/,fn,l,i;
if(!olLoaded)olLoaded=1;
if(window.removeEventListener&&e.eventPhase==3)window.removeEventListener("load",OLonLoad_handler,false);else if(window.detachEvent){window.detachEvent("onload",OLonLoad_handler);var fN=document.body.getAttribute('onload');if(fN){fN=fN.toString().match(re);if(fN&&fN.length){for(i=0;i<fN.length;i++){if(/anonymous/.test(fN))continue;while((l=fN.search(/\)+/))!=-1){fn=fN.substring(0,l+1);fN=fN.substring(l+2);if(olre.test(fn))eval(fn);}}}}}}
function wrapStr(endWrap,fontSizeStr,whichString){var fontStr,fontColor,isClose=((whichString=='close')?1:0),hasDims=/+$/.test(fontSizeStr);fontSizeStr=(olNs4)?(!hasDims?fontSizeStr:'1'):fontSizeStr;if(endWrap)return(hasDims&&!olNs4)?(isClose?'</span>':'</div>'):'</font>';else{fontStr='o3_'+whichString+'font';fontColor='o3_'+((whichString=='caption')? 'cap':whichString)+'color';return(hasDims&&!olNs4)?(isClose?'<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">':'<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+';color: '+eval(fontColor)+';font-size: '+fontSizeStr+';">'):'<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7?'7':fontSizeStr)+'">';}}
function quoteMultiNameFonts(theFont){var v,pM=theFont.split(',');for(var i=0;i<pM.length;i++){v=pM;v=v.replace(/^\s+/,'').replace(/\s+$/,'');if(/\s/.test(v)&&!//.test(v)){v="\'"+v+"\'";pM=v;}}
return pM.join();}
function isExclusive(args){return false;}
function setCellPadStr(parameter){var Str='',j=0,ary=new Array(),top,bottom,left,right;
Str+='padding: ';ary=parameter.replace(/\s+/g,'').split(',');
switch(ary.length){case 2:
top=bottom=ary;left=right=ary;break;case 3:
top=ary;left=right=ary;bottom=ary;break;case 4:
top=ary;right=ary;bottom=ary;left=ary;break;}
Str+=((ary.length==1)?ary+'px;':top+'px '+right+'px '+bottom+'px '+left+'px;');
return Str;}
function hideDelay(time){if(time&&!o3_delay){if(o3_timerid>0)clearTimeout(o3_timerid);
o3_timerid=setTimeout("cClick()",(o3_timeout=time));}}
function horizontalPlacement(browserWidth,horizontalScrollAmount,widthFix){var placeX,iwidth=browserWidth,winoffset=horizontalScrollAmount;var parsedWidth=parseInt(o3_width);
if(o3_fixx>-1||o3_relx!=null){
placeX=(o3_relx!=null?( o3_relx<0?winoffset+o3_relx+iwidth-parsedWidth-widthFix:winoffset+o3_relx):o3_fixx);}else{
if(o3_hauto==1){if((o3_x-winoffset)>(iwidth/2)){o3_hpos=LEFT;}else{o3_hpos=RIGHT;}}
if(o3_hpos==CENTER){placeX=o3_x+o3_offsetx-(parsedWidth/2);
if(placeX<winoffset)placeX=winoffset;}
if(o3_hpos==RIGHT){placeX=o3_x+o3_offsetx;
if((placeX+parsedWidth)>(winoffset+iwidth-widthFix)){placeX=iwidth+winoffset-parsedWidth-widthFix;if(placeX<0)placeX=0;}}
if(o3_hpos==LEFT){placeX=o3_x-o3_offsetx-parsedWidth;if(placeX<winoffset)placeX=winoffset;}
if(o3_snapx>1){var snapping=placeX % o3_snapx;
if(o3_hpos==LEFT){placeX=placeX-(o3_snapx+snapping);}else{
placeX=placeX+(o3_snapx-snapping);}
if(placeX<winoffset)placeX=winoffset;}}
return placeX;}
function verticalPlacement(browserHeight,verticalScrollAmount){var placeY,iheight=browserHeight,scrolloffset=verticalScrollAmount;var parsedHeight=(o3_aboveheight?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight));
if(o3_fixy>-1||o3_rely!=null){
placeY=(o3_rely!=null?(o3_rely<0?scrolloffset+o3_rely+iheight-parsedHeight:scrolloffset+o3_rely):o3_fixy);}else{
if(o3_vauto==1){if((o3_y-scrolloffset)>(iheight/2)&&o3_vpos==BELOW&&(o3_y+parsedHeight+o3_offsety-(scrolloffset+iheight)>0)){o3_vpos=ABOVE;}else if(o3_vpos==ABOVE&&(o3_y-(parsedHeight+o3_offsety)-scrolloffset<0)){o3_vpos=BELOW;}}
if(o3_vpos==ABOVE){if(o3_aboveheight==0)o3_aboveheight=parsedHeight;
placeY=o3_y-(o3_aboveheight+o3_offsety);if(placeY<scrolloffset)placeY=scrolloffset;}else{
placeY=o3_y+o3_offsety;}
if(o3_snapy>1){var snapping=placeY % o3_snapy;
if(o3_aboveheight>0&&o3_vpos==ABOVE){placeY=placeY-(o3_snapy+snapping);}else{placeY=placeY+(o3_snapy-snapping);}
if(placeY<scrolloffset)placeY=scrolloffset;}}
return placeY;}
function checkPositionFlags(){if(olHautoFlag)olHautoFlag=o3_hauto=0;if(olVautoFlag)olVautoFlag=o3_vauto=0;return true;}
function windowWidth(){var w;if(o3_frame.innerWidth)w=o3_frame.innerWidth;else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth'))
w=eval('o3_frame.'+docRoot+'.clientWidth');return w;}
function createDivContainer(id,frm,zValue){id=(id||'overDiv'),frm=(frm||o3_frame),zValue=(zValue||1000);var objRef,divContainer=layerReference(id);
if(divContainer==null){if(olNs4){divContainer=frm.document.layers=new Layer(window.innerWidth,frm);objRef=divContainer;}else{var body=(olIe4?frm.document.all.tags('BODY'):frm.document.getElementsByTagName("BODY"));if(olIe4&&!document.getElementById){body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>');divContainer=layerReference(id);}else{divContainer=frm.document.createElement("DIV");divContainer.id=id;body.appendChild(divContainer);}
objRef=divContainer.style;}
objRef.position='absolute';objRef.visibility='hidden';objRef.zIndex=zValue;if(olIe4&&!olOp)objRef.left=objRef.top='0px';else objRef.left=objRef.top=-10000+(!olNs4?'px':0);}
return divContainer;}
function layerReference(id){return(olNs4?o3_frame.document.layers:(document.all?o3_frame.document.all:o3_frame.document.getElementById(id)));}
function isFunction(fnRef){var rtn=true;
if(typeof fnRef=='object'){for(var i=0;i<fnRef.length;i++){if(typeof fnRef=='function')continue;rtn=false;break;}
}else if(typeof fnRef!='function'){rtn=false;}
return rtn;}
function argToString(array,strtInd,argName){var jS=strtInd,aS='',ar=array;argName=(argName?argName:'ar');
if(ar.length>jS){for(var k=jS;k<ar.length;k++)aS+=argName+', ';aS=aS.substring(0,aS.length-2);}
return aS;}
function reOrder(hookPt,fnRef,order){var newPt=new Array(),match,i,j;
if(!order||typeof order=='undefined'||typeof order=='number')return hookPt;
if(typeof order=='function'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt=fnRef;}
for(i=0;i<hookPt.length;i++){match=false;if(typeof fnRef=='function'&&hookPt==fnRef){continue;}else{for(j=0;j<fnRef.length;j++)if(hookPt==fnRef){match=true;break;}}
if(!match)newPt=hookPt;}
newPt=order;
}else if(typeof order=='object'){if(typeof fnRef=='object'){newPt=newPt.concat(fnRef);}else{newPt=fnRef;}
for(j=0;j<hookPt.length;j++){match=false;if(typeof fnRef=='function'&&hookPt==fnRef){continue;}else{for(i=0;i<fnRef.length;i++)if(hookPt==fnRef){match=true;break;}}
if(!match)newPt=hookPt;}
for(i=0;i<newPt.length;i++)hookPt=newPt;newPt.length=0;
for(j=0;j<hookPt.length;j++){match=false;for(i=0;i<order.length;i++){if(hookPt==order){match=true;break;}}
if(!match)newPt=hookPt;}
newPt=newPt.concat(order);}
hookPt=newPt;
return hookPt;}
function setRunTimeVariables(){if(typeof runTime!='undefined'&&runTime.length){for(var k=0;k<runTime.length;k++){runTime();}}}
function parseCmdLine(pf,i,args){if(typeof cmdLine!='undefined'&&cmdLine.length){for(var k=0;k<cmdLine.length;k++){var j=cmdLine(pf,i,args);if(j >-1){i=j;break;}}}
return i;}
function postParseChecks(pf,args){if(typeof postParse!='undefined'&&postParse.length){for(var k=0;k<postParse.length;k++){if(postParse(pf,args))continue;return false;}}
return true;}
function registerCommands(cmdStr){if(typeof cmdStr!='string')return;
var pM=cmdStr.split(',');pms=pms.concat(pM);
for(var i=0;i< pM.length;i++){eval(pM.toUpperCase()+'='+pmCount++);}}
function registerNoParameterCommands(cmdStr){if(!cmdStr&&typeof cmdStr!='string')return;pmt=(!pmt)?cmdStr:pmt+','+cmdStr;}
function registerHook(fnHookTo,fnRef,hookType,optPm){var hookPt,last=typeof optPm;
if(fnHookTo=='plgIn'||fnHookTo=='postParse')return;if(typeof hookPts=='undefined')hookPts=new FunctionReference();
hookPt=hookPts;
if(hookType!=null){if(hookType==FREPLACE){hookPt.ovload=fnRef;if(fnHookTo.indexOf('ol_content_')>-1)hookPt.alt]=fnRef;
}else if(hookType==FBEFORE||hookType==FAFTER){var hookPt=(hookType==1?hookPt.before:hookPt.after);
if(typeof fnRef=='object'){hookPt=hookPt.concat(fnRef);}else{hookPt=fnRef;}
if(optPm)hookPt=reOrder(hookPt,fnRef,optPm);
}else if(hookType==FALTERNATE){if(last=='number')hookPt.alt]=fnRef;}else if(hookType==FCHAIN){hookPt=hookPt.chain;if(typeof fnRef=='object')hookPt=hookPt.concat(fnRef);else hookPt=fnRef;}
return;}}
function registerRunTimeFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){runTime=runTime.concat(fn);}else{runTime=fn;}}}
function registerCmdLineFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){cmdLine=cmdLine.concat(fn);}else{cmdLine=fn;}}}
function registerPostParseFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){postParse=postParse.concat(fn);}else{postParse=fn;}}}
function runHook(fnHookTo,hookType){var l=hookPts,k,rtnVal=null,optPm,arS,ar=runHook.arguments;
if(hookType==FREPLACE){arS=argToString(ar,2);
if(typeof l=='undefined'||!(l=l.ovload))rtnVal=eval(fnHookTo+'('+arS+')');else rtnVal=eval('l('+arS+')');
}else if(hookType==FBEFORE||hookType==FAFTER){if(typeof l!='undefined'){l=(hookType==1?l.before:l.after);
if(l.length){arS=argToString(ar,2);for(var k=0;k<l.length;k++)eval('l('+arS+')');}}
}else if(hookType==FALTERNATE){optPm=ar;arS=argToString(ar,3);
if(typeof l=='undefined'||(l=l.alt])=='undefined'){rtnVal=eval(fnHookTo+'('+arS+')');}else{rtnVal=eval('l('+arS+')');}
}else if(hookType==FCHAIN){arS=argToString(ar,2);l=l.chain;
for(k=l.length;k>0;k--)if((rtnVal=eval('l('+arS+')'))!=void(0))break;}
return rtnVal;}
function FunctionReference(){this.ovload=null;this.before=new Array();this.after=new Array();this.alt=new Array();this.chain=new Array();}
function Info(version,prerelease){this.version=version;this.prerelease=prerelease;
this.simpleversion=Math.round(this.version*100);this.major=parseInt(this.simpleversion/100);this.minor=parseInt(this.simpleversion/10)-this.major * 10;this.revision=parseInt(this.simpleversion)-this.major * 100-this.minor * 10;this.meets=meets;}
function meets(reqdVersion){return(!reqdVersion)?false:this.simpleversion>=Math.round(100*parseFloat(reqdVersion));}
registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSOFF);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSOFF);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSOFF);registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSCLASS);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSCLASS);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSCLASS);registerPostParseFunction(checkPositionFlags);registerHook("hideObject",nbspCleanup,FAFTER);registerHook("horizontalPlacement",horizontalPlacement,FCHAIN);registerHook("verticalPlacement",verticalPlacement,FCHAIN);if(olNs4||(olIe5&&isMac)||olKq)olLoaded=1;registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
var olCheckMouseCapture=true;if((olNs4||olNs6||olIe4)){olMouseCapture();}else{overlib=no_overlib;nd=no_overlib;ver3fix=true;}