
<?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-04-18T04:17:03Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.35.2</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 class=&quot;diff diff-contentalign-left diff-editfont-monospace&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='diff-marker'&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='diff-marker'&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='diff-marker'&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='diff-marker'&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='diff-marker'&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 + '/index.php?title=User:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Dapete&lt;/del&gt;/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 + '/index.php?title=User:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ShadowSeraph&lt;/ins&gt;/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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='diff-marker'&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='diff-marker'&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='diff-marker'&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='diff-marker'&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 + '/index.php?title=User:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Dapete&lt;/del&gt;/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 + '/index.php?title=User:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ShadowSeraph&lt;/ins&gt;/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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='diff-marker'&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='diff-marker'&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='diff-marker'&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 dir=&quot;auto&quot;&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;/span&gt;&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 + '/index.php?title=User:Dapete/ImageMapEdit.js/template.html.js&amp;amp;action=raw&amp;amp;1';&lt;br /&gt;
 &lt;br /&gt;
// Location of the XML file containing translations&lt;br /&gt;
var IME_TRANSLATEFILE = wgScriptPath + '/index.php?title=User:Dapete/ImageMapEdit.js/translations.xml.js&amp;amp;action=raw&amp;amp;1';&lt;br /&gt;
 &lt;br /&gt;
// Scripts to create the circle and polygon images&lt;br /&gt;
var IME_CIRCLESCRIPT = 'http://toolserver.org/~dapete/ImageMapEdit/circle.php';&lt;br /&gt;
var IME_POLYSCRIPT = 'http://toolserver.org/~dapete/ImageMapEdit/poly.php';&lt;br /&gt;
 &lt;br /&gt;
