From 3e907035ef63c0f24ce282ca0c66c88c11bbb013 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@biblibre.com>
Date: Wed, 3 Jul 2013 10:52:21 +0200
Subject: [PATCH] Bug 10533: move JavaScript functions for basket groups to a
 separate file

This patch moves JavaScript functions used for managing basket groups
to a file.  This has the effect of putting the last (active) use of
the YUI JavaScript library by the staff interface in one file:

  koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js

Test plan:
- Try all actions for basketgroup ( drag/drop, add, delete, close, print,
reopen, edit, export as csv).
- Check that there is no regression on others acquisition pages:
  * acqui/neworderempty.tt
  * acqui/uncertainprice.tt
  * acqui/addorderiso2709.tt
  * acqui/basketheader.tt
  * admin/aqbudgets.tt
  * admin/aqcontract.tt
  * admin/aqbudgetperiods.tt
  * admin/aqplan.tt
  * suggestion/suggestion.tt

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
---
 koha-tmpl/intranet-tmpl/prog/en/js/acq.js          |  458 --------------------
 koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js  |  327 ++++++++++++++
 .../prog/en/modules/acqui/basketgroup.tt           |    2 +-
 3 files changed, 328 insertions(+), 459 deletions(-)
 create mode 100644 koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js

diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
index 3fde6f1..387e9a2 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
@@ -49,465 +49,7 @@ function isNum(v,maybenull) {
     return true;
 }
 
