/*
 CVS: $Author: daniel $
      $Revision: 1.3 $
      $Date: 2008/04/22 10:15:47 $
------------------------------------------------------------------------------*/
var d = document;
function gbi( str ) {
    return d.getElementById(str);
}
function isNull( var2t ) {
    return null === var2t;
}
function dumpGOO(){
    var op = '[ ';
    for( var i=0; i<groupObjectOrders.length; i++ ){
        op+= '{'+groupObjectOrders[i].reference+'}('+groupObjectOrders[i].order+') ';
    }
    op+=' ]';
    alert(op);
}
/*----------------------------------------------------------------------------*/
function objectOrderDecrement( objRef ) {
    var objOrd = getObjOrderFromRef( objRef );
    if( objOrd == 1 ) {
        alert( 'This object is already first' );
    } else {
        var targOrd = parseInt( objOrd ) - 1;
        _setObjectOrder( objRef,targOrd,true );
    }
}
function objectOrderIncrement( objRef ) {
    var objOrd  = getObjOrderFromRef( objRef );
    var targOrd = parseInt( objOrd ) + 1;
    _setObjectOrder( objRef,targOrd,true );
}
function changeObjectOrder( objRef ) {
    var targOrd = parseInt( gbi('order_target_'+objRef).value );
    if( targOrd ) {
        _setObjectOrder( objRef,targOrd,false );
    } else {
        alert( 'The order target you entered was invalid' );
    }
}
/*----------------------------------------------------------------------------*/
function _setObjectOrder( objRef,targOrd,swap ) {

 // get object properties
    var objOrd  = getObjOrderFromRef(   objRef  );
    var objIdx  = getObjIndexFromRef(   objRef  );
    var targRef = getObjRefFromOrder(   targOrd );
    var targIdx = getObjIndexFromOrder( targOrd );

    if( isNull( targRef ) ) {

     // set new object order in tacking array
        setObjOrdFromRef( objRef, targOrd );

     // show change to user
        gbi('object_ord_'+objRef ).innerHTML = targOrd;

    } else {
        if( swap ) {

         // alert('swap '+objRef+' with '+targRef);

         // get html elements and clones
            var originObj   = gbi('object_tr_'+objRef);
            var originClone = originObj.cloneNode(true);
            var parentObj   = originObj.parentNode;
            var targetObj   = gbi('object_tr_'+targRef);
            var targetClone = targetObj.cloneNode(true);

         // swap html elements
            parentObj.replaceChild( targetClone,originObj );
            parentObj.replaceChild( originClone,targetObj );
            gbi('object_ord_'+objRef ).innerHTML = targOrd;
            gbi('object_ord_'+targRef).innerHTML = objOrd;

         // swap objects in tracking array
            setObjOrdFromRef(   objRef,  targOrd );
            setObjOrdFromRef(   targRef, objOrd  );
            swapObjIndexByRef(  objRef,  targRef );

        } else {

            alert('shuffle required');

        }
    }

}
/*----------------------------------------------------------------------------*/
function getObjOrderFromRef( objRef ) {

    var arySize = groupObjectOrders.length;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].reference == objRef ) {
            return groupObjectOrders[i].order;
        }
    }
    return null;

}
function getObjIndexFromRef( objRef ) {

    var arySize = groupObjectOrders.length;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].reference == objRef ) {
            return i;
        }
    }
    return null;

}
function getObjRefFromIndex( objIdx ) {

    return groupObjectOrders[objIdx].reference;

}
function getObjOrderFromIndex( objIdx ) {

    return groupObjectOrders[objIdx].order;

}
function getObjIndexFromOrder( objOrd ) {

    var arySize = groupObjectOrders.length;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].order == objOrd ) {
            return i;
        }
    }
    return null;

}
function getObjRefFromOrder( objOrd ) {

    var arySize = groupObjectOrders.length;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].order == objOrd ) {
            return groupObjectOrders[i].reference;
        }
    }
    return null;

}
/*----------------------------------------------------------------------------*/
function setObjOrdFromRef( objRef, newVal ) {

    var arySize = groupObjectOrders.length;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].reference == objRef ) {
            groupObjectOrders[i].order = newVal;
        }
    }

}
function setObjectIndex( objIdx ) {alert(objIdx);

 // get object order
    var objOrd = parseInt( groupObjectOrders[objIdx].order );

 // determin required movement direction
    var mvDir = 0;
    var prevIdx = parseInt( objIdx ) - 1;
    var nextIdx = parseInt( objIdx ) + 1;
    if( objIdx > 1 ) {
        var prevOrd = parseInt( groupObjectOrders[prevIdx].order );
        if( prevOrd > objOrd ) { mvDir = -1; }
    }
    if( objIdx < groupObjectOrders.length ) {
        var nextOrd = parseInt( groupObjectOrders[nextIdx].order );
        if( nextOrd < objOrd ) { mvDir = 1; }
    }

    if( mvDir < 0 ) {

     // decrement object index
        

    } else if( mvDir > 0 ) {

     // increment object index
        

    } else {

     // object already correctly indexed
        return objIdx;

    }

}
/*----------------------------------------------------------------------------*/
function swapObjIndexByIndex( objIdx,targIdx ) {

    var originObj = groupObjectOrders[objIdx];
    var targetObj = groupObjectOrders[targIdx];
    groupObjectOrders[targetIdx] = originObj;
    groupObjectOrders[originIdx] = targetObj;

}
function swapObjIndexByRef( objRef,targRef ) {

    var arySize = groupObjectOrders.length;
    var originObj; var originIdx;
    var targetObj; var targetIdx;
    for( var i=0; i<arySize; i++ ) {
        if( groupObjectOrders[i].reference == objRef ) {
            originIdx = i;
            originObj = groupObjectOrders[i];
        }
        if( groupObjectOrders[i].reference == targRef ) {
            targetIdx = i;
            targetObj = groupObjectOrders[i];
        }
    }
    groupObjectOrders[targetIdx] = originObj;
    groupObjectOrders[originIdx] = targetObj;

}
/*----------------------------------------------------------------------------*/
function saveObjectOrder() {

    var frm = gbi('save_submit_form');

    for( var i=0; i<groupObjectOrders.length; i++ ) {

        var newOrdInpt   = d.createElement('input');
        newOrdInpt.type  = 'hidden';
        newOrdInpt.name  = 'new_order_for_'+groupObjectOrders[i].reference;
        newOrdInpt.value = groupObjectOrders[i].order;
        frm.appendChild( newOrdInpt );

    }

    frm.submit();

}
/*----------------------------------------------------------------------------*/