// Error messages that cannot be localized in XML&lt;br /&gt;
var IME_ERROR_IMAGENOTFOUND = 'ImageMapEdit: Could not find image in page structure.';&lt;br /&gt;
var IME_ERROR_XMLHTTPREQUEST = 'ImageMapEdit: Browser does not support XMLHttpRequest.';&lt;br /&gt;
var IME_ERROR_LOADURL = 'ImageMapEdit: Could not load URL:';&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=='view') {&lt;br /&gt;
        // If we can a div with id file, we initialize&lt;br /&gt;
        if (document.getElementById('file')) {&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('Microsoft.XMLHTTP');&lt;br /&gt;
        }&lt;br /&gt;
        catch (e) {&lt;br /&gt;
            try {&lt;br /&gt;
                return new ActiveXObject('Msxml2.XMLHTTP');&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'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,'text/xml');&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
            var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');&lt;br /&gt;
            xmlDoc.async = 'false';&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('div');&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'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('file');&lt;br /&gt;
    if (!divFile) {&lt;br /&gt;
        ime_error(IME_ERROR_IMAGENOTFOUND + ' (ime_init1,divFile=null)');&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 + ' (ime_init1,a=null)');&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 + ' (ime_init1,img=null)');&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'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 + '/api.php?format=xml&amp;amp;action=query&amp;amp;prop=imageinfo&amp;amp;iiprop=size&amp;amp;titles=' + wgPageName;&lt;br /&gt;
    request.open('GET', 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('ii')[0].attributes;&lt;br /&gt;
                ime_width = iiAttr.getNamedItem('width').nodeValue;&lt;br /&gt;
                ime_height = iiAttr.getNamedItem('height').nodeValue;&lt;br /&gt;
 &lt;br /&gt;
                ime_scale = img.width/ime_width;&lt;br /&gt;
 &lt;br /&gt;
                // Show 'show ImageMapEdit' button now&lt;br /&gt;
                var a = document.createElement('a');&lt;br /&gt;
                a.id = 'imeLink';&lt;br /&gt;
                a.href = 'javascript:ime_init2()';&lt;br /&gt;
                a.style.display = 'block';&lt;br /&gt;
                a.appendChild(document.createTextNode('ImageMapEdit &amp;gt;'));&lt;br /&gt;
                document.getElementById('file').appendChild(a);&lt;br /&gt;
 &lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                ime_error (IME_ERROR_LOADURL + ' ' + url + ' (ime_init1,request.status=' + request.status + ').');&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('file');&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('imeContainer');&lt;br /&gt;
    divImeContainer.style.position = 'relative';&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 = 'imeImg';&lt;br /&gt;
    img.style.zIndex = 99;&lt;br /&gt;
    img.style.border = 'none';&lt;br /&gt;
    img.style.opacity = '0.75';&lt;br /&gt;
    img.style.filter = 'alpha(opacity=75)'; // IE&lt;br /&gt;
 &lt;br /&gt;
    // Internet Explorer needs this differently&lt;br /&gt;
    if (typeof(navigator.userAgent) != 'undefined' &amp;amp;&amp;amp; navigator.userAgent.match('/MSIE/')) {&lt;br /&gt;
        divImeContainer.style.overflow = 'none';&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        divImeContainer.style.overflow = 'auto';&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var divImePreview = ime_htmlNewDiv('imePreview');&lt;br /&gt;
    divImePreview.style.position = 'absolute';&lt;br /&gt;
    divImePreview.style.top = '0';&lt;br /&gt;
    divImePreview.style.left = '0';&lt;br /&gt;
    divImePreview.style.width = img.width + 'px';&lt;br /&gt;
    divImePreview.style.height = img.height + 'px';&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('ime');&lt;br /&gt;
    divFile.appendChild(divIme);&lt;br /&gt;
 &lt;br /&gt;
    // Hide the link now&lt;br /&gt;
    document.getElementById('imeLink').style.display = 'none';&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 + ' ' + url + ' (ime_init2,request=null)');&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    request.open('GET', 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 + ' ' + url + ' (ime_init2,request2=null)');&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                request2.open('GET', 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('language');&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 + ' ' + IME_TRANSLATEFILE + ' (ime_init2,request2.status=' + request2.status + ').');&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 + ' ' + IME_HTMLFILE + ' (ime_init2,request.status=' + request.status + ').');&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('name').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('inherit')) {&lt;br /&gt;
            // If we do, we call ourselves recursively to translate to that language first&lt;br /&gt;
            ime_translate(language.attributes.getNamedItem('inherit').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('translation');&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('ime_t_' + translation.attributes.getNamedItem('name').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,'*',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('file');&lt;br /&gt;
 &lt;br /&gt;
    if (divFile) {&lt;br /&gt;
        var pImeError = document.createElement('p');&lt;br /&gt;
        pImeError.style.color = 'darkred';&lt;br /&gt;
        pImeError.style.background = 'white';&lt;br /&gt;
        pImeError.style.border = '1px solid darkred';&lt;br /&gt;
        pImeError.style.padding = '1ex';&lt;br /&gt;
        pImeError.appendChild(document.createTextNode(message));&lt;br /&gt;
 &lt;br /&gt;
        var divIme = document.getElementById('ime');&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=='rect') {&lt;br /&gt;
        this.shape = 'rect';&lt;br /&gt;
        this.coords = new ime_RectCoord(0,0,0,0);&lt;br /&gt;
    }&lt;br /&gt;
    else if (shape=='circle') {&lt;br /&gt;
        this.shape = 'circle';&lt;br /&gt;
        this.coords = new ime_CircleCoord(0,0,20);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        this.shape = 'poly';&lt;br /&gt;
        this.coords = new ime_PolyCoord();&lt;br /&gt;
    }&lt;br /&gt;
    this.link = '';&lt;br /&gt;
    this.title = '';&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)!='undefined') {&lt;br /&gt;
        return Math.round(e.layerX / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(e.offsetX)!='undefined') {&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)!='undefined') {&lt;br /&gt;
        return Math.round(e.layerY / ime_scale);&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(e.offsetY)!='undefined') {&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)!='undefined') {&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('imeImg');&lt;br /&gt;
    img.onmousedown = null;&lt;br /&gt;
    img.style.cursor = '';&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_mouseEventSet(func) {&lt;br /&gt;
    var img = document.getElementById('imeImg');&lt;br /&gt;
    img.onmousedown = func;&lt;br /&gt;
    img.style.cursor = 'crosshair';&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;lt;imagemap&amp;gt;');&lt;br /&gt;
    result.push(wgPageName + '|' + document.ime.imageDescription.value);&lt;br /&gt;
    result.push('');&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 = '';&lt;br /&gt;
        if (ime_areas[i].shape=='rect') {&lt;br /&gt;
            s = coords.left + ' ' + coords.top + ' ' + coords.right + ' ' + coords.bottom;&lt;br /&gt;
        }&lt;br /&gt;
        else if (ime_areas[i].shape=='circle') {&lt;br /&gt;
            s = coords.x + ' ' + coords.y + ' ' + coords.radius;&lt;br /&gt;
        }&lt;br /&gt;
        else if (ime_areas[i].shape=='poly') {&lt;br /&gt;
            s = coords.points.join(' ');&lt;br /&gt;
        }&lt;br /&gt;
        result.push(ime_areas[i].shape + ' ' + s + ' [[' + ime_areas[i].link + (ime_areas[i].title ? '|' + ime_areas[i].title : '') + ']]');&lt;br /&gt;
    }&lt;br /&gt;
    result.push('');&lt;br /&gt;
    result.push('desc ' + imageDescriptionPos);&lt;br /&gt;
    result.push('&amp;lt;/imagemap&amp;gt;');&lt;br /&gt;
 &lt;br /&gt;
    var preResult = document.getElementById('imeResult');&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('br'));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_updateMap() {&lt;br /&gt;
    var preview = document.getElementById('imePreview');&lt;br /&gt;
    var img = document.getElementById('imeImg');&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('imePreview' + 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('imePreview' + i)&lt;br /&gt;
            preview.appendChild(div);&lt;br /&gt;
            div.style.zIndex = 0;&lt;br /&gt;
            div.style.position = 'absolute';&lt;br /&gt;
            div.style.opacity = 0.5;&lt;br /&gt;
            div.style.filter = 'alpha(opacity=50)';&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        var coords = area.coords;&lt;br /&gt;
        if (area.shape == 'rect') {&lt;br /&gt;
            div.className = 'previewRect';&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) + 'px';&lt;br /&gt;
                div.style.top = Math.round(ime_scale * coords.top) + 'px';&lt;br /&gt;
                div.style.width = (Math.round(ime_scale * coords.right) - Math.round(ime_scale * coords.left)) + 'px';&lt;br /&gt;
                div.style.height = (Math.round(ime_scale * coords.bottom) - Math.round(ime_scale * coords.top)) + 'px';&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.left = '0';&lt;br /&gt;
                div.style.top = '0';&lt;br /&gt;
                div.style.width = '0';&lt;br /&gt;
                div.style.height = '0';&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == 'circle') {&lt;br /&gt;
            div.className = 'previewCircle';&lt;br /&gt;
            div.style.backgroundRepeat = 'no-repeat';&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 + 'px';&lt;br /&gt;
            div.style.top = top + 'px';&lt;br /&gt;
 &lt;br /&gt;
            if (left + size &amp;gt; img.width) {&lt;br /&gt;
                div.style.width = (img.width - left) + 'px';&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.width = size + 'px';&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) + 'px';&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                div.style.height = size + 'px';&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == 'poly') {&lt;br /&gt;
            // Determine maximum coordinates (this is how big the image is)&lt;br /&gt;
            div.className = 'previewPoly';&lt;br /&gt;
            div.style.backgroundRepeat = 'no-repeat';&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) + 'px';&lt;br /&gt;
            div.style.top = Math.round(ime_scale * minY) + 'px';&lt;br /&gt;
            div.style.width = (Math.round(ime_scale * maxX) - Math.round(ime_scale * minX)) + 'px';&lt;br /&gt;
            div.style.height = (Math.round(ime_scale * maxY) - Math.round(ime_scale * minY)) + 'px';&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;quot; + IME_CIRCLESCRIPT + '?' + (highlight ? 'active=1&amp;amp;' : '') + 'radius=' +  Math.round(ime_scale * radius) + &amp;quot;') 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;quot; + IME_POLYSCRIPT + '?' + (highlight ? 'active=1&amp;amp;' : '') + 'coords=' + convpoints.join(&amp;quot;|&amp;quot;) + &amp;quot;') 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('imePreview' + 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 == 'rect') {&lt;br /&gt;
                var backgroundColor = (i==ime_currentlyEditing) ? 'red' : 'black';&lt;br /&gt;
                if (div.style.backgroundColor != backgroundColor) div.style.backgroundColor = backgroundColor;&lt;br /&gt;
            }&lt;br /&gt;
            else if (area.shape == 'circle') {&lt;br /&gt;
                ime_highlightMapCircle(div,area.coords.radius,(i==ime_currentlyEditing));&lt;br /&gt;
            }&lt;br /&gt;
            else if (area.shape == 'poly') {&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('option');&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) + ' [' + area.shape + ']';&lt;br /&gt;
        option.appendChild(document.createTextNode(text));&lt;br /&gt;
        if (i == ime_currentlyEditing) {&lt;br /&gt;
            option.selected = 'selected';&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('imeProps').style.display = 'none';&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('imeProps').style.display = '';&lt;br /&gt;
        document.getElementById('imePropsRect').style.display = 'none';&lt;br /&gt;
        document.getElementById('imePropsCircle').style.display = 'none';&lt;br /&gt;
        document.getElementById('imePropsPoly').style.display= 'none';&lt;br /&gt;
        ime_mouseEventClear();&lt;br /&gt;
 &lt;br /&gt;
        if (area.shape == 'rect') {&lt;br /&gt;
            document.getElementById('imePropsRect').style.display = '';&lt;br /&gt;
            ime_mouseEventSet(ime_eventRect);&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == 'circle') {&lt;br /&gt;
            document.getElementById('imePropsCircle').style.display = '';&lt;br /&gt;
            ime_mouseEventSet(ime_eventCircle);&lt;br /&gt;
        }&lt;br /&gt;
        else if (area.shape == 'poly') {&lt;br /&gt;
            document.getElementById('imePropsPoly').style.display = '';&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 == 'rect') {&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 == 'circle') {&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 == 'poly') {&lt;br /&gt;
            var propsPolyCoords = document.getElementById('imePropsPolyCoords');&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=='rect') {&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=='circle') {&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 == 'poly') {&lt;br /&gt;
        var propsPolyCoords = document.getElementById('imePropsPolyCoords');&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('imePreview' + 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('imePreview' + i);&lt;br /&gt;
        if (div) {&lt;br /&gt;
            div.id = 'imePreview' + (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('imeImport').style.display = '';&lt;br /&gt;
    document.getElementById('imeImportShow').style.display = 'none';&lt;br /&gt;
    document.getElementById('imeImportHide').style.display = '';&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function ime_hideImport() {&lt;br /&gt;
    document.getElementById('imeImport').style.display = 'none';&lt;br /&gt;
    document.getElementById('imeImportShow').style.display = '';&lt;br /&gt;
    document.getElementById('imeImportHide').style.display = 'none';&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 'annotations' feature used on Wikimedia&lt;br /&gt;
    // Commons.&lt;br /&gt;
    var addButton = document.getElementById('ImageAnnotationAddButton');&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() != 'A') {&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>