//needs "shiFunction.js"
//needs "jipajax.js"

var oAjaxCall   = null;

function ajaxcall(bDown, sDocID, sUrl, ohtmlele)
{
    this.req    =  getHTTPObject();
    this.bDown  = bDown;
    this.sDocID = sDocID;
    this.sUrl   = sUrl;
    this.ele    = ohtmlele;
}

function onClickMoveDocument(bDown, sDocID, ohtmlele)
{
    if(!ismovable(ohtmlele, bDown)) return false;
    if(oAjaxCall != null)           return false;
    oAjaxCall = new ajaxcall(bDown, sDocID, getpath(self.location.href)+"/standard/jsp/shiajaxcommunicator.jsf?object=favoritesBackingBean&down="+bDown+"&docid="+sDocID+"&ajaxcall=1&tmpstmp="+(new Date()).getMilliseconds(), ohtmlele);
    if (oAjaxCall.req == null)
    {
        dbg(iERR, "onClickMoveDocument\n!req");
        oAjaxCall = null;
        return true;    //=means: onclick should not break link-handling...
    }
    oAjaxCall.req.onreadystatechange = onClickMoveDocument_response;
    oAjaxCall.req.open("GET", oAjaxCall.sUrl, true/*asynchron(attenzione with ff!)?*/);
    if (window.XMLHttpRequest)
        oAjaxCall.req.send(null);
    else if (window.ActiveXObject)	// branch for IE/Windows ActiveX version
       oAjaxCall.req.send();
    return false;
}
function onClickMoveDocument_response()
{
    if((oAjaxCall == null) || (oAjaxCall.req == null))
    {
        dbg(iERR, "onClickMoveDocument_response\n!req");
        return false;
    }
    if (oAjaxCall.req.readyState != 4)			//4 == "Complete" in ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
    {
        //dbg(iINF, "ontreeitemexpandclick_response\nreq.readyState:"+req.readyState);	
        return false;
    }
    if (!responseIsSuccess(oAjaxCall.req))
    {
        dbg(iERR, "onClickMoveDocument_response\nreq.status:"+oAjaxCall.req.status+"\nurl:"+oAjaxCall.sUrl);
        oAjaxCall = null;
        return false;
    }
    var sAnswer = trim(oAjaxCall.req.responseText);
    if (sAnswer == "1")
    {
        jsMoveDoc(oAjaxCall)
    }
    else
    {
        dbg(iERR, "onClickMoveDocument_response\nanswer:"+sAnswer);
    }
    oAjaxCall   = null;
    return false;
}
function jsMoveDoc(oAjaxCall)
{
    var otr = getparentelement(oAjaxCall.ele, "tr");
    if(!otr) return;
    var otr2swap = getnextele(otr, oAjaxCall.bDown);
    if(!otr2swap) return;    //can be normal if last/first tr
    
    //var otrinnerhtml         = ""+otr.innerHTML+"";
    //var otr2swapinnerhtml    = ""+otr2swap.innerHTML+"";
    var aotrtds1 = gettds(otr);
    var aotrtds2 = gettds(otr2swap);
    
    if((aotrtds1.length < 1) || (aotrtds1.length != aotrtds2.length))
    {
        dbg(iERR, "jsMoveDoc\nlengths:");
        return;
    }
    for(var i=0; i < aotrtds1.length; i++)
    {
        var otdcontent1 = aotrtds1[i].innerHTML;
        var otdcontent2 = aotrtds2[i].innerHTML;
        aotrtds1[i].innerHTML = otdcontent2;
        aotrtds2[i].innerHTML = otdcontent1;
    }
    
/*  FF.2.0 can that, ie not...!
    var i=0;
    //try
    {
        i=1;
        otr.innerHTML            = " ";
        i=2;
        otr2swap.innerHTML       = " ";
        i=3;
        otr.innerHTML            = ""+otr2swapinnerhtml+"";
        i=4;
        otr2swap.innerHTML       = ""+otrinnerhtml+"";
        i=5;
    }
    //catch (e)
    {
        dbg(iERR, "jsMoveDoc\ni:"+i);
    }
*/
}
function gettds(otr)
{
    var otds = new Array();
    var otd  = otr;
    while(otd)
    {
        if(otd == null)
        {
            dbg(iERR, "gettds\nrF1");
            return otds;
        }
        otd = otd.childNodes[0];
        var otdsibling = otd;
        while(otdsibling)
        {
            if(otdsibling.tagName && otdsibling.tagName.toLowerCase() == "td")
            {
                otd = otdsibling;
                break;
            }
            otdsibling = otdsibling.nextSibling;
        }
        if(otd == null)
        {
            dbg(iERR, "gettds\nrF3:tagname:"+otr.tagName);
            return otds;
        }
        if(otd == null)                         continue;
        if(otd.tagName == null)                 continue;
        if(otd.tagName.toLowerCase() != "td")   continue;
        break;
    }
    if(otd == null)
    {
        dbg(iERR, "gettds\nrF2");
        return otds;
    }
    while(otd != null)
    {
        if(otd.nodeType == 1)otds.push(otd);
        otd = otd.nextSibling;
    }
    return otds;
}
function getparentelement(ele, sTagName2Search)
{
    var i=0;
    while(ele != null)
    {
        if (ele.tagName.toLowerCase() == sTagName2Search)    return ele;
        if (ele.parentElement != null)
            ele = ele.parentElement;    //ie+opera
        else if (ele.parentNode != null)
            ele = ele.parentNode;    //ie+opera
        else
        {
            dbg(iERR, "getparentelement\n(1)!parentElement:"+ele.parentElement+"\nele:"+ele+"\nsTagName2Search:"+sTagName2Search+"\ni:"+i);
            return null;
        }
        i++;
    }
    dbg(iERR, "getparentelement\n(2)!ele:"+ele+"\nsTagName2Search:"+sTagName2Search+"\ni:"+i);
    return null;
}
function getnextele(ele, bDown)
{
    if((ele != null) && !bDown)
    {
        while (ele.previousSibling && ele.previousSibling.nodeType != 1)
               ele = ele.previousSibling;
        return ele.previousSibling;
    }
    if((ele != null) && bDown)
    {
        while (ele.nextSibling && ele.nextSibling.nodeType != 1)
               ele = ele.nextSibling;
        return ele.nextSibling;
    }
    dbg(iERR, "getnextele\n!ele:"+ele+"\ndown:"+bDown+"\ni:"+i);
    return null;
}
function checkmoving()
{
    setTimeout("checkmoving2();",200);
}
function checkmoving2()
{
    var oAjaxCall = new ajaxcall(true/*down*/, "2"/*here !important*/, ""/*here !important*/, getelement("oberesbild"));
    jsMoveDoc(oAjaxCall);
}
function ismovable(ele, bDown)
{
    var otr = getparentelement(ele, "tr");
    if(!otr)
    {
        dbg(iERR, "ismovable\nrF2");
        return false;
    }
    var otr2swap = getnextele(otr, bDown);
    if(!otr2swap)
    {
        if(bDown)   alert("Das letzte Element kann nicht weiter nach unten verschoben werden...!");
        else        alert("Das erste Element kann nicht weiter nach oben verschoben werden...!");
        return false;
    }
    return true;
}

