1 //=======================================================================
3 // acqui/uncertainprice.tmpl uses this
4 function uncheckbox(form, field) {
5 var price = new Number(form.elements['price' + field].value);
7 var errmsg = "ERROR: Price is not a valid number, please check the price and try again!"
10 for(var i=0; i<form.elements['price' + field].value.length; ++i) {
11 price = new Number(form.elements['price' + field].value[i]);
12 if(! isNaN(price) || form.elements['price' + field].value[i] == ".") {
13 tmpprice += form.elements['price' + field].value[i];
16 form.elements['price' + field].value = tmpprice;
19 form.elements['uncertainprice' + field].checked = false;
23 // returns false if value is empty
24 function isNotNull(f,noalert) {
25 if (f.value.length ==0) {
31 function isNull(f,noalert) {
32 if (f.value.length > 0) {
44 //Function returns false if v is not a number (if maybenull is 0, it also returns an error if the number is 0)
45 function isNum(v,maybenull) {
46 var n = new Number(v.value);
50 if (maybenull==0 && v.value=='') {
58 // this function checks if date is like DD/MM/YYYY
59 function CheckDate(field) {
64 var date = d.split("/");
67 if ( (date.length < 2) && (ok==1) ) {
68 msg = _("Separator must be /");
69 alert(msg); ok=0; field.focus();
76 if ( ((isNaN(dd))||(dd<1)||(dd>31)) && (ok==1) ) {
77 msg = _("day not correct.");
78 alert(msg); ok=0; field.focus();
82 if ( ((isNaN(mm))||(mm<1)||(mm>12)) && (ok==1) ) {
83 msg = _("month not correct.");
84 alert(msg); ok=0; field.focus();
88 if ( ((isNaN(yyyy))||(yyyy<amin)||(yyyy>amax)) && (ok==1) ) {
89 msg = _("years not correct.");
90 alert(msg); ok=0; field.focus();
93 // check day/month combination
94 if ((mm==4 || mm==6 || mm==9 || mm==11) && dd==31) {
95 msg = _("Invalid Day/Month combination. Please ensure that you have a valid day/month combination.");
96 alert(msg); ok=0; field.focus();
99 // check for february 29th
101 var isleap = (yyyy % 4 == 0 && (yyyy % 100 != 0 || yyyy % 400 == 0));
102 if (dd>29 || (dd==29 && !isleap)) {
103 msg = _("Invalid Day. This year is not a leap year. Please enter a value less than 29 for the day.");
104 alert(msg); ok=0; field.focus();
112 // Checks wether start date is greater than end date
113 function CompareDate(startdate, enddate) {
114 startdate=startdate.split("/");
115 syear = startdate[2];
116 smonth = startdate[1];
118 enddate=enddate.split("/");
123 var sdate = new Date(syear,smonth-1,sday);
124 var edate = new Date(eyear,emonth-1,eday);
126 msg = _("Start date after end date, please check the dates!");
127 alert(msg); ok=0; field.focus();
133 // checks wether end date is before today, returns false if it is
134 function CheckEndDate(enddate) {
135 enddate=enddate.split("/");
139 var edate = new Date(eyear,emonth-1,eday);
140 var today = new Date( );
142 msg = _("End date before today, Invalid end date!");
143 alert(msg); ok=0; field.focus();
151 //=======================================================================
153 //=======================================================================
154 // Functions for drag-and-drop functionality
159 var Dom = YAHOO.util.Dom;
160 var Event = YAHOO.util.Event;
161 var DDM = YAHOO.util.DragDropMgr;
165 var uls = document.getElementsByTagName('ul');
168 for (i=0; i<uls.length;i=i+1) {
169 if (uls[i].className == "draglist" || uls[i].className == "draglist_alt") {
170 ddtarget = YAHOO.util.DragDropMgr.getDDById(uls[i].id);
171 // 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,
172 // it has to be unlinked multiple times, so we need to test wether it is allready a target, otherwise we'll have a problem when closing the group
174 new YAHOO.util.DDTarget(uls[i].id);
176 var children = uls[i].getElementsByTagName('li');
177 for( j=0; j<children.length; j=j+1) {
178 // The yahoo drag and drop is (broken or not) in such a way, that if an element is subscribed as a target multiple times,
179 // it has to be unlinked multiple times, so we need to test wether it is allready a target, otherwise we'll have a problem when closing the group
180 ddtarget = YAHOO.util.DragDropMgr.getDDById(children[j].id);
182 new DDList(children[j].id);
191 // drag and drop implementation
193 DDList = function(id, sGroup, config) {
195 DDList.superclass.constructor.call(this, id, sGroup, config);
197 this.logger = this.logger || YAHOO;
198 var el = this.getDragEl();
199 Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent
201 this.goingUp = false;
205 YAHOO.extend(DDList, YAHOO.util.DDProxy, {
207 startDrag: function(x, y) {
208 this.logger.log(this.id + " startDrag");
210 // make the proxy look like the source element
211 var dragEl = this.getDragEl();
212 var clickEl = this.getEl();
213 Dom.setStyle(clickEl, "visibility", "hidden");
215 dragEl.innerHTML = clickEl.innerHTML;
217 Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
218 Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
219 Dom.setStyle(dragEl, "border", "2px solid gray");
222 endDrag: function(e) {
224 var srcEl = this.getEl();
225 var proxy = this.getDragEl();
227 // Show the proxy element and animate it to the src element's location
228 Dom.setStyle(proxy, "visibility", "");
229 var a = new YAHOO.util.Motion(
236 YAHOO.util.Easing.easeOut
238 var proxyid = proxy.id;
239 var thisid = this.id;
241 // Hide the proxy and show the source element when finished with the animation
242 a.onComplete.subscribe(function() {
243 Dom.setStyle(proxyid, "visibility", "hidden");
244 Dom.setStyle(thisid, "visibility", "");
247 // if we are in basketgrouping page, when finished moving, edit the basket's info to reflect new status
248 if(typeof(basketgroups) != 'undefined') {
249 a.onComplete.subscribe(function() {
250 var reg = new RegExp("[-]+", "g");
251 // add a changed input to each moved basket, so we know which baskets to modify,
252 // and so we don't need to modify each and every basket and basketgroup each time the page is loaded
253 // FIXME: we shouldn't use getElementsByTagName, it's not explicit enough :-(
254 srcEl.getElementsByTagName('input')[1].value = "1";
255 if ( srcEl.parentNode.parentNode.className == "workarea" ) {
256 var dstbgroupid = srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-2].name.split(reg)[1];
257 srcEl.className="grouped";
258 srcEl.getElementsByTagName('input')[0].value = dstbgroupid;
259 //FIXME: again, we shouldn't be using getElementsByTagName!!
260 srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-1].value = 1;
262 else if ( srcEl.parentNode.parentNode.className == "workarea_alt" ){
263 srcEl.className="ungrouped";
264 srcEl.getElementsByTagName('input')[0].value = "0";
270 onDragDrop: function(e, id) {
272 // If there is one drop interaction, the li was dropped either on the list,
273 // or it was dropped on the current location of the source element.
274 if (DDM.interactionInfo.drop.length === 1) {
276 // The position of the cursor at the time of the drop (YAHOO.util.Point)
277 var pt = DDM.interactionInfo.point;
279 // The region occupied by the source element at the time of the drop
280 var region = DDM.interactionInfo.sourceRegion;
282 // Check to see if we are over the source element's location. We will
283 // append to the bottom of the list once we are sure it was a drop in
284 // the negative space (the area of the list without any list items)
285 if (!region.intersect(pt)) {
286 var destEl = Dom.get(id);
287 var destDD = DDM.getDDById(id);
288 destEl.appendChild(this.getEl());
289 destDD.isEmpty = false;
295 onDrag: function(e) {
297 // Keep track of the direction of the drag for use during onDragOver
298 var y = Event.getPageY(e);
300 if (y < this.lastY) {
302 } else if (y > this.lastY) {
303 this.goingUp = false;
308 onDragOver: function(e, id) {
310 var srcEl = this.getEl();
311 var destEl = Dom.get(id);
313 // We are only concerned with list items, we ignore the dragover
314 // notifications for the list.
315 if (destEl.nodeName.toLowerCase() == "li") {
316 var orig_p = srcEl.parentNode;
317 var p = destEl.parentNode;
320 p.insertBefore(srcEl, destEl); // insert above
322 p.insertBefore(srcEl, destEl.nextSibling); // insert below
334 //creates new group, parameter is the group's name
335 function newGroup(event, name) {
339 if (!enterpressed(event) && event != "button"){
342 var pardiv = document.getElementById('groups');
343 var newdiv = document.createElement('div');
344 var newh3 = document.createElement('h3');
345 var newul = document.createElement('ul');
346 var newclose = document.createElement('a');
347 var newrename = document.createElement('a');
348 var newbasketgroupname = document.createElement('input');
349 var nbgclosed = document.createElement('input');
350 var newp = document.createElement('p');
351 var reg=new RegExp("[-]+", "g");
354 while( i < pardiv.getElementsByTagName('input').length ){
355 if (! isNaN(parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1])) && parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]) > maxid){
356 maxid = parseInt(pardiv.getElementsByTagName('input')[i].name.split(reg)[1]);
360 // var bgid = parseInt(pardiv.getElementsByTagName('input')[pardiv.getElementsByTagName('input').length-2].name.split(reg)[1]) + 1;
361 var bgid = maxid + 1;
362 var newchanged = document.createElement('input');
365 newul.className='draglist';
367 newh3.innerHTML=name;
368 // newh3.style.display="inline";
370 newclose.innerHTML="close";
371 newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');";
373 newrename.href="javascript:" + "renameinit("+bgid+");";
374 newrename.innerHTML="rename";
376 // newp.style.display="inline";
377 newp.innerHTML=" [ ";
378 newp.appendChild(newrename);
379 newp.innerHTML+=" / ";
380 newp.appendChild(newclose);
381 newp.innerHTML+=" ]";
383 newbasketgroupname.type="hidden";
384 newbasketgroupname.name="basketgroup-" + bgid + "-name";
385 newbasketgroupname.id = "basketgroup-" + bgid + "-name";
386 newbasketgroupname.value=name;
388 nbgclosed.type="hidden";
389 nbgclosed.name="basketgroup-" + bgid + "-closed";
391 nbgclosed.id=nbgclosed.name;
393 newchanged.type="hidden";
394 newchanged.id="basketgroup-"+bgid+"-changed";
395 newchanged.name=newchanged.id;
396 newchanged.value="1";
398 newdiv.style.backgroundColor='red';
399 newdiv.appendChild(newh3);
400 newdiv.appendChild(newp);
401 newdiv.appendChild(newul);
402 newdiv.appendChild(newbasketgroupname);
403 newdiv.appendChild(nbgclosed);
404 newdiv.appendChild(newchanged);
405 newdiv.className='workarea';
406 pardiv.appendChild(newdiv);
408 YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true);
411 //this traps enters in input fields
412 function enterpressed(event){
414 if (window.event) keycode = window.event.keyCode;
415 else if (event) keycode = event.which;
429 //Closes a basketgroup
430 function closebasketgroup(bgid) {
431 var answer=confirm(_("Are you sure you want to close this basketgroup?"));
437 tagname='basketgroup-'+bgid+'-closed';
439 var closeinput = document.getElementById(tagname);
440 closeinput.value = 1;
441 var changed = document.getElementById("basketgroup-"+bgid+"-changed");
444 var div = document.getElementById(tagname).parentNode;
445 var stufftoremove = div.getElementsByTagName('p')[0];
446 var ul = document.getElementById(ulid);
447 var lis = ul.getElementsByTagName('li');
448 if (lis.length == 0 ) {
449 alert(_("Why close an empty basket?"));
452 var cantprint = document.createElement('p');
454 div.className = "closed";
455 ul.className="closed";
457 for(i=0; i<lis.length; ++i) {
458 ddtarget = YAHOO.util.DragDropMgr.getDDById(lis[i].id);
461 ddtarget = YAHOO.util.DragDropMgr.getDDById(ul.id);
463 div.removeChild(stufftoremove);
464 // the print button is disabled because the page's content might (or is probably) not in sync with what the database contains
465 cantprint.innerHTML=_("You need to save the page before printing");
466 cantprint.id = 'cantprint-' + bgid;
467 var unclosegroup = document.createElement('a');
468 unclosegroup.href='javascript:unclosegroup('+bgid+');';
469 unclosegroup.innerHTML=_("unclose basketgroup");
470 unclosegroup.id = 'unclose-' + bgid;
472 div.appendChild(cantprint);
473 div.appendChild(unclosegroup);
476 //function that lets the user unclose a basketgroup as long as he hasn't submitted the changes to the page.
477 function unclosegroup(bgid){
478 var div = document.getElementById('basketgroup-'+bgid+'-closed').parentNode;
479 var divtodel = document.getElementById('unclose-' + bgid);
481 div.removeChild(divtodel);
483 divtodel = document.getElementById('unclose-' + bgid);
485 div.removeChild(divtodel);
487 var closeinput = document.getElementById('basketgroup-'+bgid+'-closed');
488 var ul = document.getElementById('bg-'+bgid);
490 var newclose = document.createElement('a');
491 var newrename = document.createElement('a');
492 var newp = document.createElement('p');
494 newclose.innerHTML="close";
495 newclose.href="javascript: closebasketgroup('"+bgid+"', 'bg-"+bgid+"');";
497 newrename.href="javascript:" + "renameinit("+bgid+");";
498 newrename.innerHTML="rename";
500 var todel = div.getElementsByTagName('p')[0];
501 div.removeChild(todel);
503 var changed = document.getElementById("basketgroup-"+bgid+"-changed");
506 newp.innerHTML=" [ ";
507 newp.appendChild(newrename);
508 newp.innerHTML+=" / ";
509 newp.appendChild(newclose);
510 newp.innerHTML+=" ]";
512 div.insertBefore(newp, ul);
513 closeinput.value="0";
514 div.className = "workarea";
515 ul.className="draglist";
517 //rescan draglists, we have a new target (again :-)
518 YAHOO.util.Event.onDOMReady(DDApp.init, DDApp, true);
521 //a function to filter basketgroups using a regex (javascript regex)
522 function filterGroups(event, searchstring ){
523 if (!enterpressed(event) && event != "button"){
526 var reg = new RegExp(searchstring, "g");
527 var Dom = YAHOO.util.Dom;
528 var divs = Dom.getElementsByClassName("workarea", "div");
530 for (var i = 0; i < divs.length; ++i){
531 if (! reg.exec(divs[i].innerHTML)){
532 divs[i].style.display='none';
535 divs[i].style.display='';
538 divs = Dom.getElementsByClassName("closed", "div");
539 for (var i = 0; i < divs.length; ++i){
540 if (! reg.exec(divs[i].innerHTML)){
541 divs[i].style.display='none';
544 divs[i].style.display='';
549 //function to hide (or show) closed baskets (if show is true, it shows all the closed baskets)
550 function showhideclosegroups(show){
551 var Dom = YAHOO.util.Dom;
552 var divs = Dom.getElementsByClassName("closed", "div");
557 else display = 'none';
558 for(var i = 0; i < divs.length; ++i){
559 divs[i].style.display=display;
563 function moveallungroupedto(event, newbgname){
564 if (!enterpressed(event) && event != "button"){
567 var Dom = YAHOO.util.Dom;
568 var ungrouped = Dom.getElementsByClassName("ungrouped", "li");
569 var unclosed = Dom.getElementsByClassName("workarea", "div");
570 var reg = new RegExp("[-]+", "g");
572 for (var i = 0; i < unclosed.length; ++i){
573 if(unclosed[i].getElementsByTagName('h3')[0].innerHTML == newbgname){
574 var ul = unclosed[i].getElementsByTagName('ul')[0];
575 var id = unclosed[i].getElementsByTagName('input')[unclosed[i].getElementsByTagName('input').length-2].name.split(reg)[1];
576 for (var j = 0; j< ungrouped.length; ++j){
577 ungrouped[j].className = "grouped";
578 ungrouped[j].getElementsByTagName('input')[0].value = id;
579 ul.appendChild(ungrouped[j]);
580 //FIXME: these should be using getElementById, but i don't know how.
581 //this might not be explicit enough, and it's quite complex and hard to read. (above is the basketgroupid of the basket,
582 // below is the changed status
583 ungrouped[j].getElementsByTagName('input')[1].value = 1;
590 function renameinit(bgid){
591 var ul = document.getElementById('bg-'+bgid);
592 var div = ul.parentNode;
593 var nameelm = div.getElementsByTagName('h3')[0];
594 var p = div.getElementsByTagName('p')[0];
597 var nameinput = document.createElement("input");
598 nameinput.type = "text";
599 nameinput.id="rename-"+bgid;
600 nameinput.value = nameelm.innerHTML;
601 nameinput.onkeypress = function(e){rename(e, bgid, document.getElementById('rename-'+bgid).value); };
602 // nameinput.setAttribute('onkeypress', 'rename(event, bgid, document.getElementById(rename-'+bgid+').value);');
604 div.removeChild(nameelm);
605 div.insertBefore(nameinput, p);
608 function rename(event, bgid, name){
609 if (!enterpressed(event)){
612 var ul = document.getElementById('bg-'+bgid);
613 var div = ul.parentNode;
614 var p = div.getElementsByTagName('p')[0];
615 var nameinput = document.getElementById("rename-"+bgid);
616 var changedinput = document.getElementById("basketgroup-"+bgid+"-changed");
617 var newh3 = document.createElement("h3");
618 var hiddenname = document.getElementById("basketgroup-"+bgid+"-name");
620 div.removeChild(nameinput);
622 newh3.innerHTML=name;
623 hiddenname.value=name;
624 changedinput.value = 1;
625 div.insertBefore(newh3, p);
628 //=======================================================================
629 //a logging function (a bit buggy, might open millions of log pages when initializing, but works fine after...
630 function log(message) {
631 if (!log.window_ || log.window_.closed) {
632 var win = window.open("", null, "width=400,height=200," +
633 "scrollbars=yes,resizable=yes,status=no," +
634 "location=no,menubar=no,toolbar=no");
636 var doc = win.document;
637 doc.write("<html><head><title>Debug Log</title></head>" +
638 "<body></body></html>");
642 var logLine = log.window_.document.createElement("div");
643 logLine.appendChild(log.window_.document.createTextNode(message));
644 log.window_.document.body.appendChild(logLine);
646 //=======================================================================
650 function ownerPopup(f) {
651 window.open("/cgi-bin/koha/admin/aqbudget_owner_search.pl?op=budget",'PatronPopup','width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes');
654 //=======================================================================
655 function getElementsByClass( searchClass, domNode, tagName) {
656 if (domNode == null) domNode = document;
657 if (tagName == null) tagName = '*';
658 var el = new Array();
659 var tags = domNode.getElementsByTagName(tagName);
660 var tcl = " "+searchClass+" ";
661 for(i=0,j=0; i<tags.length; i++) {
662 var test = " " + tags[i].className + " ";
663 if (test.indexOf(tcl) != -1)
670 function calcTotalRow(cell) {
672 var bud_id = cell.className;
673 var val1 = cell.value;
674 var remainingTotal = document.getElementById("budget_est_"+bud_id) ;
676 var budgetTotal = document.getElementById("budget_tot_"+bud_id ).textContent;
677 var arr = getElementsByClass(bud_id);
679 budgetTotal = budgetTotal.replace(/\,/, "");
681 //percent strip and convert
682 if ( val1.match(/\%/) ) {
683 val1 = val1.replace(/\%/, "");
684 cell.value = (val1 / 100) * Math.abs(budgetTotal ) ;
687 for ( var i=0, len=arr.length; i<len; ++i ){
688 remainingNew += Math.abs(arr[i].value);
691 var cc = new Number(cell.value);
692 cell.value = cc.toFixed(2); // TIDYME...
693 remainingNew = Math.abs( budgetTotal ) - remainingNew ;
695 if ( remainingNew == 0) {
696 remainingTotal.style.color = 'black';
698 else if ( remainingNew > 0 ) {
699 remainingTotal.style.color = 'green';
700 } else { // if its negative, make it red..
701 remainingTotal.style.color = 'red';
704 remainingTotal.textContent = remainingNew.toFixed(2) ;
707 function autoFillRow(bud_id) {
709 var remainingTotal = document.getElementById("budget_est_"+bud_id) ;
710 var remainingNew = new Number;
711 var budgetTotal = document.getElementById("budget_tot_"+bud_id ).textContent;
712 var arr = getElementsByClass(bud_id);
714 budgetTotal = budgetTotal.replace(/\,/, "");
715 var qty = new Number;
717 for ( var i=0, len=arr.length; i<len; ++i ) {
718 remainingNew += Math.abs (arr[i].value );
720 if ( arr[i].value == 0 ) {
725 remainingNew = Math.abs( budgetTotal) - remainingNew ;
726 var newCell = new Number (remainingNew / qty);
728 for ( var i=0, len=arr.length; i<len; ++i ) {
729 if ( Math.abs(arr[i].value) == 0 ) {
730 arr[i].value = newCell.toFixed(2) ;
734 remainingTotal.textContent = '0.00' ;
735 remainingTotal.style.color = 'black';
739 function messenger(X,Y,etc){ // FIXME: unused?
740 win=window.open("","mess","height="+X+",width="+Y+",screenX=150,screenY=0");
742 win.document.close();
743 win.document.write("<body link='#333333' bgcolor='#ffffff' text='#000000'><font size='2'><p><br />");
744 win.document.write(etc);
745 win.document.write("<center><form><input type=button onclick='self.close()' value='Close'></form></center>");
746 win.document.write("</font></body></html>");
750 //=======================================================================
752 // NEXT BLOCK IS USED BY NEWORDERBEMPTY
754 function calcNeworderTotal(f){
756 var quantity = new Number(f.quantity.value);
757 var discount = new Number(f.discount.value);
758 var listinc = new Number (f.listinc.value);
759 var currency = f.currency.value;
760 var applygst = new Number (f.applygst.value);
761 var list_price = new Number(f.list_price.value);
762 var invoiceingst = new Number (f.invoiceincgst.value);
763 var exchangerate = new Number(f.elements[currency].value); //get exchange rate
764 var gst_on=(!listinc && invoiceingst);
767 var rrp = new Number(list_price*exchangerate);
768 var ecost = new Number(rrp * (100 - discount ) / 100);
769 var GST = new Number(0);
771 rrp=rrp * (1+f.gstrate.value / 100);
772 GST=ecost * f.gstrate.value / 100;
775 var total = new Number( (ecost + GST) * quantity);
777 f.rrp.value = rrp.toFixed(2);
780 // f.rrp.value = 'moo'
782 f.ecost.value = ecost.toFixed(2);
783 f.total.value = total.toFixed(2);
784 f.list_price.value = list_price.toFixed(2);
786 // gst-stuff needs verifing, mason.
793 // ----------------------------------------
794 //USED BY NEWORDEREMPTY.PL
796 function fetchSortDropbox(f) {
797 var budgetId=f.budget_id.value;
798 var handleSuccess = function(o){
799 if(o.responseText !== undefined){
800 sort_dropbox.innerHTML = o.responseText;
804 var callback = { success:handleSuccess };
805 var sUrl = '../acqui/fetch_sort_dropbox.pl?sort=1&budget_id='+budgetId
806 var sort_dropbox = document.getElementById('sort1');
807 var request1 = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
810 // FIXME: --------- twice , coz the 2 requests get mixed up otherwise
812 var handleSuccess2 = function(o){
813 if(o.responseText !== undefined){
814 sort2_dropbox.innerHTML = o.responseText;
818 var callback2 = { success:handleSuccess };
819 var sUrl2 = '../acqui/fetch_sort_dropbox.pl?sort=2&budget_id='+budgetId;
820 var sort2_dropbox = document.getElementById('sort2');
821 var request2 = YAHOO.util.Connect.asyncRequest('GET', sUrl2, callback2);
828 //USED BY NEWORDEREMPTY.PL
829 function fetchSortDropbox(f) {
830 var budgetId=f.budget_id.value;
834 var sort_dropbox = document.getElementById('sort'+i);
835 var url = '../acqui/fetch_sort_dropbox.pl?sort='+i+'&budget_id='+budgetId;
838 xmlhttp = new XMLHttpRequest();
839 if ( typeof xmlhttp.overrideMimeType != 'undefined') {
840 xmlhttp.overrideMimeType('text/xml');
843 xmlhttp.open('GET', url, false);
846 xmlhttp.onreadystatechange = function() {
847 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
850 // wait for the call to complete
853 // rc = eval ( xmlhttp.responseText );
854 sort_dropbox.innerHTML = xmlhttp.responseText;
864 //USED BY NEWORDEREMPTY.PL
865 function totalExceedsBudget(budgetId, total) {
868 xmlhttp = new XMLHttpRequest();
869 if ( typeof xmlhttp.overrideMimeType != 'undefined') {
870 xmlhttp.overrideMimeType('text/xml');
873 var url = '../acqui/check_budget_total.pl?budget_id=' + budgetId + "&total=" + total;
874 xmlhttp.open('GET', url, false);
877 xmlhttp.onreadystatechange = function() {
878 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
880 actTotal = eval ( xmlhttp.responseText );
882 if ( Math.abs(actTotal) < Math.abs(total) ) {
883 // if budget is to low :(
893 //USED BY AQBUDGETS.TMPL
894 function budgetExceedsParent(budgetTotal, budgetId, newBudgetParent, periodID) {
898 xmlhttp = new XMLHttpRequest();
899 if ( typeof xmlhttp.overrideMimeType != 'undefined') {
900 xmlhttp.overrideMimeType('text/xml');
903 // make the call... yawn
904 // var url = '../admin/check_parent_total.pl?budget_id=' + budgetId + '&parent_id=' + newBudgetParent + "&total=" + budgetTotal + "&period_id="+ periodID ;
907 var url = '../admin/check_parent_total.pl?total=' + budgetTotal + "&period_id="+ periodID ;
909 if (budgetId ) { url += '&budget_id=' + budgetId };
910 if ( newBudgetParent ) { url += '&parent_id=' + newBudgetParent};
913 xmlhttp.open('GET', url, false);
916 xmlhttp.onreadystatechange = function() {
917 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
920 // wait for the call to complete
924 var result = eval ( xmlhttp.responseText );
927 return _("- Budget total exceeds parent allocation\n");
928 } else if (result == '2') {
929 return _("- Budget total exceeds period allocation\n");
938 //USED BY AQBUDGETS.TMPL
939 function checkBudgetParent(budgetId, newBudgetParent) {
941 xmlhttp = new XMLHttpRequest();
942 if ( typeof xmlhttp.overrideMimeType != 'undefined') {
943 xmlhttp.overrideMimeType('text/xml');
946 var url = '../admin/check_budget_parent.pl?budget_id=' + budgetId + '&new_parent=' + newBudgetParent;
947 xmlhttp.open('GET', url, false);
950 xmlhttp.onreadystatechange = function() {
951 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
952 // do something with the results
954 // wait for the call to complete
958 var result = eval ( xmlhttp.responseText );
961 return _("- New budget-parent is beneath budget\n");
962 // } else if (result == '2') {
963 // return "- New budget-parent has insufficent funds\n";