-//=======================================================================
-
-//=======================================================================
-// Functions for drag-and-drop functionality
-
-if( typeof(YAHOO) === "object"){
-    (function() {
-
-    var Dom = YAHOO.util.Dom;
-    var Event = YAHOO.util.Event;
-    var DDM = YAHOO.util.DragDropMgr;
-
-    DDApp = {
-        init: function() {
-        var uls = document.getElementsByTagName('ul');
-        var i,j;
-        var ddtarget;
-        for (i=0; i<uls.length;i=i+1) {
-            if (uls[i].className == "draglist" || uls[i].className == "draglist_alt") {
-                ddtarget = YAHOO.util.DragDropMgr.getDDById(uls[i].id);
-    // The yahoo drag and drop is written (broken or not) in such a way, that if an element is subscribed as a target multiple times,
-    // it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group
-                if( ! ddtarget ) {
-                    new YAHOO.util.DDTarget(uls[i].id);
-                }
-                var children = uls[i].getElementsByTagName('li');
-                for( j=0; j<children.length; j=j+1) {
-    // The yahoo drag and drop is (broken or not) in such a way, that if an element is subscribed as a target multiple times,
-    // it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group
-                    ddtarget = YAHOO.util.DragDropMgr.getDDById(children[j].id);
-                    if( ! ddtarget ) {
-                        new DDList(children[j].id);
-                    }
-                }
-            }
-        }
-        }
-    };
-
-
-    // drag and drop implementation
-
-    DDList = function(id, sGroup, config) {
-
-        DDList.superclass.constructor.call(this, id, sGroup, config);
-
-        this.logger = this.logger || YAHOO;
-        var el = this.getDragEl();
-        Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent
-
-        this.goingUp = false;
-        this.lastY = 0;
-    };
-
-    YAHOO.extend(DDList, YAHOO.util.DDProxy, {
-
-        startDrag: function(x, y) {
-            this.logger.log(this.id + " startDrag");
-
-            // make the proxy look like the source element
-            var dragEl = this.getDragEl();
-            var clickEl = this.getEl();
-            Dom.setStyle(clickEl, "visibility", "hidden");
-
-            dragEl.innerHTML = clickEl.innerHTML;
-
-            Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
-            Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
-            Dom.setStyle(dragEl, "border", "2px solid gray");
-        },
-
-        endDrag: function(e) {
-
-            var srcEl = this.getEl();
-            var proxy = this.getDragEl();
-
-            // Show the proxy element and animate it to the src element's location
-            Dom.setStyle(proxy, "visibility", "");
-            var a = new YAHOO.util.Motion(
-                proxy, {
-                    points: {
-                        to: Dom.getXY(srcEl)
-                    }
-                },
-                0.2,
-                YAHOO.util.Easing.easeOut
-            )
-            var proxyid = proxy.id;
-            var thisid = this.id;
-
-            // Hide the proxy and show the source element when finished with the animation
-            a.onComplete.subscribe(function() {
-                    Dom.setStyle(proxyid, "visibility", "hidden");
-                    Dom.setStyle(thisid, "visibility", "");
-                });
-            a.animate();
-    // if we are in basketgrouping page, when finished moving, edit the basket's info to reflect new status
-            if(typeof(basketgroups) != 'undefined') {
-                a.onComplete.subscribe(function() {
-                    var reg = new RegExp("[-]+", "g");
-    // add a changed input to each moved basket, so we know which baskets to modify,
-    // and so we don't need to modify each and every basket and basketgroup each time the page is loaded
-    // FIXME: we shouldn't use getElementsByTagName, it's not explicit enough :-(
-                    srcEl.getElementsByTagName('input')[1].value = "1";
-                    if ( srcEl.parentNode.parentNode.className == "workarea" ) {
-                        var dstbgroupid = srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-2].name.split(reg)[1];
-                        srcEl.className="grouped";
-                        srcEl.getElementsByTagName('input')[0].value = dstbgroupid;
-    //FIXME: again, we shouldn't be using getElementsByTagName!!
-                        srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-1].value = 1;
-                    }
-                    else if ( srcEl.parentNode.parentNode.className == "workarea_alt" ){
-                            srcEl.className="ungrouped";
-                            srcEl.getElementsByTagName('input')[0].value = "0";
-                    }
-                });
-            }
-        },
-
-        onDragDrop: function(e, id) {
-
-            // If there is one drop interaction, the li was dropped either on the list,
-            // or it was dropped on the current location of the source element.
-            if (DDM.interactionInfo.drop.length === 1) {
-
-                // The position of the cursor at the time of the drop (YAHOO.util.Point)
-                var pt = DDM.interactionInfo.point;
-
-                // The region occupied by the source element at the time of the drop
-                var region = DDM.interactionInfo.sourceRegion;
-
-                // Check to see if we are over the source element's location.  We will
-                // append to the bottom of the list once we are sure it was a drop in
-                // the negative space (the area of the list without any list items)
-                if (!region.intersect(pt)) {
-                    var destEl = Dom.get(id);
-                    var destDD = DDM.getDDById(id);
-                    destEl.appendChild(this.getEl());
-                    destDD.isEmpty = false;
-                    DDM.refreshCache();
-                }
-            }
-        },
-
-        onDrag: function(e) {
-
-            // Keep track of the direction of the drag for use during onDragOver
-            var y = Event.getPageY(e);
-
-            if (y < this.lastY) {
-                this.goingUp = true;
-            } else if (y > this.lastY) {
-                this.goingUp = false;
-            }
-            this.lastY = y;
-        },
-
-        onDragOver: function(e, id) {
-
-            var srcEl = this.getEl();
-            var destEl = Dom.get(id);
-
-            // We are only concerned with list items, we ignore the dragover
-            // notifications for the list.
-            if (destEl.nodeName.toLowerCase() == "li") {
-                var orig_p = srcEl.parentNode;
-                var p = destEl.parentNode;
-
-                if (this.goingUp) {
-                    p.insertBefore(srcEl, destEl); // insert above
-                } else {
-                    p.insertBefore(srcEl, destEl.nextSibling); // insert below
-                }
-
-                DDM.refreshCache();
-            }
-        }
-    });
-    })();
-}
-
-
-
-//creates new group, parameter is the group's name
-function newGroup(event, name) {
-    if (name == ''){
-        return 0;
-    }
-    if (!enterpressed(event) && event != "button"){
-        return false;
-    }
-    var pardiv = document.getElementById('groups');
-    var newdiv = document.createElement('div');
-    var newh3 = document.createElement('h3');
-    var newul = document.createElement('ul');
-    var newclose = document.createElement('a');
-    var newrename = document.createElement('a');
-    var newbasketgroupname = document.createElement('input');
-    var nbgclosed = document.createElement('input');
-    var newp = document.createElement('p');
-    var reg=new RegExp("[-]+", "g");
-    var i = 0;
-    var maxid = 0;
-    while( i < pardiv.getElementsByTagName('input').length ){
-        if (! isNaN(parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1])) && parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]) > maxid){
-            maxid = parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]);
-        }
-        ++i;
-    }
-// var bgid = parseInt(pardiv.getElementsByTagName('input')[pardiv.getElementsByTagName('input').length-2].name.split(reg)[1]) + 1;
-    var bgid = maxid + 1;
-    var newchanged = document.createElement('input');
-
-    newul.id="bg-"+bgid;
-    newul.className='draglist';
-
-    newh3.innerHTML=name;
-//    newh3.style.display="inline";
-
-    newclose.innerHTML="close";
-    newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');";
-
-    newrename.href="javascript:" + "renameinit("+bgid+");";
-    newrename.innerHTML="rename";
-
-//    newp.style.display="inline";
-    newp.innerHTML=" [ ";
-    newp.appendChild(newrename);
-    newp.innerHTML+=" / ";
-    newp.appendChild(newclose);
-    newp.innerHTML+=" ]";
-
-    newbasketgroupname.type="hidden";
-    newbasketgroupname.name="basketgroup-" + bgid + "-name";
-    newbasketgroupname.id = "basketgroup-" + bgid + "-name";
-    newbasketgroupname.value=name;
-
-    nbgclosed.type="hidden";
-    nbgclosed.name="basketgroup-" + bgid + "-closed";
-    nbgclosed.value="0";
-    nbgclosed.id=nbgclosed.name;
-
-    newchanged.type="hidden";
-    newchanged.id="basketgroup-"+bgid+"-changed";
-    newchanged.name=newchanged.id;
-    newchanged.value="1";
-
-    newdiv.style.backgroundColor='red';
-    newdiv.appendChild(newh3);
-    newdiv.appendChild(newp);
-    newdiv.appendChild(newul);
-    newdiv.appendChild(newbasketgroupname);
-    newdiv.appendChild(nbgclosed);
-    newdiv.appendChild(newchanged);
-    newdiv.className='workarea';
-    pardiv.appendChild(newdiv);
-
-    YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true);
-}
-
-//this traps enters in input fields
-function enterpressed(event){
-    var keycode;
-    if (window.event) keycode = window.event.keyCode;
-    else if (event) keycode = event.which;
-    else return false;
-
-    if (keycode == 13)
-    {
-        return true;
-    }
-    else return false;
-}
-
 
