HTMLArea.TYPO3Link=HTMLArea.Plugin.extend({constructor:function(editor,pluginName){this.base(editor,pluginName);},configurePlugin:function(editor){this.pageTSConfiguration=this.editorConfiguration.buttons.link;this.modulePath=this.pageTSConfiguration.pathLinkModule;this.classesAnchorUrl=this.pageTSConfiguration.classesAnchorUrl;var pluginInformation={version:'2.1',developer:'Stanislas Rolland',developerUrl:'http://www.sjbr.ca/',copyrightOwner:'Stanislas Rolland',sponsor:'SJBR',sponsorUrl:'http://www.sjbr.ca/',license:'GPL'};this.registerPluginInformation(pluginInformation);var buttonList=this.buttonList,buttonId;for(var i=0;i=0;){if((node.hasAttribute&&node.hasAttribute(additionalAttributes[i]))||node.getAttribute(additionalAttributes[i])!=null){additionalParameter+="&curUrl["+additionalAttributes[i]+"]="+encodeURIComponent(node.getAttribute(additionalAttributes[i]));}}}}else if(this.editor.hasSelectedText()){var text=this.editor.getSelectedHTML();if(text&&text!=null){var offset=text.toLowerCase().indexOf("");ATagContent=ATagContent.substring(0,offset);additionalParameter="&curUrl[all]="+encodeURIComponent(ATagContent);}}}
this.openContainerWindow(buttonId,this.getButton(buttonId).tooltip.title,this.getWindowDimensions({width:550,height:500},buttonId),this.makeUrlFromModulePath(this.modulePath,additionalParameter));}
return false;},createLink:function(theLink,cur_target,cur_class,cur_title,additionalValues){var selection,range,anchorClass,imageNode=null,addIconAfterLink;this.editor.focus();this.restoreSelection();var node=this.editor.getParentElement();var el=HTMLArea.getElementObject(node,'a');if(el!=null&&/^a$/i.test(el.nodeName)){node=el;}
if(HTMLArea.classesAnchorSetup&&cur_class){for(var i=HTMLArea.classesAnchorSetup.length;--i>=0;){anchorClass=HTMLArea.classesAnchorSetup[i];if(anchorClass.name==cur_class&&anchorClass.image){imageNode=this.editor.document.createElement('img');imageNode.src=anchorClass.image;imageNode.alt=anchorClass.altText;addIconAfterLink=anchorClass.addIconAfterLink;break;}}}
if(node!=null&&/^a$/i.test(node.nodeName)){this.editor.selectNode(node);selection=this.editor._getSelection();range=this.editor._createRange(selection);if(HTMLArea.classesAnchorSetup){this.cleanAllLinks(node,range,true);}
if(Ext.isIE){var content=node.innerHTML;}
node.href=Ext.isGecko?encodeURI(theLink):theLink;if(Ext.isIE){node.innerHTML=content;}
this.setLinkAttributes(node,range,cur_target,cur_class,cur_title,imageNode,addIconAfterLink,additionalValues);}else{selection=this.editor._getSelection();range=this.editor._createRange(selection);if(Ext.isIE){this.cleanAllLinks(node,range);}else{var bookmark=this.editor.getBookmark(range);this.cleanAllLinks(node,range);var range=this.editor.moveToBookmark(bookmark);this.editor.selectRange(range);}
if(Ext.isGecko){this.editor.document.execCommand('CreateLink',false,encodeURI(theLink));}else{this.editor.document.execCommand('CreateLink',false,theLink);}
selection=this.editor._getSelection();range=this.editor._createRange(selection);node=this.editor.getParentElement();var el=HTMLArea.getElementObject(node,'a');if(el!=null&&/^a$/i.test(el.nodeName)){node=el;}
if(node){if(Ext.isIE){if(node.lastChild&&/^br$/i.test(node.lastChild.nodeName)){HTMLArea.removeFromParent(node.lastChild);node.parentNode.insertBefore(this.editor.document.createElement('br'),node.nextSibling);}}
this.setLinkAttributes(node,range,cur_target,cur_class,cur_title,imageNode,addIconAfterLink,additionalValues);}}
this.close();},unLink:function(buttonPressed){this.editor.focus();if(!buttonPressed){this.restoreSelection();}
var node=this.editor.getParentElement();var el=HTMLArea.getElementObject(node,"a");if(el!=null&&/^a$/i.test(el.nodeName))node=el;if(node!=null&&/^a$/i.test(node.nodeName))this.editor.selectNode(node);if(HTMLArea.classesAnchorSetup){var selection=this.editor._getSelection();var range=this.editor._createRange(selection);if(!Ext.isIE){this.cleanAllLinks(node,range,false);}else{this.cleanAllLinks(node,range,true);this.editor._doc.execCommand("Unlink",false,"");}}else{this.editor._doc.execCommand("Unlink",false,"");}
if(this.dialog){this.close();}},setLinkAttributes:function(node,range,cur_target,cur_class,cur_title,imageNode,addIconAfterLink,additionalValues){if(/^a$/i.test(node.nodeName)){var nodeInRange=false;if(!Ext.isIE){nodeInRange=this.editor.rangeIntersectsNode(range,node);}else{if(this.editor._getSelection().type.toLowerCase()=="control"){nodeInRange=true;}else{var nodeRange=this.editor._doc.body.createTextRange();nodeRange.moveToElementText(node);nodeInRange=nodeRange.inRange(range)||range.inRange(nodeRange)||(range.compareEndPoints("StartToStart",nodeRange)==0)||(range.compareEndPoints("EndToEnd",nodeRange)==0);}}
if(nodeInRange){if(imageNode!=null){if(addIconAfterLink){node.appendChild(imageNode.cloneNode(false));}else{node.insertBefore(imageNode.cloneNode(false),node.firstChild);}}
if(Ext.isGecko){node.href=decodeURI(node.href);}
if(cur_target.trim())node.target=cur_target.trim();else node.removeAttribute("target");if(cur_class.trim()){node.className=cur_class.trim();}else{if(!Ext.isOpera){node.removeAttribute('class');if(Ext.isIE){node.removeAttribute('className');}}else{node.className='';}}
if(cur_title.trim()){node.title=cur_title.trim();}else{node.removeAttribute("title");node.removeAttribute("rtekeep");}
if(this.pageTSConfiguration&&this.pageTSConfiguration.additionalAttributes&&typeof(additionalValues)=="object"){for(additionalAttribute in additionalValues){if(additionalValues.hasOwnProperty(additionalAttribute)){if(additionalValues[additionalAttribute].toString().trim()){node.setAttribute(additionalAttribute,additionalValues[additionalAttribute]);}else{node.removeAttribute(additionalAttribute);}}}}}}else{for(var i=node.firstChild;i;i=i.nextSibling){if(i.nodeType==1||i.nodeType==11){this.setLinkAttributes(i,range,cur_target,cur_class,cur_title,imageNode,addIconAfterLink,additionalValues);}}}},cleanClassesAnchorImages:function(node){var nodeArray=[],splitArray1=[],splitArray2=[];for(var childNode=node.firstChild;childNode;childNode=childNode.nextSibling){if(/^img$/i.test(childNode.nodeName)){splitArray1=childNode.src.split("/");for(var i=HTMLArea.classesAnchorSetup.length;--i>=0;){if(HTMLArea.classesAnchorSetup[i]["image"]){splitArray2=HTMLArea.classesAnchorSetup[i]["image"].split("/");if(splitArray1[splitArray1.length-1]==splitArray2[splitArray2.length-1]){nodeArray.push(childNode);break;}}}}}
for(i=nodeArray.length;--i>=0;){node.removeChild(nodeArray[i]);}},cleanAllLinks:function(node,range,keepLinks){if(/^a$/i.test(node.nodeName)){var intersection=false;if(!Ext.isIE){intersection=this.editor.rangeIntersectsNode(range,node);}else{if(this.editor._getSelection().type.toLowerCase()=="control"){intersection=true;}else{var nodeRange=this.editor._doc.body.createTextRange();nodeRange.moveToElementText(node);intersection=range.inRange(nodeRange)||((range.compareEndPoints("StartToStart",nodeRange)>0)&&(range.compareEndPoints("StartToEnd",nodeRange)<0))||((range.compareEndPoints("EndToStart",nodeRange)>0)&&(range.compareEndPoints("EndToEnd",nodeRange)<0));}}
if(intersection){this.cleanClassesAnchorImages(node);if(!keepLinks){while(node.firstChild)node.parentNode.insertBefore(node.firstChild,node);node.parentNode.removeChild(node);}}}else{for(var i=node.firstChild;i;i=i.nextSibling){if(i.nodeType==1||i.nodeType==11)this.cleanAllLinks(i,range,keepLinks);}}},onUpdateToolbar:function(button,mode,selectionEmpty,ancestors){if(mode==='wysiwyg'&&this.editor.isEditable()){switch(button.itemId){case'CreateLink':button.setDisabled(selectionEmpty&&!button.isInContext(mode,selectionEmpty,ancestors));if(!button.disabled){var node=this.editor.getParentElement();var el=HTMLArea.getElementObject(node,'a');if(el!=null&&/^a$/i.test(el.nodeName)){node=el;}
if(node!=null&&/^a$/i.test(node.nodeName)){button.setTooltip({title:this.localize('Modify link')});}else{button.setTooltip({title:this.localize('Insert link')});}}
break;case'UnLink':var link=false;if(Ext.isGecko&&!selectionEmpty){var range=this.editor._createRange(this.editor._getSelection());if(range.startContainer.nodeType==1&&range.startContainer==range.endContainer&&(range.endOffset-range.startOffset==1)){var node=range.startContainer.childNodes[range.startOffset];if(node&&/^a$/i.test(node.nodeName)&&node.textContent==range.toString()){link=true;}}}
button.setDisabled(!link&&!button.isInContext(mode,selectionEmpty,ancestors));break;}}}});