Today I got the project working properly with FireFox and I am 98% Safari compatible.
You can download the code here (3.65 mb).
The issues where element.firstChild and element.nextSibling they where resolved using the following functions.
function IsNull ( obj )
{
if ( obj == null || obj == "undefined" ) return true;
return false;
};
function getFirstChild ( element )
{
if ( IsNull ( element ) ) throw Error.argumentNull("element");
if ( IsNull ( element.childNodes ) ) throw Error.argumentNull("element.childNodes");
if ( element.childNodes.length < 1 )
{
return null;
};
var count = element.childNodes.length;
var childNodes = element.childNodes;
for ( var index = 0; index < count; index++ )
{
var child = childNodes[index];
if ( child.nodeType == 1 )
{
Sys.Debug.trace("child = " + child + ", child.nodeType = " + child.nodeType);
return child;
};
};
return null;
};
function getNextSibling ( element )
{
if ( IsNull ( element ) ) throw Error.argumentNull("element");
var sibling = element.nextSibling;
while ( !IsNull(sibling) && sibling.nodeType != 1 )
{
sibling = sibling.nextSibling;
};
return sibling;
};
They are a slight rewrite of the functions I found here.
I also found that there was another way of doing it using the Ajax Control toolkit but by that time I was already done.
here the function
AjaxControlToolkit.DragDropManager._getInstance().getNextSibling(this._dragVisual);