]> code.citadel.org Git - citadel.git/blobdiff - webcit/tiny_mce/plugins/advlink/jscripts/functions.js
src/crypto.c: possible fix for memory leak related
[citadel.git] / webcit / tiny_mce / plugins / advlink / jscripts / functions.js
index 4ad362bc2c76c5bee5ace90202d97b220a4bba4a..538ad6a06c59568d3a5683c59457e8dd933891ff 100644 (file)
-/* Functions for the advlink plugin popup */
-
-var templates = {
-       "window.open" : "window.open('${url}','${target}','${options}')"
-};
-
-function preinit() {
-       // Initialize
-       tinyMCE.setWindowArg('mce_windowresize', false);
-
-       // Import external list url javascript
-       var url = tinyMCE.getParam("external_link_list_url");
-       if (url != null) {
-               // Fix relative
-               if (url.charAt(0) != '/')
-                       url = tinyMCE.documentBasePath + "/" + url;
-
-               document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
-       }
-}
-
-function changeClass() {
-       var formObj = document.forms[0];
-       formObj.classes.value = getSelectValue(formObj, 'classlist');
-}
-
-function init() {
-       tinyMCEPopup.resizeToInnerSize();
-
-       var formObj = document.forms[0];
-       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
-       var elm = inst.getFocusElement();
-       var action = "insert";
-
-       // Resize some elements
-       if (isVisible('hrefbrowser'))
-               document.getElementById('href').style.width = '260px';
-
-       if (isVisible('popupurlbrowser'))
-               document.getElementById('popupurl').style.width = '180px';
-
-       elm = tinyMCE.getParentElement(elm, "a");
-       if (elm != null && elm.nodeName == "A")
-               action = "update";
-
-       formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); 
-
-       setPopupControlsDisabled(true);
-
-       if (action == "update") {
-               var href = tinyMCE.getAttrib(elm, 'href');
-
-               // Fix for drag-drop/copy paste bug in Mozilla
-               mceRealHref = tinyMCE.getAttrib(elm, 'mce_real_href');
-               if (mceRealHref != "")
-                       href = mceRealHref;
-
-               href = convertURL(href, elm, true);
-
-               var onclick = tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onclick'));
-               if (onclick == null || onclick == "")
-                       onclick = tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'mce_onclick'));
-
-               // Setup form data
-               setFormValue('href', href);
-               setFormValue('title', tinyMCE.getAttrib(elm, 'title'));
-               setFormValue('id', tinyMCE.getAttrib(elm, 'id'));
-               setFormValue('style', elm.style.cssText.toLowerCase());
-               setFormValue('rel', tinyMCE.getAttrib(elm, 'rel'));
-               setFormValue('rev', tinyMCE.getAttrib(elm, 'rev'));
-               setFormValue('charset', tinyMCE.getAttrib(elm, 'charset'));
-               setFormValue('hreflang', tinyMCE.getAttrib(elm, 'hreflang'));
-               setFormValue('dir', tinyMCE.getAttrib(elm, 'dir'));
-               setFormValue('lang', tinyMCE.getAttrib(elm, 'lang'));
-               setFormValue('tabindex', tinyMCE.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
-               setFormValue('accesskey', tinyMCE.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
-               setFormValue('type', tinyMCE.getAttrib(elm, 'type'));
-               setFormValue('onfocus', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onfocus')));
-               setFormValue('onblur', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onblur')));
-               setFormValue('onclick', onclick);
-               setFormValue('ondblclick', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'ondblclick')));
-               setFormValue('onmousedown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousedown')));
-               setFormValue('onmouseup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseup')));
-               setFormValue('onmouseover', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));
-               setFormValue('onmousemove', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousemove')));
-               setFormValue('onmouseout', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));
-               setFormValue('onkeypress', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeypress')));
-               setFormValue('onkeydown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeydown')));
-               setFormValue('onkeyup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeyup')));
-               setFormValue('target', tinyMCE.getAttrib(elm, 'target'));
-               setFormValue('classes', tinyMCE.getAttrib(elm, 'class'));
-
-               // Parse onclick data
-               if (onclick != null && onclick.indexOf('window.open') != -1)
-                       parseWindowOpen(onclick);
-               else
-                       parseFunction(onclick);
-
-               // Select by the values
-               selectByValue(formObj, 'dir', tinyMCE.getAttrib(elm, 'dir'));
-               selectByValue(formObj, 'rel', tinyMCE.getAttrib(elm, 'rel'));
-               selectByValue(formObj, 'rev', tinyMCE.getAttrib(elm, 'rev'));
-               selectByValue(formObj, 'linklisthref', href);
-
-               if (href.charAt(0) == '#')
-                       selectByValue(formObj, 'anchorlist', href);
-
-               selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'), true);
-               selectByValue(formObj, 'targetlist', tinyMCE.getAttrib(elm, 'target'), true);
-       }
-
-       addClassesToList('classlist', 'advlink_styles');
-
-       window.focus();
-}
-
-function setFormValue(name, value) {
-       document.forms[0].elements[name].value = value;
-}
-
-function convertURL(url, node, on_save) {
-       return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");
-}
-
-function parseWindowOpen(onclick) {
-       var formObj = document.forms[0];
-
-       // Preprocess center code
-       if (onclick.indexOf('return false;') != -1) {
-               formObj.popupreturn.checked = true;
-               onclick = onclick.replace('return false;', '');
-       }
-
-       var onClickData = parseLink(onclick);
-
-       if (onClickData != null) {
-               formObj.ispopup.checked = true;
-               setPopupControlsDisabled(false);
-
-               var onClickWindowOptions = parseOptions(onClickData['options']);
-
-               formObj.popupname.value = onClickData['target'];
-               formObj.popupurl.value = onClickData['url'];
-               formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
-               formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
-
-               formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
-               formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
-
-               if (formObj.popupleft.value.indexOf('screen') != -1)
-                       formObj.popupleft.value = "c";
-
-               if (formObj.popuptop.value.indexOf('screen') != -1)
-                       formObj.popuptop.value = "c";
-
-               formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
-               formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
-               formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
-               formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
-               formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
-               formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
-               formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
-       }
-}
-
-function parseFunction(onclick) {
-       var formObj = document.forms[0];
-       var onClickData = parseLink(onclick);
-
-       // TODO: Add stuff here
-}
-
-function getOption(opts, name) {
-       return typeof(opts[name]) == "undefined" ? "" : opts[name];
-}
-
-function setPopupControlsDisabled(state) {
-       var formObj = document.forms[0];
-
-       formObj.popupname.disabled = state;
-       formObj.popupurl.disabled = state;
-       formObj.popupwidth.disabled = state;
-       formObj.popupheight.disabled = state;
-       formObj.popupleft.disabled = state;
-       formObj.popuptop.disabled = state;
-       formObj.popuplocation.disabled = state;
-       formObj.popupscrollbars.disabled = state;
-       formObj.popupmenubar.disabled = state;
-       formObj.popupresizable.disabled = state;
-       formObj.popuptoolbar.disabled = state;
-       formObj.popupstatus.disabled = state;
-       formObj.popupreturn.disabled = state;
-       formObj.popupdependent.disabled = state;
-
-       setBrowserDisabled('popupurlbrowser', state);
-}
-
-function parseLink(link) {
-       link = link.replace(new RegExp('&#39;', 'g'), "'");
-
-       var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
-
-       // Is function name a template function
-       var template = templates[fnName];
-       if (template) {
-               // Build regexp
-               var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
-               var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
-               var replaceStr = "";
-               for (var i=0; i<variableNames.length; i++) {
-                       // Is string value
-                       if (variableNames[i].indexOf("'${") != -1)
-                               regExp += "'(.*)'";
-                       else // Number value
-                               regExp += "([0-9]*)";
-
-                       replaceStr += "$" + (i+1);
-
-                       // Cleanup variable name
-                       variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
-
-                       if (i != variableNames.length-1) {
-                               regExp += "\\s*,\\s*";
-                               replaceStr += "<delim>";
-                       } else
-                               regExp += ".*";
-               }
-
-               regExp += "\\);?";
-
-               // Build variable array
-               var variables = new Array();
-               variables["_function"] = fnName;
-               var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
-               for (var i=0; i<variableNames.length; i++)
-                       variables[variableNames[i]] = variableValues[i];
-
-               return variables;
-       }
-
-       return null;
-}
-
-function parseOptions(opts) {
-       if (opts == null || opts == "")
-               return new Array();
-
-       // Cleanup the options
-       opts = opts.toLowerCase();
-       opts = opts.replace(/;/g, ",");
-       opts = opts.replace(/[^0-9a-z=,]/g, "");
-
-       var optionChunks = opts.split(',');
-       var options = new Array();
-
-       for (var i=0; i<optionChunks.length; i++) {
-               var parts = optionChunks[i].split('=');
-
-               if (parts.length == 2)
-                       options[parts[0]] = parts[1];
-       }
-
-       return options;
-}
-
-function buildOnClick() {
-       var formObj = document.forms[0];
-
-       if (!formObj.ispopup.checked) {
-               formObj.onclick.value = "";
-               return;
-       }
-
-       var onclick = "window.open('";
-
-       onclick += formObj.popupurl.value + "','";
-       onclick += formObj.popupname.value + "','";
-
-       if (formObj.popuplocation.checked)
-               onclick += "location=yes,";
-
-       if (formObj.popupscrollbars.checked)
-               onclick += "scrollbars=yes,";
-
-       if (formObj.popupmenubar.checked)
-               onclick += "menubar=yes,";
-
-       if (formObj.popupresizable.checked)
-               onclick += "resizable=yes,";
-
-       if (formObj.popuptoolbar.checked)
-               onclick += "toolbar=yes,";
-
-       if (formObj.popupstatus.checked)
-               onclick += "status=yes,";
-
-       if (formObj.popupdependent.checked)
-               onclick += "dependent=yes,";
-
-       if (formObj.popupwidth.value != "")
-               onclick += "width=" + formObj.popupwidth.value + ",";
-
-       if (formObj.popupheight.value != "")
-               onclick += "height=" + formObj.popupheight.value + ",";
-
-       if (formObj.popupleft.value != "") {
-               if (formObj.popupleft.value != "c")
-                       onclick += "left=" + formObj.popupleft.value + ",";
-               else
-                       onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
-       }
-
-       if (formObj.popuptop.value != "") {
-               if (formObj.popuptop.value != "c")
-                       onclick += "top=" + formObj.popuptop.value + ",";
-               else
-                       onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
-       }
-
-       if (onclick.charAt(onclick.length-1) == ',')
-               onclick = onclick.substring(0, onclick.length-1);
-
-       onclick += "');";
-
-       if (formObj.popupreturn.checked)
-               onclick += "return false;";
-
-       // tinyMCE.debug(onclick);
-
-       formObj.onclick.value = onclick;
-}
-
-function setAttrib(elm, attrib, value) {
-       var formObj = document.forms[0];
-       var valueElm = formObj.elements[attrib.toLowerCase()];
-
-       if (typeof(value) == "undefined" || value == null) {
-               value = "";
-
-               if (valueElm)
-                       value = valueElm.value;
-       }
-
-       if (value != "") {
-               elm.setAttribute(attrib.toLowerCase(), value);
-
-               if (attrib == "style")
-                       attrib = "style.cssText";
-
-               if (attrib == "href")
-                       elm.setAttribute("mce_real_href", value);
-
-               if (attrib.substring(0, 2) == 'on')
-                       value = 'return true;' + value;
-
-               if (attrib == "class")
-                       attrib = "className";
-
-               eval('elm.' + attrib + "=value;");
-       } else
-               elm.removeAttribute(attrib);
-}
-
-function renderAnchorList(id, target) {
-       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
-       var nodes = inst.getBody().getElementsByTagName("a");
-
-       var html = "";
-
-       html += '<tr><td class="column1"><label for="' + id + '">{$lang_advlink_anchor_names}</label></td><td>';
-       html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value=';
-       html += 'this.options[this.selectedIndex].value;">';
-       html += '<option value="">---</option>';
-
-       for (var i=0; i<nodes.length; i++) {
-               if ((name = tinyMCE.getAttrib(nodes[i], "name")) != "")
-                       html += '<option value="#' + name + '">' + name + '</option>';
-       }
-
-       html += '</select>';
-
-       document.write(html);
-}
-
-function insertAction() {
-       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
-       var elm = inst.getFocusElement();
-
-       elm = tinyMCE.getParentElement(elm, "a");
-
-       tinyMCEPopup.execCommand("mceBeginUndoLevel");
-
-       // Create new anchor elements
-       if (elm == null) {
-               if (tinyMCE.isSafari)
-                       tinyMCEPopup.execCommand("mceInsertContent", false, '<a href="#mce_temp_url#">' + inst.getSelectedHTML() + '</a>');
-               else
-                       tinyMCEPopup.execCommand("createlink", false, "#mce_temp_url#");
-
-               var elementArray = tinyMCE.getElementsByAttributeValue(inst.getBody(), "a", "href", "#mce_temp_url#");
-               for (var i=0; i<elementArray.length; i++) {
-                       var elm = elementArray[i];
-
-                       // Move cursor behind the new anchor
-                       if (tinyMCE.isGecko) {
-                               var sp = inst.getDoc().createTextNode(" ");
-
-                               if (elm.nextSibling)
-                                       elm.parentNode.insertBefore(sp, elm.nextSibling);
-                               else
-                                       elm.parentNode.appendChild(sp);
-
-                               // Set range after link
-                               var rng = inst.getDoc().createRange();
-                               rng.setStartAfter(elm);
-                               rng.setEndAfter(elm);
-
-                               // Update selection
-                               var sel = inst.getSel();
-                               sel.removeAllRanges();
-                               sel.addRange(rng);
-                       }
-
-                       setAllAttribs(elm);
-               }
-       } else
-               setAllAttribs(elm);
-
-       tinyMCEPopup.execCommand("mceEndUndoLevel");
-       tinyMCEPopup.close();
-}
-
-function setAllAttribs(elm) {
-       var formObj = document.forms[0];
-       var href = formObj.href.value;
-       var target = getSelectValue(formObj, 'targetlist');
-
-       href = convertURL(href, elm);
-
-       setAttrib(elm, 'href', href);
-       setAttrib(elm, 'title');
-       setAttrib(elm, 'target', target == '_self' ? '' : target);
-       setAttrib(elm, 'id');
-       setAttrib(elm, 'style');
-       setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
-       setAttrib(elm, 'rel');
-       setAttrib(elm, 'rev');
-       setAttrib(elm, 'charset');
-       setAttrib(elm, 'hreflang');
-       setAttrib(elm, 'dir');
-       setAttrib(elm, 'lang');
-       setAttrib(elm, 'tabindex');
-       setAttrib(elm, 'accesskey');
-       setAttrib(elm, 'type');
-       setAttrib(elm, 'onfocus');
-       setAttrib(elm, 'onblur');
-       setAttrib(elm, 'onclick');
-       setAttrib(elm, 'ondblclick');
-       setAttrib(elm, 'onmousedown');
-       setAttrib(elm, 'onmouseup');
-       setAttrib(elm, 'onmouseover');
-       setAttrib(elm, 'onmousemove');
-       setAttrib(elm, 'onmouseout');
-       setAttrib(elm, 'onkeypress');
-       setAttrib(elm, 'onkeydown');
-       setAttrib(elm, 'onkeyup');
-
-       // Refresh in old MSIE
-       if (tinyMCE.isMSIE5)
-               elm.outerHTML = elm.outerHTML;
-}
-
-function getSelectValue(form_obj, field_name) {
-       var elm = form_obj.elements[field_name];
-
-       if (elm == null || elm.options == null)
-               return "";
-
-       return elm.options[elm.selectedIndex].value;
-}
-
-function renderLinkList(elm_id, target_form_element, onchange_func) {
-       if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
-               return;
-
-       var html = "";
-
-       html += '<tr><td class="column1"><label for="' + elm_id + '">{$lang_link_list}</label></td>';
-       html += '<td colspan="2"><select id="' + elm_id + '" name="' + elm_id + '"';
-       html += ' class="mceLinkList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
-       html += 'this.options[this.selectedIndex].value;';
-
-       if (typeof(onchange_func) != "undefined")
-               html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
-
-       html += '"><option value="">---</option>';
-
-       for (var i=0; i<tinyMCELinkList.length; i++)
-               html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
-
-       html += '</select></td></tr>';
-
-       document.write(html);
-
-       // tinyMCE.debug('-- image list start --', html, '-- image list end --');
-}
-
-function renderTargetList(elm_id, target_form_element) {
-       var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');
-       var html = '';
-
-       html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
-       html += 'this.options[this.selectedIndex].value;">';
-
-       html += '<option value="_self">' + tinyMCE.getLang('lang_advlink_target_same') + '</option>';
-       html += '<option value="_blank">' + tinyMCE.getLang('lang_advlink_target_blank') + ' (_blank)</option>';
-       html += '<option value="_parent">' + tinyMCE.getLang('lang_advlink_target_parent') + ' (_parent)</option>';
-       html += '<option value="_top">' + tinyMCE.getLang('lang_advlink_target_top') + ' (_top)</option>';
-
-       for (var i=0; i<targets.length; i++) {
-               var key, value;
-
-               if (targets[i] == "")
-                       continue;
-
-               key = targets[i].split('=')[0];
-               value = targets[i].split('=')[1];
-
-               html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
-       }
-
-       html += '</select>';
-
-       document.write(html);
-}
-
-// While loading
-preinit();
+/* Functions for the advlink plugin popup */\r
+\r
+var templates = {\r
+       "window.open" : "window.open('${url}','${target}','${options}')"\r
+};\r
+\r
+function preinit() {\r
+       // Initialize\r
+       tinyMCE.setWindowArg('mce_windowresize', false);\r
+\r
+       // Import external list url javascript\r
+       var url = tinyMCE.getParam("external_link_list_url");\r
+       if (url != null) {\r
+               // Fix relative\r
+               if (url.charAt(0) != '/' && url.indexOf('://') == -1)\r
+                       url = tinyMCE.documentBasePath + "/" + url;\r
+\r
+               document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');\r
+       }\r
+}\r
+\r
+function changeClass() {\r
+       var formObj = document.forms[0];\r
+       formObj.classes.value = getSelectValue(formObj, 'classlist');\r
+}\r
+\r
+function init() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       var formObj = document.forms[0];\r
+       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));\r
+       var elm = inst.getFocusElement();\r
+       var action = "insert";\r
+       var html;\r
+\r
+       document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');\r
+       document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');\r
+       document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href');\r
+       document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href');\r
+       document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');\r
+\r
+       // Link list\r
+       html = getLinkListHTML('linklisthref','href');\r
+       if (html == "")\r
+               document.getElementById("linklisthrefrow").style.display = 'none';\r
+       else\r
+               document.getElementById("linklisthrefcontainer").innerHTML = html;\r
+\r
+       // Resize some elements\r
+       if (isVisible('hrefbrowser'))\r
+               document.getElementById('href').style.width = '260px';\r
+\r
+       if (isVisible('popupurlbrowser'))\r
+               document.getElementById('popupurl').style.width = '180px';\r
+\r
+       elm = tinyMCE.getParentElement(elm, "a");\r
+       if (elm != null && elm.nodeName == "A")\r
+               action = "update";\r
+\r
+       formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); \r
+\r
+       setPopupControlsDisabled(true);\r
+\r
+       if (action == "update") {\r
+               var href = tinyMCE.getAttrib(elm, 'href');\r
+\r
+               href = convertURL(href, elm, true);\r
+\r
+               // Use mce_href if found\r
+               var mceRealHref = tinyMCE.getAttrib(elm, 'mce_href');\r
+               if (mceRealHref != "") {\r
+                       href = mceRealHref;\r
+\r
+                       if (tinyMCE.getParam('convert_urls'))\r
+                               href = convertURL(href, elm, true);\r
+               }\r
+\r
+               var onclick = tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onclick'));\r
+\r
+               // Setup form data\r
+               setFormValue('href', href);\r
+               setFormValue('title', tinyMCE.getAttrib(elm, 'title'));\r
+               setFormValue('id', tinyMCE.getAttrib(elm, 'id'));\r
+               setFormValue('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style"))));\r
+               setFormValue('rel', tinyMCE.getAttrib(elm, 'rel'));\r
+               setFormValue('rev', tinyMCE.getAttrib(elm, 'rev'));\r
+               setFormValue('charset', tinyMCE.getAttrib(elm, 'charset'));\r
+               setFormValue('hreflang', tinyMCE.getAttrib(elm, 'hreflang'));\r
+               setFormValue('dir', tinyMCE.getAttrib(elm, 'dir'));\r
+               setFormValue('lang', tinyMCE.getAttrib(elm, 'lang'));\r
+               setFormValue('tabindex', tinyMCE.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
+               setFormValue('accesskey', tinyMCE.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
+               setFormValue('type', tinyMCE.getAttrib(elm, 'type'));\r
+               setFormValue('onfocus', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onfocus')));\r
+               setFormValue('onblur', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onblur')));\r
+               setFormValue('onclick', onclick);\r
+               setFormValue('ondblclick', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'ondblclick')));\r
+               setFormValue('onmousedown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousedown')));\r
+               setFormValue('onmouseup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseup')));\r
+               setFormValue('onmouseover', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));\r
+               setFormValue('onmousemove', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousemove')));\r
+               setFormValue('onmouseout', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));\r
+               setFormValue('onkeypress', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeypress')));\r
+               setFormValue('onkeydown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeydown')));\r
+               setFormValue('onkeyup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeyup')));\r
+               setFormValue('target', tinyMCE.getAttrib(elm, 'target'));\r
+               setFormValue('classes', tinyMCE.getAttrib(elm, 'class'));\r
+\r
+               // Parse onclick data\r
+               if (onclick != null && onclick.indexOf('window.open') != -1)\r
+                       parseWindowOpen(onclick);\r
+               else\r
+                       parseFunction(onclick);\r
+\r
+               // Select by the values\r
+               selectByValue(formObj, 'dir', tinyMCE.getAttrib(elm, 'dir'));\r
+               selectByValue(formObj, 'rel', tinyMCE.getAttrib(elm, 'rel'));\r
+               selectByValue(formObj, 'rev', tinyMCE.getAttrib(elm, 'rev'));\r
+               selectByValue(formObj, 'linklisthref', href);\r
+\r
+               if (href.charAt(0) == '#')\r
+                       selectByValue(formObj, 'anchorlist', href);\r
+\r
+               addClassesToList('classlist', 'advlink_styles');\r
+\r
+               selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'), true);\r
+               selectByValue(formObj, 'targetlist', tinyMCE.getAttrib(elm, 'target'), true);\r
+       } else\r
+               addClassesToList('classlist', 'advlink_styles');\r
+\r
+       window.focus();\r
+}\r
+\r
+function setFormValue(name, value) {\r
+       document.forms[0].elements[name].value = value;\r
+}\r
+\r
+function convertURL(url, node, on_save) {\r
+       return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");\r
+}\r
+\r
+function parseWindowOpen(onclick) {\r
+       var formObj = document.forms[0];\r
+\r
+       // Preprocess center code\r
+       if (onclick.indexOf('return false;') != -1) {\r
+               formObj.popupreturn.checked = true;\r
+               onclick = onclick.replace('return false;', '');\r
+       }\r
+\r
+       var onClickData = parseLink(onclick);\r
+\r
+       if (onClickData != null) {\r
+               formObj.ispopup.checked = true;\r
+               setPopupControlsDisabled(false);\r
+\r
+               var onClickWindowOptions = parseOptions(onClickData['options']);\r
+               var url = onClickData['url'];\r
+\r
+               if (tinyMCE.getParam('convert_urls'))\r
+                       url = convertURL(url, null, true);\r
+\r
+               formObj.popupname.value = onClickData['target'];\r
+               formObj.popupurl.value = url;\r
+               formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');\r
+               formObj.popupheight.value = getOption(onClickWindowOptions, 'height');\r
+\r
+               formObj.popupleft.value = getOption(onClickWindowOptions, 'left');\r
+               formObj.popuptop.value = getOption(onClickWindowOptions, 'top');\r
+\r
+               if (formObj.popupleft.value.indexOf('screen') != -1)\r
+                       formObj.popupleft.value = "c";\r
+\r
+               if (formObj.popuptop.value.indexOf('screen') != -1)\r
+                       formObj.popuptop.value = "c";\r
+\r
+               formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";\r
+               formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";\r
+               formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";\r
+               formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";\r
+               formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";\r
+               formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";\r
+               formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";\r
+\r
+               buildOnClick();\r
+       }\r
+}\r
+\r
+function parseFunction(onclick) {\r
+       var formObj = document.forms[0];\r
+       var onClickData = parseLink(onclick);\r
+\r
+       // TODO: Add stuff here\r
+}\r
+\r
+function getOption(opts, name) {\r
+       return typeof(opts[name]) == "undefined" ? "" : opts[name];\r
+}\r
+\r
+function setPopupControlsDisabled(state) {\r
+       var formObj = document.forms[0];\r
+\r
+       formObj.popupname.disabled = state;\r
+       formObj.popupurl.disabled = state;\r
+       formObj.popupwidth.disabled = state;\r
+       formObj.popupheight.disabled = state;\r
+       formObj.popupleft.disabled = state;\r
+       formObj.popuptop.disabled = state;\r
+       formObj.popuplocation.disabled = state;\r
+       formObj.popupscrollbars.disabled = state;\r
+       formObj.popupmenubar.disabled = state;\r
+       formObj.popupresizable.disabled = state;\r
+       formObj.popuptoolbar.disabled = state;\r
+       formObj.popupstatus.disabled = state;\r
+       formObj.popupreturn.disabled = state;\r
+       formObj.popupdependent.disabled = state;\r
+\r
+       setBrowserDisabled('popupurlbrowser', state);\r
+}\r
+\r
+function parseLink(link) {\r
+       link = link.replace(new RegExp('&#39;', 'g'), "'");\r
+\r
+       var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");\r
+\r
+       // Is function name a template function\r
+       var template = templates[fnName];\r
+       if (template) {\r
+               // Build regexp\r
+               var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));\r
+               var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";\r
+               var replaceStr = "";\r
+               for (var i=0; i<variableNames.length; i++) {\r
+                       // Is string value\r
+                       if (variableNames[i].indexOf("'${") != -1)\r
+                               regExp += "'(.*)'";\r
+                       else // Number value\r
+                               regExp += "([0-9]*)";\r
+\r
+                       replaceStr += "$" + (i+1);\r
+\r
+                       // Cleanup variable name\r
+                       variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");\r
+\r
+                       if (i != variableNames.length-1) {\r
+                               regExp += "\\s*,\\s*";\r
+                               replaceStr += "<delim>";\r
+                       } else\r
+                               regExp += ".*";\r
+               }\r
+\r
+               regExp += "\\);?";\r
+\r
+               // Build variable array\r
+               var variables = new Array();\r
+               variables["_function"] = fnName;\r
+               var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');\r
+               for (var i=0; i<variableNames.length; i++)\r
+                       variables[variableNames[i]] = variableValues[i];\r
+\r
+               return variables;\r
+       }\r
+\r
+       return null;\r
+}\r
+\r
+function parseOptions(opts) {\r
+       if (opts == null || opts == "")\r
+               return new Array();\r
+\r
+       // Cleanup the options\r
+       opts = opts.toLowerCase();\r
+       opts = opts.replace(/;/g, ",");\r
+       opts = opts.replace(/[^0-9a-z=,]/g, "");\r
+\r
+       var optionChunks = opts.split(',');\r
+       var options = new Array();\r
+\r
+       for (var i=0; i<optionChunks.length; i++) {\r
+               var parts = optionChunks[i].split('=');\r
+\r
+               if (parts.length == 2)\r
+                       options[parts[0]] = parts[1];\r
+       }\r
+\r
+       return options;\r
+}\r
+\r
+function buildOnClick() {\r
+       var formObj = document.forms[0];\r
+\r
+       if (!formObj.ispopup.checked) {\r
+               formObj.onclick.value = "";\r
+               return;\r
+       }\r
+\r
+       var onclick = "window.open('";\r
+       var url = formObj.popupurl.value;\r
+\r
+       if (tinyMCE.getParam('convert_urls'))\r
+               url = convertURL(url, null, true);\r
+\r
+       onclick += url + "','";\r
+       onclick += formObj.popupname.value + "','";\r
+\r
+       if (formObj.popuplocation.checked)\r
+               onclick += "location=yes,";\r
+\r
+       if (formObj.popupscrollbars.checked)\r
+               onclick += "scrollbars=yes,";\r
+\r
+       if (formObj.popupmenubar.checked)\r
+               onclick += "menubar=yes,";\r
+\r
+       if (formObj.popupresizable.checked)\r
+               onclick += "resizable=yes,";\r
+\r
+       if (formObj.popuptoolbar.checked)\r
+               onclick += "toolbar=yes,";\r
+\r
+       if (formObj.popupstatus.checked)\r
+               onclick += "status=yes,";\r
+\r
+       if (formObj.popupdependent.checked)\r
+               onclick += "dependent=yes,";\r
+\r
+       if (formObj.popupwidth.value != "")\r
+               onclick += "width=" + formObj.popupwidth.value + ",";\r
+\r
+       if (formObj.popupheight.value != "")\r
+               onclick += "height=" + formObj.popupheight.value + ",";\r
+\r
+       if (formObj.popupleft.value != "") {\r
+               if (formObj.popupleft.value != "c")\r
+                       onclick += "left=" + formObj.popupleft.value + ",";\r
+               else\r
+                       onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";\r
+       }\r
+\r
+       if (formObj.popuptop.value != "") {\r
+               if (formObj.popuptop.value != "c")\r
+                       onclick += "top=" + formObj.popuptop.value + ",";\r
+               else\r
+                       onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";\r
+       }\r
+\r
+       if (onclick.charAt(onclick.length-1) == ',')\r
+               onclick = onclick.substring(0, onclick.length-1);\r
+\r
+       onclick += "');";\r
+\r
+       if (formObj.popupreturn.checked)\r
+               onclick += "return false;";\r
+\r
+       // tinyMCE.debug(onclick);\r
+\r
+       formObj.onclick.value = onclick;\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+       var formObj = document.forms[0];\r
+       var valueElm = formObj.elements[attrib.toLowerCase()];\r
+\r
+       if (typeof(value) == "undefined" || value == null) {\r
+               value = "";\r
+\r
+               if (valueElm)\r
+                       value = valueElm.value;\r
+       }\r
+\r
+       if (value != "") {\r
+               elm.setAttribute(attrib.toLowerCase(), value);\r
+\r
+               if (attrib == "style")\r
+                       attrib = "style.cssText";\r
+\r
+               if (attrib.substring(0, 2) == 'on')\r
+                       value = 'return true;' + value;\r
+\r
+               if (attrib == "class")\r
+                       attrib = "className";\r
+\r
+               eval('elm.' + attrib + "=value;");\r
+       } else\r
+               elm.removeAttribute(attrib);\r
+}\r
+\r
+function getAnchorListHTML(id, target) {\r
+       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));\r
+       var nodes = inst.getBody().getElementsByTagName("a");\r
+\r
+       var html = "";\r
+\r
+       html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;">';\r
+       html += '<option value="">---</option>';\r
+\r
+       for (var i=0; i<nodes.length; i++) {\r
+               if ((name = tinyMCE.getAttrib(nodes[i], "name")) != "")\r
+                       html += '<option value="#' + name + '">' + name + '</option>';\r
+       }\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+}\r
+\r
+function insertAction() {\r
+       var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));\r
+       var elm = inst.getFocusElement();\r
+\r
+       elm = tinyMCE.getParentElement(elm, "a");\r
+\r
+       tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+\r
+       // Create new anchor elements\r
+       if (elm == null) {\r
+               if (tinyMCE.isSafari)\r
+                       tinyMCEPopup.execCommand("mceInsertContent", false, '<a href="#mce_temp_url#">' + inst.getSelectedHTML() + '</a>');\r
+               else\r
+                       tinyMCEPopup.execCommand("createlink", false, "#mce_temp_url#");\r
+\r
+               var elementArray = tinyMCE.getElementsByAttributeValue(inst.getBody(), "a", "href", "#mce_temp_url#");\r
+               for (var i=0; i<elementArray.length; i++) {\r
+                       var elm = elementArray[i];\r
+\r
+                       // Move cursor behind the new anchor\r
+                       if (tinyMCE.isGecko) {\r
+                               var sp = inst.getDoc().createTextNode(" ");\r
+\r
+                               if (elm.nextSibling)\r
+                                       elm.parentNode.insertBefore(sp, elm.nextSibling);\r
+                               else\r
+                                       elm.parentNode.appendChild(sp);\r
+\r
+                               // Set range after link\r
+                               var rng = inst.getDoc().createRange();\r
+                               rng.setStartAfter(elm);\r
+                               rng.setEndAfter(elm);\r
+\r
+                               // Update selection\r
+                               var sel = inst.getSel();\r
+                               sel.removeAllRanges();\r
+                               sel.addRange(rng);\r
+                       }\r
+\r
+                       setAllAttribs(elm);\r
+               }\r
+       } else\r
+               setAllAttribs(elm);\r
+\r
+       tinyMCE._setEventsEnabled(inst.getBody(), false);\r
+       tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function setAllAttribs(elm) {\r
+       var formObj = document.forms[0];\r
+       var href = formObj.href.value;\r
+       var target = getSelectValue(formObj, 'targetlist');\r
+\r
+       // Make anchors absolute\r
+       if (href.charAt(0) == '#')\r
+               href = tinyMCE.settings['document_base_url'] + href;\r
+\r
+       setAttrib(elm, 'href', convertURL(href, elm));\r
+       setAttrib(elm, 'mce_href', href);\r
+       setAttrib(elm, 'title');\r
+       setAttrib(elm, 'target', target == '_self' ? '' : target);\r
+       setAttrib(elm, 'id');\r
+       setAttrib(elm, 'style');\r
+       setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));\r
+       setAttrib(elm, 'rel');\r
+       setAttrib(elm, 'rev');\r
+       setAttrib(elm, 'charset');\r
+       setAttrib(elm, 'hreflang');\r
+       setAttrib(elm, 'dir');\r
+       setAttrib(elm, 'lang');\r
+       setAttrib(elm, 'tabindex');\r
+       setAttrib(elm, 'accesskey');\r
+       setAttrib(elm, 'type');\r
+       setAttrib(elm, 'onfocus');\r
+       setAttrib(elm, 'onblur');\r
+       setAttrib(elm, 'onclick');\r
+       setAttrib(elm, 'ondblclick');\r
+       setAttrib(elm, 'onmousedown');\r
+       setAttrib(elm, 'onmouseup');\r
+       setAttrib(elm, 'onmouseover');\r
+       setAttrib(elm, 'onmousemove');\r
+       setAttrib(elm, 'onmouseout');\r
+       setAttrib(elm, 'onkeypress');\r
+       setAttrib(elm, 'onkeydown');\r
+       setAttrib(elm, 'onkeyup');\r
+\r
+       // Refresh in old MSIE\r
+       if (tinyMCE.isMSIE5)\r
+               elm.outerHTML = elm.outerHTML;\r
+}\r
+\r
+function getSelectValue(form_obj, field_name) {\r
+       var elm = form_obj.elements[field_name];\r
+\r
+       if (elm == null || elm.options == null)\r
+               return "";\r
+\r
+       return elm.options[elm.selectedIndex].value;\r
+}\r
+\r
+function getLinkListHTML(elm_id, target_form_element, onchange_func) {\r
+       if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)\r
+               return "";\r
+\r
+       var html = "";\r
+\r
+       html += '<select id="' + elm_id + '" name="' + elm_id + '"';\r
+       html += ' class="mceLinkList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;';\r
+\r
+       if (typeof(onchange_func) != "undefined")\r
+               html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';\r
+\r
+       html += '"><option value="">---</option>';\r
+\r
+       for (var i=0; i<tinyMCELinkList.length; i++)\r
+               html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+\r
+       // tinyMCE.debug('-- image list start --', html, '-- image list end --');\r
+}\r
+\r
+function getTargetListHTML(elm_id, target_form_element) {\r
+       var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');\r
+       var html = '';\r
+\r
+       html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;">';\r
+\r
+       html += '<option value="_self">' + tinyMCE.getLang('lang_advlink_target_same') + '</option>';\r
+       html += '<option value="_blank">' + tinyMCE.getLang('lang_advlink_target_blank') + ' (_blank)</option>';\r
+       html += '<option value="_parent">' + tinyMCE.getLang('lang_advlink_target_parent') + ' (_parent)</option>';\r
+       html += '<option value="_top">' + tinyMCE.getLang('lang_advlink_target_top') + ' (_top)</option>';\r
+\r
+       for (var i=0; i<targets.length; i++) {\r
+               var key, value;\r
+\r
+               if (targets[i] == "")\r
+                       continue;\r
+\r
+               key = targets[i].split('=')[0];\r
+               value = targets[i].split('=')[1];\r
+\r
+               html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';\r
+       }\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+}\r
+\r
+// While loading\r
+preinit();\r