-
-
-
-//Closes a basketgroup
-function closebasketgroup(bgid) {
-    var answer = confirm(MSG_CONFIRM_CLOSE_BASKETGROUP);
-    if(! answer){
-        return;
-    }
-    ulid = 'bg-'+bgid;
-    var i = 0;
-    tagname='basketgroup-'+bgid+'-closed';
-    var ddtarget;
-    var closeinput = document.getElementById(tagname);
-    closeinput.value = 1;
-    var changed = document.getElementById("basketgroup-"+bgid+"-changed");
-    changed.value=1;
-
-    var div = document.getElementById(tagname).parentNode;
-    var stufftoremove = div.getElementsByTagName('p')[0];
-    var ul = document.getElementById(ulid);
-    var lis = ul.getElementsByTagName('li');
-    if (lis.length == 0 ) {
-        alert(MSG_CLOSE_EMPTY_BASKET);
-        return;
-    }
-    var cantprint = document.createElement('p');
-
-    div.className = "closed";
-    ul.className="closed";
-
-    for(i=0; i<lis.length; ++i) {
-        ddtarget = YAHOO.util.DragDropMgr.getDDById(lis[i].id);
-        ddtarget.unreg();
-    }
-    ddtarget = YAHOO.util.DragDropMgr.getDDById(ul.id);
-    ddtarget.unreg();
-    div.removeChild(stufftoremove);
-// the print button is disabled because the page's content might (or is probably) not in sync with what the database contains
-    cantprint.innerHTML = MSG_SAVE_BEFORE_PRINTING;
-    cantprint.id = 'cantprint-' + bgid;
-    var unclosegroup = document.createElement('a');
-    unclosegroup.href='javascript:unclosegroup('+bgid+');';
-    unclosegroup.innerHTML= MSG_REOPEN_BASKETGROUP;
-    unclosegroup.id = 'unclose-' + bgid;
-
-    div.appendChild(cantprint);
-    div.appendChild(unclosegroup);
-}
-
-function closeandprint(bg){
-	if(document.location = '/cgi-bin/koha/acqui/basketgroup.pl?op=closeandprint&amp;basketgroupid=' + bg ){
-		setTimeout("window.location.reload();",3000);
-	}else{
-        alert(MSG_FILE_DOWNLOAD_ERROR);
-	}
-}
-
-//function that lets the user unclose a basketgroup as long as he hasn't submitted the changes to the page.
-function unclosegroup(bgid){
-    var div = document.getElementById('basketgroup-'+bgid+'-closed').parentNode;
-    var divtodel = document.getElementById('unclose-' + bgid);
-    if (divtodel){
-        div.removeChild(divtodel);
-    }
-    divtodel = document.getElementById('unclose-' + bgid);
-    if (divtodel){
-        div.removeChild(divtodel);
-    }
-    var closeinput = document.getElementById('basketgroup-'+bgid+'-closed');
-    var ul = document.getElementById('bg-'+bgid);
-
-    var newclose = document.createElement('a');
-    var newrename = document.createElement('a');
-    var newp = document.createElement('p');
-
-    newclose.innerHTML="close";
-    newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');";
-
-    newrename.href="javascript:" + "renameinit("+bgid+");";
-    newrename.innerHTML="rename";
-    
-    var todel = div.getElementsByTagName('p')[0];
-    div.removeChild(todel);
-    
-    var changed = document.getElementById("basketgroup-"+bgid+"-changed");
-    changed.value=1;
-
-    newp.innerHTML=" [ ";
-    newp.appendChild(newrename);
-    newp.innerHTML+=" / ";
-    newp.appendChild(newclose);
-    newp.innerHTML+=" ]";
-
-    div.insertBefore(newp, ul);
-    closeinput.value="0";
-    div.className = "workarea";
-    ul.className="draglist";
-
-//rescan draglists, we have a new target (again :-)
-    YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true);
-}
-
-//a function to filter basketgroups using a regex (javascript regex)
-function filterGroups(event, searchstring ){
-    if (!enterpressed(event) && event != "button"){
-        return false;
-    }
-    var reg = new RegExp(searchstring, "g");
-    var Dom = YAHOO.util.Dom;
-    var divs = Dom.getElementsByClassName("workarea", "div");
-
-    for (var i = 0; i < divs.length; ++i){
-        if (! reg.exec(divs[i].innerHTML)){
-            divs[i].style.display='none';
-        }
-        else {
-            divs[i].style.display='';
-        }
-    }
-    divs = Dom.getElementsByClassName("closed", "div");
-    for (var i = 0; i < divs.length; ++i){
-        if (! reg.exec(divs[i].innerHTML)){
-            divs[i].style.display='none';
-        }
-        else {
-            divs[i].style.display='';
-        }
-    }
-}
-
-//function to hide (or show) closed baskets (if show is true, it shows all the closed baskets)
-function showhideclosegroups(show){
-    var Dom = YAHOO.util.Dom;
-    var divs = Dom.getElementsByClassName("closed", "div");
-    var display;
-    if (show){
-        display = '';
-    }
-    else display = 'none';
-    for(var i = 0; i < divs.length; ++i){
-        divs[i].style.display=display;
-    }
-}
-
-function renameinit(bgid){
-    var ul = document.getElementById('bg-'+bgid);
-    var div = ul.parentNode;
-    var nameelm = div.getElementsByTagName('h3')[0];
-    var p = div.getElementsByTagName('p')[0];
-
-
-    var nameinput = document.createElement("input");
-    nameinput.type = "text";
-    nameinput.id="rename-"+bgid;
-    nameinput.value = nameelm.innerHTML;
-    nameinput.onkeypress = function(e){rename(e, bgid, document.getElementById('rename-'+bgid).value); };
-//    nameinput.setAttribute('onkeypress', 'rename(event, bgid, document.getElementById(rename-'+bgid+').value);');
-
-    div.removeChild(nameelm);
-    div.insertBefore(nameinput, p);
-}
-
-function rename(event, bgid, name){
-    if (!enterpressed(event)){
-        return false;
-    }
-    var ul = document.getElementById('bg-'+bgid);
-    var div = ul.parentNode;
-    var p = div.getElementsByTagName('p')[0];
-    var nameinput = document.getElementById("rename-"+bgid);
-    var changedinput = document.getElementById("basketgroup-"+bgid+"-changed");
-    var newh3 = document.createElement("h3");
-    var hiddenname = document.getElementById("basketgroup-"+bgid+"-name");
-
-    div.removeChild(nameinput);
-
-    newh3.innerHTML=name;
-    hiddenname.value=name;
-    changedinput.value = 1;
-    div.insertBefore(newh3, p);
-}
-
-//=======================================================================
 //a logging function (a bit buggy, might open millions of log pages when initializing, but works fine after...
 function log(message) {
     if (!log.window_ || log.window_.closed) {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js b/koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js
new file mode 100644
index 0000000..4d07836
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/basketgroup.js
@@ -0,0 +1,327 @@
+// Functions for drag-and-drop functionality
+
+var Dom = YAHOO.util.Dom;
+var Event = YAHOO.util.Event;
+var DDM = YAHOO.util.DragDropMgr;
+
+DDApp = {
+    init: function() {
+    var uls = document.getElementsByTagName('ul');
+    var i,j;
+    var ddtarget;
+    for (i=0; i<uls.length;i=i+1) {
+        if (uls[i].className == "draglist" || uls[i].className == "draglist_alt") {
+            ddtarget = YAHOO.util.DragDropMgr.getDDById(uls[i].id);
+// The yahoo drag and drop is written (broken or not) in such a way, that if an element is subscribed as a target multiple times,
+// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group
+            if( ! ddtarget ) {
+                new YAHOO.util.DDTarget(uls[i].id);
+            }
+            var children = uls[i].getElementsByTagName('li');
+            for( j=0; j<children.length; j=j+1) {
+// The yahoo drag and drop is (broken or not) in such a way, that if an element is subscribed as a target multiple times,
+// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group
+                ddtarget = YAHOO.util.DragDropMgr.getDDById(children[j].id);
+                if( ! ddtarget ) {
+                    new DDList(children[j].id);
+                }
+            }
+        }
+    }
+    }
+};
+
+
+// drag and drop implementation
+
+DDList = function(id, sGroup, config) {
+
+    DDList.superclass.constructor.call(this, id, sGroup, config);
+
+    this.logger = this.logger || YAHOO;
+    var el = this.getDragEl();
+    Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent
+
+    this.goingUp = false;
+    this.lastY = 0;
+};
+
+YAHOO.extend(DDList, YAHOO.util.DDProxy, {
+
+    startDrag: function(x, y) {
+        this.logger.log(this.id + " startDrag");
+
+        // make the proxy look like the source element
+        var dragEl = this.getDragEl();
+        var clickEl = this.getEl();
+        Dom.setStyle(clickEl, "visibility", "hidden");
+
+        dragEl.innerHTML = clickEl.innerHTML;
+
+        Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
+        Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
+        Dom.setStyle(dragEl, "border", "2px solid gray");
+    },
+
+    endDrag: function(e) {
+
+        var srcEl = this.getEl();
+        var proxy = this.getDragEl();
+
+        // Show the proxy element and animate it to the src element's location
+        Dom.setStyle(proxy, "visibility", "");
+        var a = new YAHOO.util.Motion(
+            proxy, {
+                points: {
+                    to: Dom.getXY(srcEl)
+                }
+            },
+            0.2,
+            YAHOO.util.Easing.easeOut
+        )
+        var proxyid = proxy.id;
+        var thisid = this.id;
+
+        // Hide the proxy and show the source element when finished with the animation
+        a.onComplete.subscribe(function() {
+                Dom.setStyle(proxyid, "visibility", "hidden");
+                Dom.setStyle(thisid, "visibility", "");
+            });
+        a.animate();
+// if we are in basketgrouping page, when finished moving, edit the basket's info to reflect new status
+        if(typeof(basketgroups) != 'undefined') {
+            a.onComplete.subscribe(function() {
+                var reg = new RegExp("[-]+", "g");
+// add a changed input to each moved basket, so we know which baskets to modify,
+// and so we don't need to modify each and every basket and basketgroup each time the page is loaded
+// FIXME: we shouldn't use getElementsByTagName, it's not explicit enough :-(
+                srcEl.getElementsByTagName('input')[1].value = "1";
+                if ( srcEl.parentNode.parentNode.className == "workarea" ) {
+                    var dstbgroupid = srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-2].name.split(reg)[1];
+                    srcEl.className="grouped";
+                    srcEl.getElementsByTagName('input')[0].value = dstbgroupid;
+//FIXME: again, we shouldn't be using getElementsByTagName!!
+                    srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-1].value = 1;
+                }
+                else if ( srcEl.parentNode.parentNode.className == "workarea_alt" ){
+                        srcEl.className="ungrouped";
+                        srcEl.getElementsByTagName('input')[0].value = "0";
+                }
+            });
+        }
+    },
+
+    onDragDrop: function(e, id) {
+
+        // If there is one drop interaction, the li was dropped either on the list,
+        // or it was dropped on the current location of the source element.
+        if (DDM.interactionInfo.drop.length === 1) {
+
+            // The position of the cursor at the time of the drop (YAHOO.util.Point)
+            var pt = DDM.interactionInfo.point;
+
+            // The region occupied by the source element at the time of the drop
+            var region = DDM.interactionInfo.sourceRegion;
+
+            // Check to see if we are over the source element's location.  We will
+            // append to the bottom of the list once we are sure it was a drop in
+            // the negative space (the area of the list without any list items)
+            if (!region.intersect(pt)) {
+                var destEl = Dom.get(id);
+                var destDD = DDM.getDDById(id);
+                destEl.appendChild(this.getEl());
+                destDD.isEmpty = false;
+                DDM.refreshCache();
+            }
+        }
+    },
+
+    onDrag: function(e) {
+
+        // Keep track of the direction of the drag for use during onDragOver
+        var y = Event.getPageY(e);
+
+        if (y < this.lastY) {
+            this.goingUp = true;
+        } else if (y > this.lastY) {
+            this.goingUp = false;
+        }
+        this.lastY = y;
+    },
+
+    onDragOver: function(e, id) {
+
+        var srcEl = this.getEl();
+        var destEl = Dom.get(id);
+
+        // We are only concerned with list items, we ignore the dragover
+        // notifications for the list.
+        if (destEl.nodeName.toLowerCase() == "li") {
+            var orig_p = srcEl.parentNode;
+            var p = destEl.parentNode;
+
+            if (this.goingUp) {
+                p.insertBefore(srcEl, destEl); // insert above
+            } else {
+                p.insertBefore(srcEl, destEl.nextSibling); // insert below
+            }
+
+            DDM.refreshCache();
+        }
+    }
+});
+
+//this traps enters in input fields
+function enterpressed(event){
+    var keycode;
+    if (window.event) keycode = window.event.keyCode;
+    else if (event) keycode = event.which;
+    else return false;
+
+    if (keycode == 13)
+    {
+        return true;
+    }
+    else return false;
+}
+
+
+//Closes a basketgroup
+function closebasketgroup(bgid) {
+    var answer=confirm(MSG_CONFIRM_CLOSE_BASKETGROUP);
+    if(! answer){
+        return;
+    }
+    ulid = 'bg-'+bgid;
+    var i = 0;
+    tagname='basketgroup-'+bgid+'-closed';
+    var ddtarget;
+    var closeinput = document.getElementById(tagname);
+    closeinput.value = 1;
+    var changed = document.getElementById("basketgroup-"+bgid+"-changed");
+    changed.value=1;
+
+    var div = document.getElementById(tagname).parentNode;
+    var stufftoremove = div.getElementsByTagName('p')[0];
+    var ul = document.getElementById(ulid);
+    var lis = ul.getElementsByTagName('li');
+    if (lis.length == 0 ) {
+        alert(MSG_CLOSE_EMPTY_BASKET);
+        return;
+    }
+    var cantprint = document.createElement('p');
+
+    div.className = "closed";
+    ul.className="closed";
+
+    for(i=0; i<lis.length; ++i) {
+        ddtarget = YAHOO.util.DragDropMgr.getDDById(lis[i].id);
+        ddtarget.unreg();
+    }
+    ddtarget = YAHOO.util.DragDropMgr.getDDById(ul.id);
+    ddtarget.unreg();
+    div.removeChild(stufftoremove);
+// the print button is disabled because the page's content might (or is probably) not in sync with what the database contains
+    cantprint.innerHTML = MSG_SAVE_BEFORE_PRINTING;
+    cantprint.id = 'cantprint-' + bgid;
+    var unclosegroup = document.createElement('a');
+    unclosegroup.href='javascript:unclosegroup('+bgid+');';
+    unclosegroup.innerHTML = MSG_REOPEN_BASKETGROUP;
+    unclosegroup.id = 'unclose-' + bgid;
+
+    div.appendChild(cantprint);
+    div.appendChild(unclosegroup);
+}
+
+function closeandprint(bg){
+    if(document.location = '/cgi-bin/koha/acqui/basketgroup.pl?op=closeandprint&amp;basketgroupid=' + bg ){
+        setTimeout("window.location.reload();",3000);
+    }else{
+        alert(MSG_FILE_DOWNLOAD_ERROR);
+    }
+}
+
+//function that lets the user unclose a basketgroup as long as he hasn't submitted the changes to the page.
+function unclosegroup(bgid){
+    var div = document.getElementById('basketgroup-'+bgid+'-closed').parentNode;
+    var divtodel = document.getElementById('unclose-' + bgid);
+    if (divtodel){
+        div.removeChild(divtodel);
+    }
+    divtodel = document.getElementById('unclose-' + bgid);
+    if (divtodel){
+        div.removeChild(divtodel);
+    }
+    var closeinput = document.getElementById('basketgroup-'+bgid+'-closed');
+    var ul = document.getElementById('bg-'+bgid);
+
+    var newclose = document.createElement('a');
+    var newrename = document.createElement('a');
+    var newp = document.createElement('p');
+
+    newclose.innerHTML="close";
+    newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');";
+
+    newrename.href="javascript:" + "renameinit("+bgid+");";
+    newrename.innerHTML="rename";
+
+    var todel = div.getElementsByTagName('p')[0];
+    div.removeChild(todel);
+
+    var changed = document.getElementById("basketgroup-"+bgid+"-changed");
+    changed.value=1;
+
+    newp.innerHTML=" [ ";
+    newp.appendChild(newrename);
+    newp.innerHTML+=" / ";
+    newp.appendChild(newclose);
+    newp.innerHTML+=" ]";
+
+    div.insertBefore(newp, ul);
+    closeinput.value="0";
+    div.className = "workarea";
+    ul.className="draglist";
+
+//rescan draglists, we have a new target (again :-)
+    YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true);
+}
+
+
+
+function renameinit(bgid){
+    var ul = document.getElementById('bg-'+bgid);
+    var div = ul.parentNode;
+    var nameelm = div.getElementsByTagName('h3')[0];
+    var p = div.getElementsByTagName('p')[0];
+
+
+    var nameinput = document.createElement("input");
+    nameinput.type = "text";
+    nameinput.id="rename-"+bgid;
+    nameinput.value = nameelm.innerHTML;
+    nameinput.onkeypress = function(e){rename(e, bgid, document.getElementById('rename-'+bgid).value); };
+//    nameinput.setAttribute('onkeypress', 'rename(event, bgid, document.getElementById(rename-'+bgid+').value);');
+
+    div.removeChild(nameelm);
+    div.insertBefore(nameinput, p);
+}
+
+function rename(event, bgid, name){
+    if (!enterpressed(event)){
+        return false;
+    }
+    var ul = document.getElementById('bg-'+bgid);
+    var div = ul.parentNode;
+    var p = div.getElementsByTagName('p')[0];
+    var nameinput = document.getElementById("rename-"+bgid);
+    var changedinput = document.getElementById("basketgroup-"+bgid+"-changed");
+    var newh3 = document.createElement("h3");
+    var hiddenname = document.getElementById("basketgroup-"+bgid+"-name");
+
+    div.removeChild(nameinput);
+
+    newh3.innerHTML=name;
+    hiddenname.value=name;
+    changedinput.value = 1;
+    div.insertBefore(newh3, p);
+}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt
index 6aff7da..0b205c9 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt
@@ -8,7 +8,7 @@
 <script type="text/javascript" src="[% yuipath %]/button/button-min.js"></script>
 <script type="text/javascript" src="[% yuipath %]/container/container_core-min.js"></script>
 <script type="text/javascript" src="[% yuipath %]/menu/menu-min.js"></script>
-<script type="text/javascript" src="[% themelang %]/js/acq.js"></script>
+<script type="text/javascript" src="[% themelang %]/js/basketgroup.js"></script>
 [% IF ( grouping ) %]
 <script type="text/javascript" src="[% yuipath %]/yahoo-dom-event/yahoo-dom-event.js"></script>
 <script type="text/javascript" src="[% yuipath %]/animation/animation-min.js"></script>
-- 
1.7.10.4