ivanka: Verlinkung eines Bildes mit einem WYSIWYG-Editor

Grüß euch alle!

Habe folgendes Problem, an dem ich schon seit 2 Tagen hänge und bin auf euer tolles Forum gestoßen - naja vielleicht könnt ihr mir ja weiter helfen.

Ich habe einen freien Web-Editor um eine Linkfunktion erweitert und zwar verwende ich nicht das execCommand(creatlink) (-> wie das original) sondern ich hab die funktion selbst geschrieben da ich auch andere Linkangaben benötige -> target.
Soweit alles gut, nur hab ich das Problem das ich wenn ich ein Bild einfüge und dieses verlinken möchte, reicht es erstens nicht das ich das Bild nur anklicke sondern ich muss es als ganzes markieren (so das es blau-transparent ist). Hier wär mir schon geholfen wenn das automatisch gehen könnte. Ach ja ein Bild kann man auch per drag and drop einfügen.
Aber das größere Problem das ich hab ist, das wenn ich den Link setze das Bild im Editor ein zweites mal erscheint, als hyperlink. Wenn man in den html-modus umschaltet stimmt der code jedoch! und wenn ich nachdem das zweite bild erscheint in der history zurück und wieder nach vorne drücke stimmt die ansicht. Ich denke da in erster Linie an irgendein aktualisierungsproblem oder so.

Ausprobieren könnt ihr das ganze unter:
http://www.globesoft.at/demo-wysiwyg/

und das original:
http://www.globesoft.at/demo-wysiwyg_orig/

beim original ist gut sichtbar das wenn der link über execCommand erstellt wird das nach dem das Bild verlinkt wird kurz neu geladen wird und sowas werd ich glaub ich auch benötigen. Nur weiß ich leider nicht wie ich das anstellen muss.

Der quellcode von meiner Linkfunktion:

+++++++++++++++++++++++++++++
HTMLArea.prototype._insertLink = function() {

var sel = this._getSelection(); //auswahl bestimmen
var range = this._createRange(sel); //range festlegen
var editor = this; // for nested functions

/*+++++++++++++++++++++++++++++++++++*/
var ancestors = this.getAllAncestors();
for (var i = ancestors.length; --i >= 0 {
var el = ancestors[i];
if (!el) {
// hell knows why we get here; this
// could be a classic example of why
// it's good to check for conditions
// that are impossible to happen
continue;
}
if (el.tagName.toLowerCase() == "a") {// aulesen der einzelnen tag-elemente
var iHtml = el.innerHTML;
var target = el.target;
var href = el.href;
//this.selectNodeContents(el);
//alert(href);
}
if (el.tagName.toLowerCase() == "img") {// aulesen der einzelnen bild-elemente wenn vorhanden
var img_src = el.src;
//alert(img_src);
var img_width = el.width;
//alert(img_width);
var img_height = el.height;
//alert(img_height);
var img_border = el.border;
//alert(img_border);
var img_check = 1;
}
}
//alert(iHtml);
document.cookie = "Hlink=" + escape(iHtml+"}"+target+"}"+href); // setzen des cookies mit den tag-elementen, damit im popup ein zugriff möglich ist
/*+++++++++++++++++++++++++++++++++++*/

this._popupDialog("insert_link.html", function(param) { //functionsaufruf popup
if (!param) { // user must have pressed Cancel
return false;
}

var doc = editor._doc; //zugriff auf das document
var IT = range.text; //der ausgewählte text

var lin = doc.createElement("a"); // erstellt das linkelement
// assign the given arguments
for (var field in param) {
var value = param[field];
if (!value) {
continue;
}
switch (field) { // befüllen des linkobjekts
case "href" : lin.href = value; break;
case "target" : lin.target = value; break;
}
}

if(img_check == 1){
//alert(img_src);
var image = "<img src=""+img_src+"" width=""+img_width+"" height=""+img_height+"" border=""+img_border+"" alt="">";
}

doc.appendChild(lin); // linkobjekt ans document binden

lin.innerText = IT; // einfügen des zu verlinkenden textes

if(img_check == 1){
lin.innerHTML = image; // einfügen des zu verlinkenden textes
delete img_check;
}

if (HTMLArea.is_ie) {
range.pasteHTML(lin.outerHTML);
//hier denke ich sollte der reload passieren
} else {
// insert the table
editor.insertNodeAtSelection(lin);
}
return true;
}, null);

};
+++++++++++++++++++++++++++++++

Ich hoffe ich hab mich deutlich genug ausgedrückt, sonst mich fragt bitte!
Schade das der code von dem execCommand nicht bekannt ist, sonst hätte ichs mir ja da abgeschaut aber source is closed ....  ... thx to ms

greetz ivanka