reorder.js 1.47 KB
function getSibling(elm, which) {
    var ret = elm[which + 'Sibling'];
    
    while(!isUndefinedOrNull(ret) && ret.nodeName == '#text') ret = ret[which + 'Sibling'];
    if(isUndefinedOrNull(ret)) return false;
    return ret;
}

function swapItems(first, second) {
    // ALWAYS in order
    toggleElementClass('odd', first, second);
    toggleElementClass('even', first, second);
    first.parentNode.insertBefore(first, second);
    var pos = first.reorderField.value;
    first.reorderField.value = second.reorderField.value;
    second.reorderField.value = pos;

}

function moveUp() {
    var otherItem = getSibling(this, 'previous');
    if(otherItem) {
        swapItems(this, otherItem);
    }
    return false;
}
 
 
function moveDown() {
    var otherItem = getSibling(this, 'next');
    if(otherItem) {    
        swapItems(otherItem, this);
    }
    return false;
}
 
 
function hookReorderDisplay() {
    var container = $('reorder-container');
    if(isUndefinedOrNull(container)) return;
    forEach(getElementsByTagAndClassName('*', 'reorder-item', container), function(item) {
        var up = getElementsByTagAndClassName('*', 'reorder-up', item)[0],
            down = getElementsByTagAndClassName('*', 'reorder-down', item)[0];
            
        up.onclick = bind(moveUp, item);
        down.onclick = bind(moveDown, item);
        item.reorderField = getElementsByTagAndClassName('input', 'reorder-field', item)[0];
    });
}
        
        
 
addLoadEvent(hookReorderDisplay);