<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.ourbaku.com/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AShadowSeraph%2FImageMapEdit.js</id>
	<title>Участник:ShadowSeraph/ImageMapEdit.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.ourbaku.com/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AShadowSeraph%2FImageMapEdit.js"/>
	<link rel="alternate" type="text/html" href="https://www.ourbaku.com/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:ShadowSeraph/ImageMapEdit.js&amp;action=history"/>
	<updated>2026-11-12T12:51:42Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://www.ourbaku.com/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:ShadowSeraph/ImageMapEdit.js&amp;diff=426&amp;oldid=prev</id>
		<title>ShadowSeraph в 15:13, 22 сентября 2009</title>
		<link rel="alternate" type="text/html" href="https://www.ourbaku.com/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:ShadowSeraph/ImageMapEdit.js&amp;diff=426&amp;oldid=prev"/>
		<updated>2009-09-22T15:13:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 15:13, 22 сентября 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot;&gt;Строка 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Location of the HTML fragment containing the form code for ImageMapEdit.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Location of the HTML fragment containing the form code for ImageMapEdit.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;var IME_HTMLFILE = wgScriptPath + &#039;/index.php?title=User:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dapete&lt;/del&gt;/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1&#039;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;var IME_HTMLFILE = wgScriptPath + &#039;/index.php?title=User:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ShadowSeraph&lt;/ins&gt;/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1&#039;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Location of the XML file containing translations&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Location of the XML file containing translations&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;var IME_TRANSLATEFILE = wgScriptPath + &#039;/index.php?title=User:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dapete&lt;/del&gt;/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1&#039;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;var IME_TRANSLATEFILE = wgScriptPath + &#039;/index.php?title=User:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ShadowSeraph&lt;/ins&gt;/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1&#039;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Scripts to create the circle and polygon images&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Scripts to create the circle and polygon images&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ShadowSeraph</name></author>
	</entry>
	<entry>
		<id>https://www.ourbaku.com/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:ShadowSeraph/ImageMapEdit.js&amp;diff=422&amp;oldid=prev</id>
		<title>ShadowSeraph: Новая страница: «/* Constants */   // Append a number at the end of these URLs to ensure that, if changes to the fragment have // been made, a reload is forced. This is important if …»</title>
		<link rel="alternate" type="text/html" href="https://www.ourbaku.com/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:ShadowSeraph/ImageMapEdit.js&amp;diff=422&amp;oldid=prev"/>
		<updated>2009-09-22T15:07:08Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&lt;span class=&quot;autocomment&quot;&gt;Constants: &lt;/span&gt;   // Append a number at the end of these URLs to ensure that, if changes to the fragment have // been made, a reload is forced. This is important if …»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Constants */&lt;br /&gt;
 &lt;br /&gt;
// Append a number at the end of these URLs to ensure that, if changes to the fragment have&lt;br /&gt;
// been made, a reload is forced. This is important if this is used in a&lt;br /&gt;
// heavily cached environment (say, Wikipedia).&lt;br /&gt;
 &lt;br /&gt;
// Location of the HTML fragment containing the form code for ImageMapEdit.&lt;br /&gt;
var IME_HTMLFILE = wgScriptPath + &amp;#039;/index.php?title=User:Dapete/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
// Location of the XML file containing translations&lt;br /&gt;
var IME_TRANSLATEFILE = wgScriptPath + &amp;#039;/index.php?title=User:Dapete/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
// Scripts to create the circle and polygon images&lt;br /&gt;
var IME_CIRCLESCRIPT = &amp;#039;http://toolserver.org/~dapete/ImageMapEdit/circle.php&amp;#039;;&lt;br /&gt;
var IME_POLYSCRIPT = &amp;#039;http://toolserver.org/~dapete/ImageMapEdit/poly.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
// Error messages that cannot be localized in XML&lt;br /&gt;
var IME_ERROR_IMAGENOTFOUND = &amp;#039;ImageMapEdit: Could not find image in page structure.&amp;#039;;&lt;br /&gt;
var IME_ERROR_XMLHTTPREQUEST = &amp;#039;ImageMapEdit: Browser does not support XMLHttpRequest.&amp;#039;;&lt;br /&gt;
var IME_ERROR_LOADURL = &amp;#039;ImageMapEdit: Could not load URL:&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Copyright (c) 2007-2009 Peter Schlömer&lt;br /&gt;
 &lt;br /&gt;
    Released under the following licenses (to make reuse in other Wikis&lt;br /&gt;
    easier):&lt;br /&gt;
 &lt;br /&gt;
    GNU General Public License (GPL), version 2&lt;br /&gt;
    GNU Free Documentatin Licence (GFDL), version 1.2 or later&lt;br /&gt;
    Creative Commons Attribution ShareAlike (CC-by-sa), version 2 or later&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Global variables&lt;br /&gt;
