rem: handle:      handle }; 
add: handle:      options.handle };  
context:   create: function(element) {    var element = $(element);    var options = Object.extend({       element:     element,      tag:         'li',       // assumes li children, override with tag: 'tagname'      overlap:     'vertical', // one of 'vertical', 'horizontal'      constraint:  'vertical', // one of 'vertical', 'horizontal', false      containment: element,    // also takes array of elements (or id's); or false      handle:      false,      // or a CSS class      only:        false,      hoverclass:  null,      onChange:    function() {},      onUpdate:    function() {}    }, arguments[1] || {});        // clear any old sortable with same element    this.destroy(element);        // build options for the draggables    var options_for_draggable = {      revert:      true,      constraint:  options.constraint,      handle:      handle };    if(options.starteffect)      options_for_draggable.starteffect = options.starteffect;    if(options.reverteffect)      options_for_draggable.reverteffect = options.reverteffect;    if(options.endeffect)      options_for_draggable.endeffect = options.endeffect;    if(options.zindex)      options_for_draggable.zindex = options.zindex;        // build options for the droppables      var options_for_droppable = {      overlap:     options.overlap,      containment: options.containment,      hoverclass:  options.hoverclass,      onHover: function(element, dropon, overlap) {         if(overlap>0.5) {          if(dropon.previousSibling != element) {            var oldParentNode = element.parentNode;            element.style.visibility = "hidden"; // fix gecko rendering            dropon.parentNode.insertBefore(element, dropon);            if(dropon.parentNode!=oldParentNode && oldParentNode.sortable)               oldParentNode.sortable.onChange(element);            if(dropon.parentNode.sortable)              dropon.parentNode.sortable.onChange(element);          }        } else {                          var nextElement = dropon.nextSibling || null;          if(nextElement != element) {            var oldParentNode = element.parentNode;            element.style.visibility = "hidden"; // fix gecko rendering            dropon.parentNode.insertBefore(element, nextElement);            if(dropon.parentNode!=oldParentNode && oldParentNode.sortable)               oldParentNode.sortable.onChange(element);            if(dropon.parentNode.sortable)              dropon.parentNode.sortable.onChange(element);          }        }      }    }    // fix for gecko engine    Element.cleanWhitespace(element);         options.draggables = [];    options.droppables = [];        // make it so     var elements = element.childNodes;    for (var i = 0; i < elements.length; i++)       if(elements[i].tagName && elements[i].tagName==options.tag.toUpperCase() &&        (!options.only || (Element.Class.has(elements[i], options.only)))) {                // handles are per-draggable        var handle = options.handle ?           Element.Class.childrenWith(elements[i], options.handle)[0] : elements[i];                options.draggables.push(new Draggable(elements[i], Object.extend(options_for_draggable, { handle: handle })));                Droppables.add(elements[i], options_for_droppable);        options.droppables.push(elements[i]);              }          // keep reference    this.sortables.push(options);        // for onupdate    Draggables.addObserver(new SortableObserver(element, options.onUpdate));  },
meta: 3104	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/3104/3f913f897829fb026ef98df2d57f8da94ee5339d/dragdrop.js/clean/public/javascripts/dragdrop.js