*/&lt;br /&gt;
var ime_areas = Array();&lt;br /&gt;
var ime_currentlyEditing = -1;&lt;br /&gt;
var ime_width;&lt;br /&gt;
var ime_height;&lt;br /&gt;
var ime_scale;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Start Inizialization if this is an image page and there actually is an image&lt;br /&gt;
*/&lt;br /&gt;
// Add hook&lt;br /&gt;
addOnloadHook(ime_onload);&lt;br /&gt;
function ime_onload() {&lt;br /&gt;
    // Determine whether we are on an image page. Namespace must be 6 and action view&lt;br /&gt;
    if (wgNamespaceNumber==6 &amp;amp;&amp;amp; wgAction==&amp;#039;view&amp;#039;) {&lt;br /&gt;
        // If we can a div with id file, we initialize&lt;br /&gt;
        if (document.getElementById(&amp;#039;file&amp;#039;)) {&lt;br /&gt;
            ime_init1();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Create a XMLHttpRequest object, trying differnet methods. Returns&lt;br /&gt;
    false if no XMLHttpRequest implementation could be found.&lt;br /&gt;
*/&lt;br /&gt;
function ime_xmlHttpRequest() {&lt;br /&gt;
    if (window.XMLHttpRequest) {&lt;br /&gt;
        return new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
            return new ActiveXObject(&amp;#039;Microsoft.XMLHTTP&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
        catch (e) {&lt;br /&gt;
            try {&lt;br /&gt;
                return new ActiveXObject(&amp;#039;Msxml2.XMLHTTP&amp;#039;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (e) {&lt;br /&gt;
                // Do nothing&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (window.createRequest) {&lt;br /&gt;
        return window.createRequest();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Parses the XML in a string, trying different methods. Returns false if&lt;br /&gt;
    anything doesn&amp;#039;t work, otherwise returns an XML document object.&lt;br /&gt;
 &lt;br /&gt;
    This is necessary because XML data returned from wiki pages in MediaWiki&lt;br /&gt;
    is not parsed as XML correctly, probably because of Content-type problems.&lt;br /&gt;
    In contrast, XML returned by the API works perfectly...&lt;br /&gt;
*/&lt;br /&gt;
function ime_xmlParseString(xmlString) {&lt;br /&gt;
    if (document.implementation &amp;amp;&amp;amp; document.implementation.createDocument) {&lt;br /&gt;
        var parser = new DOMParser();&lt;br /&gt;
        return parser.parseFromString(xmlString,&amp;#039;text/xml&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
            var xmlDoc = new ActiveXObject(&amp;#039;Microsoft.XMLDOM&amp;#039;);&lt;br /&gt;
            xmlDoc.async = &amp;#039;false&amp;#039;;&lt;br /&gt;
            xmlDoc.loadXML(xmlString);&lt;br /&gt;
            return xmlDoc;&lt;br /&gt;
        }&lt;br /&gt;
        catch (e) {&lt;br /&gt;
            // Do nothing&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Create a new div element object with an id.&lt;br /&gt;
*/&lt;br /&gt;
function ime_htmlNewDiv(id) {&lt;br /&gt;
    var div = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    if (id) div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Initialization, part 1: Tries to find image and uses a XMLHttpRequest&lt;br /&gt;
    to download information about the image. When this is done (it&amp;#039;s an&lt;br /&gt;
    asynchronous request) show a link to load the rest of ImageMapEdit&lt;br /&gt;
    using ime_init2().&lt;br /&gt;
*/&lt;br /&gt;
function ime_init1() {&lt;br /&gt;
    var divFile = document.getElementById(&amp;#039;file&amp;#039;);&lt;br /&gt;
    if (!divFile) {&lt;br /&gt;
        ime_error(IME_ERROR_IMAGENOTFOUND + &amp;#039; (ime_init1,divFile=null)&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var a = ime_findATag(divFile);&lt;br /&gt;
    if (!a) {&lt;br /&gt;
        ime_error(IME_ERROR_IMAGENOTFOUND + &amp;#039; (ime_init1,a=null)&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var img = a.firstChild;&lt;br /&gt;
    if (!img) {&lt;br /&gt;
        ime_error(IME_ERROR_IMAGENOTFOUND + &amp;#039; (ime_init1,img=null)&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Now try to use API to get real image parameters&lt;br /&gt;
    var request = ime_xmlHttpRequest();&lt;br /&gt;
 &lt;br /&gt;
    // First time we tried to get a xmlHttpRequest, so if it fails here, it&amp;#039;s&lt;br /&gt;
    // not supported at all&lt;br /&gt;
    if (!request) {&lt;br /&gt;
        ime_error(IME_ERROR_XMLHTTPREQUEST);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var url = wgScriptPath + &amp;#039;/api.php?format=xml&amp;amp;action=query&amp;amp;prop=imageinfo&amp;amp;iiprop=size&amp;amp;titles=&amp;#039; + wgPageName;&lt;br /&gt;
    request.open(&amp;#039;GET&amp;#039;, url, true);&lt;br /&gt;
    request.send(null);&lt;br /&gt;
    request.onreadystatechange = function() {&lt;br /&gt;
        if (request.readyState == 4) {&lt;br /&gt;
            if (request.status == 200) {&lt;br /&gt;
                // Get image data&lt;br /&gt;
                var response = request.responseXML.documentElement;&lt;br /&gt;
                var iiAttr = response.getElementsByTagName(&amp;#039;ii&amp;#039;)[0].attributes;&lt;br /&gt;
                ime_width = iiAttr.getNamedItem(&amp;#039;width&amp;#039;).nodeValue;&lt;br /&gt;
                ime_height = iiAttr.getNamedItem(&amp;#039;height&amp;#039;).nodeValue;&lt;br /&gt;
 &lt;br /&gt;
                ime_scale = img.width/ime_width;&lt;br /&gt;
 &lt;br /&gt;
                // Show &amp;#039;show ImageMapEdit&amp;#039; button now&lt;br /&gt;
                var a = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
                a.id = &amp;#039;imeLink&amp;#039;;&lt;br /&gt;
                a.href = &amp;#039;javascript:ime_init2()&amp;#039;;&lt;br /&gt;
                a.style.display = &amp;#039;block&amp;#039;;&lt;br /&gt;
                a.appendChild(document.createTextNode(&amp;#039;ImageMapEdit &amp;gt;&amp;#039;));&lt;br /&gt;
                document.getElementById(&amp;#039;file&amp;#039;).appendChild(a);&lt;br /&gt;
 &lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                ime_error (IME_ERROR_LOADURL + &amp;#039; &amp;#039; + url + &amp;#039; (ime_init1,request.status=&amp;#039; + request.status + &amp;#039;).&amp;#039;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Initialization, part 2: Triggered by an external link. Does some moving&lt;br /&gt;
    around of the image in the logical structure of the page, then hides the&lt;br /&gt;
    link and finally loads some more HTML code and translation information&lt;br /&gt;
    from external files (IME_HTMLFILE and IME_TRANSLATEFILE) using an&lt;br /&gt;
    asynchronous XMLHttpRequest.&lt;br /&gt;
*/&lt;br /&gt;
function ime_init2() {&lt;br /&gt;
 &lt;br /&gt;
    // Remove UI that might interfere with this code&lt;br /&gt;
    ime_removeOtherUIElements();&lt;br /&gt;
 &lt;br /&gt;
    var divFile = document.getElementById(&amp;#039;file&amp;#039;);&lt;br /&gt;
    var tempNode = divFile.firstChild;&lt;br /&gt;
    var a = ime_findATag(tempNode);&lt;br /&gt;
    var img = a.firstChild;&lt;br /&gt;
 &lt;br /&gt;
    var divImeContainer = ime_htmlNewDiv(&amp;#039;imeContainer&amp;#039;);&lt;br /&gt;
    divImeContainer.style.position = &amp;#039;relative&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
    // Move image from within link to outside&lt;br /&gt;
    a.removeChild(img);&lt;br /&gt;
    divFile.insertBefore(divImeContainer,tempNode);&lt;br /&gt;
    divFile.removeChild(tempNode);&lt;br /&gt;
 &lt;br /&gt;
    img.id = &amp;#039;imeImg&amp;#039;;&lt;br /&gt;
    img.style.zIndex = 99;&lt;br /&gt;
    img.style.border = &amp;#039;none&amp;#039;;&lt;br /&gt;
    img.style.opacity = &amp;#039;0.75&amp;#039;;&lt;br /&gt;
    img.style.filter = &amp;#039;alpha(opacity=75)&amp;#039;; // IE&lt;br /&gt;
 &lt;br /&gt;
    // Internet Explorer needs this differently&lt;br /&gt;
    if (typeof(navigator.userAgent) != &amp;#039;undefined&amp;#039; &amp;amp;&amp;amp; navigator.userAgent.match(&amp;#039;/MSIE/&amp;#039;)) {&lt;br /&gt;
        divImeContainer.style.overflow = &amp;#039;none&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        divImeContainer.style.overflow = &amp;#039;auto&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var divImePreview = ime_htmlNewDiv(&amp;#039;imePreview&amp;#039;);&lt;br /&gt;
    divImePreview.style.position = &amp;#039;absolute&amp;#039;;&lt;br /&gt;
    divImePreview.style.top = &amp;#039;0&amp;#039;;&lt;br /&gt;
    divImePreview.style.left = &amp;#039;0&amp;#039;;&lt;br /&gt;
    divImePreview.style.width = img.width + &amp;#039;px&amp;#039;;&lt;br /&gt;
    divImePreview.style.height = img.height + &amp;#039;px&amp;#039;;&lt;br /&gt;
    divImePreview.zIndex = 0;&lt;br /&gt;
 &lt;br /&gt;
    divImeContainer.appendChild(divImePreview);&lt;br /&gt;
    divImeContainer.appendChild(img);&lt;br /&gt;
 &lt;br /&gt;
    var divIme = ime_htmlNewDiv(&amp;#039;ime&amp;#039;);&lt;br /&gt;
    divFile.appendChild(divIme);&lt;br /&gt;
 &lt;br /&gt;
    // Hide the link now&lt;br /&gt;
    document.getElementById(&amp;#039;imeLink&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
    // Disable image context menu so right click can be used for events&lt;br /&gt;
    img.oncontextmenu = ime_eventDummy;&lt;br /&gt;
 &lt;br /&gt;
    // Load form data with HTTP&lt;br /&gt;
    var request = ime_xmlHttpRequest();&lt;br /&gt;
 &lt;br /&gt;
    if (!request) {&lt;br /&gt;
        ime_error (IME_ERROR_LOADURL + &amp;#039; &amp;#039; + url + &amp;#039; (ime_init2,request=null)&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    request.open(&amp;#039;GET&amp;#039;, IME_HTMLFILE, true);&lt;br /&gt;
    request.onreadystatechange = function() {&lt;br /&gt;
        if (request.readyState == 4) {&lt;br /&gt;
            if (request.status == 200) {&lt;br /&gt;
                divIme.innerHTML = request.responseText;&lt;br /&gt;
 &lt;br /&gt;
                // Another request for the XML file containing translations&lt;br /&gt;
                var request2 = ime_xmlHttpRequest();&lt;br /&gt;
                if (!request) {&lt;br /&gt;
                    ime_error (IME_ERROR_LOADURL + &amp;#039; &amp;#039; + url + &amp;#039; (ime_init2,request2=null)&amp;#039;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                request2.open(&amp;#039;GET&amp;#039;, IME_TRANSLATEFILE, true);&lt;br /&gt;
                request2.onreadystatechange = function() {&lt;br /&gt;
                    if (request2.readyState == 4) {&lt;br /&gt;
                        if (request2.status == 200) {&lt;br /&gt;
                            var response;&lt;br /&gt;
                            if (request2.responseXML) {&lt;br /&gt;
                                response = request2.responseXML.documentElement;&lt;br /&gt;
                            }&lt;br /&gt;
                            else {&lt;br /&gt;
                                // Stupid workaround of responseXML is empty -&lt;br /&gt;
                                // just parse the responseText again&lt;br /&gt;
                                response = ime_xmlParseString(request2.responseText).documentElement;&lt;br /&gt;
                            }&lt;br /&gt;
                            var languages = response.getElementsByTagName(&amp;#039;language&amp;#039;);&lt;br /&gt;
                            // Use translation for the currently set language (MediaWiki supplies this in wgUserLanguage)&lt;br /&gt;
                            ime_translate(wgUserLanguage, languages);&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                            ime_error (IME_ERROR_LOADURL + &amp;#039; &amp;#039; + IME_TRANSLATEFILE + &amp;#039; (ime_init2,request2.status=&amp;#039; + request2.status + &amp;#039;).&amp;#039;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                request2.send(null);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                ime_error (IME_ERROR_LOADURL + &amp;#039; &amp;#039; + IME_HTMLFILE + &amp;#039; (ime_init2,request.status=&amp;#039; + request.status + &amp;#039;).&amp;#039;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    request.send(null);&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Translate the user interface to the specified language.&lt;br /&gt;
*/&lt;br /&gt;
function ime_translate(languageCode, languages) {&lt;br /&gt;
    var language = false;&lt;br /&gt;
    // Try to find language information&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i&amp;lt;languages.length; i++) {&lt;br /&gt;
        if (languages[i].attributes.getNamedItem(&amp;#039;name&amp;#039;).nodeValue == languageCode) {&lt;br /&gt;
            language = languages[i];&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // If a language has been found ...&lt;br /&gt;
    if (language) {&lt;br /&gt;
        // ... see if we need to inherit another language&lt;br /&gt;
        if (language.attributes.getNamedItem(&amp;#039;inherit&amp;#039;)) {&lt;br /&gt;
            // If we do, we call ourselves recursively to translate to that language first&lt;br /&gt;
            ime_translate(language.attributes.getNamedItem(&amp;#039;inherit&amp;#039;).nodeValue, languages);&lt;br /&gt;
        }&lt;br /&gt;
        // ... get all the translations and replace the text in the HTML&lt;br /&gt;
        var translations = language.getElementsByTagName(&amp;#039;translation&amp;#039;);&lt;br /&gt;
        for (var i=0; i&amp;lt;translations.length; i++) {&lt;br /&gt;
            var translation = translations[i];&lt;br /&gt;
            var elements = ime_getElementsByClassName(&amp;#039;ime_t_&amp;#039; + translation.attributes.getNamedItem(&amp;#039;name&amp;#039;).nodeValue);&lt;br /&gt;
            if (elements.length &amp;gt; 0) {&lt;br /&gt;
                var text = translation.firstChild.nodeValue;&lt;br /&gt;
                for (var j=0; j&amp;lt;elements.length; j++) {&lt;br /&gt;
                    elements[j].innerHTML = text;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Finds all elements in the current document with the specified class.&lt;br /&gt;
*/&lt;br /&gt;
function ime_getElementsByClassName(className) {&lt;br /&gt;
    // Hopefully the browser supports this natively&lt;br /&gt;
    if (document.getElementsByClassName) {&lt;br /&gt;
        return document.getElementsByClassName(className);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Otherwise use the function defined by MediaWiki&lt;br /&gt;
    return getElementsByClassName(document,&amp;#039;*&amp;#039;,className)&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Display an error message, either by putting it on the page or - if the&lt;br /&gt;
    place to put it does not exist - by showing an alert box.&lt;br /&gt;
*/&lt;br /&gt;
function ime_error(message) {&lt;br /&gt;
    var divFile = document.getElementById(&amp;#039;file&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
    if (divFile) {&lt;br /&gt;
        var pImeError = document.createElement(&amp;#039;p&amp;#039;);&lt;br /&gt;
        pImeError.style.color = &amp;#039;darkred&amp;#039;;&lt;br /&gt;
        pImeError.style.background = &amp;#039;white&amp;#039;;&lt;br /&gt;
        pImeError.style.border = &amp;#039;1px solid darkred&amp;#039;;&lt;br /&gt;
        pImeError.style.padding = &amp;#039;1ex&amp;#039;;&lt;br /&gt;
        pImeError.appendChild(document.createTextNode(message));&lt;br /&gt;
 &lt;br /&gt;
        var divIme = document.getElementById(&amp;#039;ime&amp;#039;);&lt;br /&gt;
        if (divIme) {&lt;br /&gt;
            divIme.insertBefore(pImeError,divIme.firstChild);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            divFile.appendChild(pImeError);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        window.alert(message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Dummy function to intercept events&lt;br /&gt;
*/&lt;br /&gt;
function ime_eventDummy(e) {&lt;br /&gt;
    e.cancelBubble = true;&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Function to define an object containing rect(angle) coordinates.&lt;br /&gt;
*/&lt;br /&gt;
function ime_RectCoord(x1,y1,x2,y2) {&lt;br /&gt;
    this.left = x1;&lt;br /&gt;
    this.top = y1;&lt;br /&gt;
    this.right = x2;&lt;br /&gt;
    this.bottom = y2;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Function to define an object containing circle coordinates.&lt;br /&gt;
*/&lt;br /&gt;
function ime_CircleCoord(x,y,r) {&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
    this.radius = r;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Function to define an object containing poly(gon) coordinates.&lt;br /&gt;
*/&lt;br /&gt;
function ime_PolyCoord(x,y,r) {&lt;br /&gt;
    this.points = Array();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Function to define an object storing info on a clickable area for the&lt;br /&gt;
    imagemap.&lt;br /&gt;
*/&lt;br /&gt;
function ime_Area(shape) {&lt;br /&gt;
    if (shape==&amp;#039;rect&amp;#039;) {&lt;br /&gt;
        this.shape = &amp;#039;rect&amp;#039;;&lt;br /&gt;
        this.coords = new ime_RectCoord(0,0,0,0);&lt;br /&gt;
    }&lt;br /&gt;
    else if (shape==&amp;#039;circle&amp;#039;) {&lt;br /&gt;
        this.shape = &amp;#039;circle&amp;#039;;&lt;br /&gt;
        this.coords = new ime_CircleCoord(0,0,20);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        this.shape = &amp;#039;poly&amp;#039;;&lt;br /&gt;
        this.coords = new ime_PolyCoord();&lt;br /&gt;
    }&lt;br /&gt;
    this.link = &amp;#039;&amp;#039;;&lt;br /&gt;
    this.title = &amp;#039;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Browser invariant function to get the event &amp;quot;behind&amp;quot; the object passed&lt;br /&gt;
    to event handlers.&lt;br /&gt;
*/&lt;br /&gt;
function ime_getEvent(e) {&lt;br /&gt;
    if (e) {&lt;br /&gt;
        return e;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        return window.event;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventGetX(e) {&lt;br /&gt;
    if (typeof(e.layerX)!=&amp;#039;undefined&amp;#039;) {&lt;br /&gt;
        return Math.round(e.layerX / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(e.offsetX)!=&amp;#039;undefined&amp;#039;) {&lt;br /&gt;
        return Math.round(e.offsetX / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        return Math.round(e.x / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventGetY(e) {&lt;br /&gt;
    if (typeof(e.layerY)!=&amp;#039;undefined&amp;#039;) {&lt;br /&gt;
        return Math.round(e.layerY / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(e.offsetY)!=&amp;#039;undefined&amp;#039;) {&lt;br /&gt;
        return Math.round(e.offsetY / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        return Math.round(e.y / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventGetButton(e) {&lt;br /&gt;
    if (typeof(e.which)!=&amp;#039;undefined&amp;#039;) {&lt;br /&gt;
        return e.which;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        return e.button;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_mouseEventClear() {&lt;br /&gt;
    var img = document.getElementById(&amp;#039;imeImg&amp;#039;);&lt;br /&gt;
    img.onmousedown = null;&lt;br /&gt;
    img.style.cursor = &amp;#039;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_mouseEventSet(func) {&lt;br /&gt;
    var img = document.getElementById(&amp;#039;imeImg&amp;#039;);&lt;br /&gt;
    img.onmousedown = func;&lt;br /&gt;
    img.style.cursor = &amp;#039;crosshair&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventRect(e) {&lt;br /&gt;
    e = ime_getEvent(e);&lt;br /&gt;
    var button = ime_eventGetButton(e);&lt;br /&gt;
    if (button==1) {&lt;br /&gt;
        document.ime.areaRectLeft.value = ime_eventGetX(e);&lt;br /&gt;
        document.ime.areaRectTop.value = ime_eventGetY(e);&lt;br /&gt;
    }&lt;br /&gt;
    else if (button==2 || button==3) {&lt;br /&gt;
        document.ime.areaRectRight.value = ime_eventGetX(e);&lt;br /&gt;
        document.ime.areaRectBottom.value = ime_eventGetY(e);&lt;br /&gt;
    }&lt;br /&gt;
    ime_saveArea();&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventCircle(e) {&lt;br /&gt;
    e = ime_getEvent(e);&lt;br /&gt;
    var button = ime_eventGetButton(e);&lt;br /&gt;
    if (button==1) {&lt;br /&gt;
        document.ime.areaCircleX.value = ime_eventGetX(e);&lt;br /&gt;
        document.ime.areaCircleY.value = ime_eventGetY(e);&lt;br /&gt;
    }&lt;br /&gt;
    else if (button==2 || button==3) {&lt;br /&gt;
        var a = (ime_eventGetX(e) - parseInt(document.ime.areaCircleX.value));&lt;br /&gt;
        var b = (ime_eventGetY(e) - parseInt(document.ime.areaCircleY.value));&lt;br /&gt;
        document.ime.areaCircleRadius.value = Math.round(Math.sqrt(a*a + b*b));&lt;br /&gt;
    }&lt;br /&gt;
    ime_saveArea();&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_eventPoly(e) {&lt;br /&gt;
    e = ime_getEvent(e);&lt;br /&gt;
    var button = ime_eventGetButton(e);&lt;br /&gt;
    if (button==1) {&lt;br /&gt;
        area = ime_areas[ime_currentlyEditing];&lt;br /&gt;
        area.coords.points.push(ime_eventGetX(e));&lt;br /&gt;
        area.coords.points.push(ime_eventGetY(e));&lt;br /&gt;
        ime_saveArea();&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_newArea(shape) {&lt;br /&gt;
    var area = new ime_Area(shape);&lt;br /&gt;
    area.shape = shape;&lt;br /&gt;
    ime_areas.push(area);&lt;br /&gt;
 &lt;br /&gt;
    ime_currentlyEditing = ime_areas.length-1;&lt;br /&gt;
    ime_updateAreas();&lt;br /&gt;
    ime_editArea(ime_currentlyEditing);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_updateAreas() {&lt;br /&gt;
    ime_updateSelectArea();&lt;br /&gt;
    ime_updateMap();&lt;br /&gt;
    ime_updateResult();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_updateResult() {&lt;br /&gt;
    var arr = document.ime.imageDescriptionPos;&lt;br /&gt;
    var imageDescriptionPos = arr[0].value;&lt;br /&gt;
    for (var i=1; i&amp;lt;arr.length; i++) {&lt;br /&gt;
        if (arr[i].checked) {&lt;br /&gt;
            imageDescriptionPos = arr[i].value;&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result = Array();&lt;br /&gt;
    result.push(&amp;#039;&amp;lt;imagemap&amp;gt;&amp;#039;);&lt;br /&gt;
    result.push(wgPageName + &amp;#039;|&amp;#039; + document.ime.imageDescription.value);&lt;br /&gt;
    result.push(&amp;#039;&amp;#039;);&lt;br /&gt;
    for (var i=0; i&amp;lt;ime_areas.length; i++) {&lt;br /&gt;
        var coords = ime_areas[i].coords;&lt;br /&gt;
        var s = &amp;#039;&amp;#039;;&lt;br /&gt;
        if (ime_areas[i].shape==&amp;#039;rect&amp;#039;) {&lt;br /&gt;
            s = coords.left + &amp;#039; &amp;#039; + coords.top + &amp;#039; &amp;#039; + coords.right + &amp;#039; &amp;#039; + coords.bottom;&lt;br /&gt;
        }&lt;br /&gt;
        else if (ime_areas[i].shape==&amp;#039;circle&amp;#039;) {&lt;br /&gt;
            s = coords.x + &amp;#039; &amp;#039; + coords.y + &amp;#039; &amp;#039; + coords.radius;&lt;br /&gt;
        }&lt;br /&gt;
        else if (ime_areas[i].shape==&amp;#039;poly&amp;#039;) {&lt;br /&gt;
            s = coords.points.join(&amp;#039; &amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
        result.push(ime_areas[i].shape + &amp;#039; &amp;#039; + s + &amp;#039; [[&amp;#039; + ime_areas[i].link + (ime_areas[i].title ? &amp;#039;|&amp;#039; + ime_areas[i].title : &amp;#039;&amp;#039;) + &amp;#039;]]&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
    result.push(&amp;#039;&amp;#039;);&lt;br /&gt;
    result.push(&amp;#039;desc &amp;#039; + imageDescriptionPos);&lt;br /&gt;
    result.push(&amp;#039;&amp;lt;/imagemap&amp;gt;&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
    var preResult = document.getElementById(&amp;#039;imeResult&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
    while (preResult.lastChild) {&lt;br /&gt;
        preResult.removeChild(preResult.lastChild);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i&amp;lt;result.length; i++) {&lt;br /&gt;
        preResult.appendChild(document.createTextNode(result[i]));&lt;br /&gt;
        preResult.appendChild(document.createElement(&amp;#039;br&amp;#039;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_updateMap() {&lt;br /&gt;
    var preview = document.getElementById(&amp;#039;imePreview&amp;#039;);&lt;br /&gt;
    var img = document.getElementById(&amp;#039;imeImg&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
    // Remove areas from map which are out of range&lt;br /&gt;
    for (var i=0; i&amp;lt;preview.childNodes.length; i++) {&lt;br /&gt;
        var child = preview.childNodes[i];&lt;br /&gt;
        var id = parseInt(child.id.substring(10));&lt;br /&gt;
        if (id&amp;gt;=ime_areas.length) {&lt;br /&gt;
            preview.removeChild(child);&lt;br /&gt;
            i--;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i&amp;lt;ime_areas.length; i++) {&lt;br /&gt;
        // Get existing DIV&lt;br /&gt;
        var area = ime_areas[i];&lt;br /&gt;
        var div = document.getElementById(&amp;#039;imePreview&amp;#039; + i);&lt;br /&gt;
 &lt;br /&gt;
        // If it does not exist exists, create a new one and set style&lt;br /&gt;
        if (!div) {&lt;br /&gt;
            var div = ime_htmlNewDiv(&amp;#039;imePreview&amp;#039; + i)&lt;br /&gt;
            preview.appendChild(div);&lt;br /&gt;
            div.style.zIndex = 0;&lt;br /&gt;
            div.style.position = &amp;#039;absolute&amp;#039;;&lt;br /&gt;
            div.style.opacity = 0.5;&lt;br /&gt;
            div.style.filter = &amp;#039;alpha(opacity=50)&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        var coords = area.coords;&lt;br /&gt;
        if (area.shape == &amp;#039;rect&amp;#039;) {&lt;br /&gt;
            div.className = &amp;#039;previewRect&amp;#039;;&lt;br /&gt;
            // Only if valid coordinates were given, draw&lt;br /&gt;
            if (coords.left&amp;lt;coords.right &amp;amp;&amp;amp; coords.top&amp;lt;coords.bottom) {&lt;br /&gt;
                div.style.left = Math.round(ime_scale * coords.left) + &amp;#039;px&amp;#039;;&lt;br /&gt;
                div.style.top = Math.round(ime_scale * coords.top) + &amp;#039;px&amp;#039;;&lt;br /&gt;
                div.style.width = (Math.round(ime_scale * coords.right) - Math.round(ime_scale * coords.left)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
                div.style.height = (Math.round(ime_scale * coords.bottom) - Math.round(ime_scale * coords.top)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.left = &amp;#039;0&amp;#039;;&lt;br /&gt;
                div.style.top = &amp;#039;0&amp;#039;;&lt;br /&gt;
                div.style.width = &amp;#039;0&amp;#039;;&lt;br /&gt;
                div.style.height = &amp;#039;0&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;circle&amp;#039;) {&lt;br /&gt;
            div.className = &amp;#039;previewCircle&amp;#039;;&lt;br /&gt;
            div.style.backgroundRepeat = &amp;#039;no-repeat&amp;#039;;&lt;br /&gt;
            var left = Math.round(ime_scale * coords.x) - Math.round(ime_scale * coords.radius);&lt;br /&gt;
            var top = Math.round(ime_scale * coords.y) - Math.round(ime_scale * coords.radius);&lt;br /&gt;
            var size = Math.round(ime_scale * coords.radius * 2) + 1;&lt;br /&gt;
 &lt;br /&gt;
            div.style.left = left + &amp;#039;px&amp;#039;;&lt;br /&gt;
            div.style.top = top + &amp;#039;px&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
            if (left + size &amp;gt; img.width) {&lt;br /&gt;
                div.style.width = (img.width - left) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.width = size + &amp;#039;px&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            if (top + size &amp;gt; img.height) {&lt;br /&gt;
                div.style.height = (img.height - top) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.height = size + &amp;#039;px&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;poly&amp;#039;) {&lt;br /&gt;
            // Determine maximum coordinates (this is how big the image is)&lt;br /&gt;
            div.className = &amp;#039;previewPoly&amp;#039;;&lt;br /&gt;
            div.style.backgroundRepeat = &amp;#039;no-repeat&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
            var points = coords.points;&lt;br /&gt;
            var minX=0; var maxX=0; var minY=0; var maxY=0;&lt;br /&gt;
            if (points.length&amp;gt;0) {&lt;br /&gt;
                minX = points[0];&lt;br /&gt;
                maxX = points[0];&lt;br /&gt;
                minY = points[1];&lt;br /&gt;
                maxY = points[1];&lt;br /&gt;
                for (var j=2; j&amp;lt;points.length; j+=2) {&lt;br /&gt;
                    var x = points[j];&lt;br /&gt;
                    var y = points[j+1];&lt;br /&gt;
                    if (x&amp;lt;minX) minX = x;&lt;br /&gt;
                    if (x&amp;gt;maxX) maxX = x;&lt;br /&gt;
                    if (y&amp;lt;minY) minY = y;&lt;br /&gt;
                    if (y&amp;gt;maxY) maxY = y;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
            div.style.left = Math.round(ime_scale * minX) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            div.style.top = Math.round(ime_scale * minY) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            div.style.width = (Math.round(ime_scale * maxX) - Math.round(ime_scale * minX)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
            div.style.height = (Math.round(ime_scale * maxY) - Math.round(ime_scale * minY)) + &amp;#039;px&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    ime_highlightMap();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_highlightMapCircle(div,radius,highlight) {&lt;br /&gt;
    var background = &amp;quot;url(&amp;#039;&amp;quot; + IME_CIRCLESCRIPT + &amp;#039;?&amp;#039; + (highlight ? &amp;#039;active=1&amp;amp;&amp;#039; : &amp;#039;&amp;#039;) + &amp;#039;radius=&amp;#039; +  Math.round(ime_scale * radius) + &amp;quot;&amp;#039;) no-repeat&amp;quot;;&lt;br /&gt;
    if (div.style.background != background) {&lt;br /&gt;
        div.style.background = background;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_highlightMapPoly(div,points,highlight) {&lt;br /&gt;
    var minX=0; var minY=0;&lt;br /&gt;
    if (points.length&amp;gt;0) {&lt;br /&gt;
        minX = points[0];&lt;br /&gt;
        minY = points[1];&lt;br /&gt;
        for (var j=2; j&amp;lt;points.length; j+=2) {&lt;br /&gt;
            var x = points[j];&lt;br /&gt;
            var y = points[j+1];&lt;br /&gt;
            if (x&amp;lt;minX) minX = x;&lt;br /&gt;
            if (y&amp;lt;minY) minY = y;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    var convpoints = Array();&lt;br /&gt;
    for(var j=0; j&amp;lt;points.length; j+=2) {&lt;br /&gt;
        convpoints[j] = Math.round(ime_scale * points[j]) - Math.round(ime_scale * minX);&lt;br /&gt;
        convpoints[j+1] = Math.round(ime_scale * points[j+1]) - Math.round(ime_scale * minY);&lt;br /&gt;
    }&lt;br /&gt;
    var background = &amp;quot;url(&amp;#039;&amp;quot; + IME_POLYSCRIPT + &amp;#039;?&amp;#039; + (highlight ? &amp;#039;active=1&amp;amp;&amp;#039; : &amp;#039;&amp;#039;) + &amp;#039;coords=&amp;#039; + convpoints.join(&amp;quot;|&amp;quot;) + &amp;quot;&amp;#039;) no-repeat&amp;quot;;&lt;br /&gt;
    if (div.style.background != background) {&lt;br /&gt;
        div.style.background = background;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_highlightMap() {&lt;br /&gt;
    for (var i=0; i&amp;lt;ime_areas.length; i++) {&lt;br /&gt;
        var div = document.getElementById(&amp;#039;imePreview&amp;#039; + i);&lt;br /&gt;
        var area = ime_areas[i];&lt;br /&gt;
        if (div &amp;amp;&amp;amp; area) {&lt;br /&gt;
            if (area.shape == &amp;#039;rect&amp;#039;) {&lt;br /&gt;
                var backgroundColor = (i==ime_currentlyEditing) ? &amp;#039;red&amp;#039; : &amp;#039;black&amp;#039;;&lt;br /&gt;
                if (div.style.backgroundColor != backgroundColor) div.style.backgroundColor = backgroundColor;&lt;br /&gt;
            }&lt;br /&gt;
            else if (area.shape == &amp;#039;circle&amp;#039;) {&lt;br /&gt;
                ime_highlightMapCircle(div,area.coords.radius,(i==ime_currentlyEditing));&lt;br /&gt;
            }&lt;br /&gt;
            else if (area.shape == &amp;#039;poly&amp;#039;) {&lt;br /&gt;
                ime_highlightMapPoly(div,area.coords.points,(i==ime_currentlyEditing));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_updateSelectArea() {&lt;br /&gt;
    var selectArea = document.ime.area;&lt;br /&gt;
 &lt;br /&gt;
    while (selectArea.childNodes.length&amp;gt;0) {&lt;br /&gt;
        selectArea.removeChild(selectArea.lastChild);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i&amp;lt;ime_areas.length; i++) {&lt;br /&gt;
        var option = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
        var area = ime_areas[i];&lt;br /&gt;
            option.value = i;&lt;br /&gt;
        while (option.childNodes.length&amp;gt;0) {&lt;br /&gt;
            option.removeChild(option.lastChild);&lt;br /&gt;
        }&lt;br /&gt;
        var text = (area.title ? area.title : area.link) + &amp;#039; [&amp;#039; + area.shape + &amp;#039;]&amp;#039;;&lt;br /&gt;
        option.appendChild(document.createTextNode(text));&lt;br /&gt;
        if (i == ime_currentlyEditing) {&lt;br /&gt;
            option.selected = &amp;#039;selected&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
        selectArea.appendChild(option);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_editArea(index) {&lt;br /&gt;
    document.getElementById(&amp;#039;imeProps&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
    var area = ime_areas[index];&lt;br /&gt;
 &lt;br /&gt;
    if (area) {&lt;br /&gt;
        ime_currentlyEditing = index;&lt;br /&gt;
 &lt;br /&gt;
        document.getElementById(&amp;#039;imeProps&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
        document.getElementById(&amp;#039;imePropsRect&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
        document.getElementById(&amp;#039;imePropsCircle&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
        document.getElementById(&amp;#039;imePropsPoly&amp;#039;).style.display= &amp;#039;none&amp;#039;;&lt;br /&gt;
        ime_mouseEventClear();&lt;br /&gt;
 &lt;br /&gt;
        if (area.shape == &amp;#039;rect&amp;#039;) {&lt;br /&gt;
            document.getElementById(&amp;#039;imePropsRect&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
            ime_mouseEventSet(ime_eventRect);&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;circle&amp;#039;) {&lt;br /&gt;
            document.getElementById(&amp;#039;imePropsCircle&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
            ime_mouseEventSet(ime_eventCircle);&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;poly&amp;#039;) {&lt;br /&gt;
            document.getElementById(&amp;#039;imePropsPoly&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
            ime_mouseEventSet(ime_eventPoly);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        document.ime.areaLink.value = area.link;&lt;br /&gt;
        document.ime.areaTitle.value = area.title;&lt;br /&gt;
 &lt;br /&gt;
        var coords = area.coords;&lt;br /&gt;
        if (area.shape == &amp;#039;rect&amp;#039;) {&lt;br /&gt;
            document.ime.areaRectLeft.value = coords.left;&lt;br /&gt;
            document.ime.areaRectTop.value = coords.top;&lt;br /&gt;
            document.ime.areaRectRight.value = coords.right;&lt;br /&gt;
            document.ime.areaRectBottom.value = coords.bottom;&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;circle&amp;#039;) {&lt;br /&gt;
            document.ime.areaCircleX.value = coords.x;&lt;br /&gt;
            document.ime.areaCircleY.value = coords.y;&lt;br /&gt;
            document.ime.areaCircleRadius.value = coords.radius;&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == &amp;#039;poly&amp;#039;) {&lt;br /&gt;
            var propsPolyCoords = document.getElementById(&amp;#039;imePropsPolyCoords&amp;#039;);&lt;br /&gt;
            if (propsPolyCoords.childNodes.length &amp;gt; 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);&lt;br /&gt;
            propsPolyCoords.appendChild(document.createTextNode(area.coords.points.join(&amp;quot;, &amp;quot;)));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        ime_highlightMap();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_deletePolyCoords() {&lt;br /&gt;
    ime_areas[ime_currentlyEditing].coords.points = Array();&lt;br /&gt;
    ime_saveArea();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_saveArea() {&lt;br /&gt;
    var area = ime_areas[ime_currentlyEditing];&lt;br /&gt;
    area.link = document.ime.areaLink.value;&lt;br /&gt;
    area.title = document.ime.areaTitle.value;&lt;br /&gt;
 &lt;br /&gt;
    var coords = area.coords;&lt;br /&gt;
    if (area.shape==&amp;#039;rect&amp;#039;) {&lt;br /&gt;
        coords.left = parseInt(document.ime.areaRectLeft.value);&lt;br /&gt;
        coords.top = parseInt(document.ime.areaRectTop.value);&lt;br /&gt;
        coords.right = parseInt(document.ime.areaRectRight.value);&lt;br /&gt;
        coords.bottom = parseInt(document.ime.areaRectBottom.value);&lt;br /&gt;
    }&lt;br /&gt;
    else if (area.shape==&amp;#039;circle&amp;#039;) {&lt;br /&gt;
        if (parseInt(document.ime.areaCircleRadius.value) &amp;lt; 0) document.ime.areaCircleRadius.value = 0;&lt;br /&gt;
        coords.x = parseInt(document.ime.areaCircleX.value);&lt;br /&gt;
        coords.y = parseInt(document.ime.areaCircleY.value);&lt;br /&gt;
        coords.radius = parseInt(document.ime.areaCircleRadius.value);&lt;br /&gt;
    }&lt;br /&gt;
    else if (area.shape == &amp;#039;poly&amp;#039;) {&lt;br /&gt;
        var propsPolyCoords = document.getElementById(&amp;#039;imePropsPolyCoords&amp;#039;);&lt;br /&gt;
        if (propsPolyCoords.childNodes.length &amp;gt; 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);&lt;br /&gt;
        propsPolyCoords.appendChild(document.createTextNode(coords.points.join(&amp;quot;, &amp;quot;)));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    ime_updateAreas();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_deleteArea() {&lt;br /&gt;
    ime_mouseEventClear();&lt;br /&gt;
 &lt;br /&gt;
    // Remove element from ime_areas array&lt;br /&gt;
    ime_areas.splice(ime_currentlyEditing,1);&lt;br /&gt;
 &lt;br /&gt;
    // Remove preview div of the deleted area&lt;br /&gt;
    var div = document.getElementById(&amp;#039;imePreview&amp;#039; + ime_currentlyEditing);&lt;br /&gt;
    if (div) {&lt;br /&gt;
        div.parentNode.removeChild(div);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Move ids of preview divs to fill the hole&lt;br /&gt;
    for (var i=ime_currentlyEditing+1; i&amp;lt;ime_areas.length; i++) {&lt;br /&gt;
        div = document.getElementById(&amp;#039;imePreview&amp;#039; + i);&lt;br /&gt;
        if (div) {&lt;br /&gt;
            div.id = &amp;#039;imePreview&amp;#039; + (i-1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // If we deleted the last area, correct currently editing&lt;br /&gt;
    if (ime_currentlyEditing&amp;gt;=ime_areas.length) {&lt;br /&gt;
        ime_currentlyEditing = ime_areas.length-1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    ime_updateAreas();&lt;br /&gt;
    ime_editArea(ime_currentlyEditing);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_importLines() {&lt;br /&gt;
    var text = document.ime.importText.value;&lt;br /&gt;
    var lines = text.split(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    for (var i=0; i&amp;lt;lines.length; i++) {&lt;br /&gt;
        var rectMatch = /rect +(\d+) +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;&lt;br /&gt;
        var circleMatch = /circle +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;&lt;br /&gt;
        var polyMatch = /poly +(.*?) +\[\[([^|]*)(|(.*))?\]\]/i;&lt;br /&gt;
 &lt;br /&gt;
        var line = lines[i];&lt;br /&gt;
 &lt;br /&gt;
        if (rectMatch.test(line)) {&lt;br /&gt;
            var results = rectMatch.exec(line);&lt;br /&gt;
            var area = new ime_Area(&amp;quot;rect&amp;quot;);&lt;br /&gt;
            area.coords.left = parseInt(results[1]);&lt;br /&gt;
            area.coords.top = parseInt(results[2]);&lt;br /&gt;
            area.coords.right = parseInt(results[3]);&lt;br /&gt;
            area.coords.bottom = parseInt(results[4]);&lt;br /&gt;
            area.link = results[5];&lt;br /&gt;
            if (results[6]) area.title = results[6].substring(1);&lt;br /&gt;
            ime_areas.push(area);&lt;br /&gt;
        }&lt;br /&gt;
        else if (circleMatch.test(line)) {&lt;br /&gt;
            var results = circleMatch.exec(line);&lt;br /&gt;
            var area = new ime_Area(&amp;quot;circle&amp;quot;);&lt;br /&gt;
            area.coords.x = parseInt(results[1]);&lt;br /&gt;
            area.coords.y = parseInt(results[2]);&lt;br /&gt;
            area.coords.radius = parseInt(results[3]);&lt;br /&gt;
            area.link = results[4];&lt;br /&gt;
            if (results[5]) area.title = results[5].substring(1);&lt;br /&gt;
            ime_areas.push(area);&lt;br /&gt;
        }&lt;br /&gt;
        else if (polyMatch.test(line)) {&lt;br /&gt;
            var results = polyMatch.exec(line);&lt;br /&gt;
            var area = new ime_Area(&amp;quot;poly&amp;quot;);&lt;br /&gt;
            area.coords.points = results[1].replace(/ +/,&amp;quot; &amp;quot;).split(&amp;quot; &amp;quot;);&lt;br /&gt;
            for (var j=0; j&amp;lt;area.coords.points.length; j++) {&lt;br /&gt;
                area.coords.points[j] = parseInt(area.coords.points[j]);&lt;br /&gt;
            }&lt;br /&gt;
            area.link = results[2];&lt;br /&gt;
            if (results[3]) area.title = results[3].substring(1);&lt;br /&gt;
            ime_areas.push(area);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    ime_updateAreas();&lt;br /&gt;
    ime_hideImport();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_showImport() {&lt;br /&gt;
    document.getElementById(&amp;#039;imeImport&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
    document.getElementById(&amp;#039;imeImportShow&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
    document.getElementById(&amp;#039;imeImportHide&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_hideImport() {&lt;br /&gt;
    document.getElementById(&amp;#039;imeImport&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
    document.getElementById(&amp;#039;imeImportShow&amp;#039;).style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
    document.getElementById(&amp;#039;imeImportHide&amp;#039;).style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Remove all UI elements that might interfere with ImageMapEdit.&lt;br /&gt;
*/&lt;br /&gt;
function ime_removeOtherUIElements() {&lt;br /&gt;
    // Remove all UI elements of the &amp;#039;annotations&amp;#039; feature used on Wikimedia&lt;br /&gt;
    // Commons.&lt;br /&gt;
    var addButton = document.getElementById(&amp;#039;ImageAnnotationAddButton&amp;#039;);&lt;br /&gt;
    if (addButton) {&lt;br /&gt;
        var whatToDelete = addButton.parentNode.parentNode;&lt;br /&gt;
        var whereToDelete = whatToDelete.parentNode;&lt;br /&gt;
        whereToDelete.removeChild(whatToDelete);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
    Try to find an &amp;lt;a&amp;gt; tag within the specified HTML document node.&lt;br /&gt;
*/&lt;br /&gt;
function ime_findATag(node) {&lt;br /&gt;
    // We just look at the first child until there is none or it is an &amp;lt;a&amp;gt; tag&lt;br /&gt;
    var a = node;&lt;br /&gt;
    while (a != null &amp;amp;&amp;amp; a.nodeName.toUpperCase() != &amp;#039;A&amp;#039;) {&lt;br /&gt;
        a = a.firstChild;&lt;br /&gt;
   }&lt;br /&gt;
    return a;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ShadowSeraph</name></author>
	</entry>
</feed>