1 /* global MSG_BASKET_EMPTY MSG_RECORD_IN_BASKET MSG_RECORD_ADDED MSG_NRECORDS_IN_BASKET MSG_NRECORDS_ADDED MSG_NO_RECORD_ADDED MSG_RECORD_REMOVED MSG_CONFIRM_DEL_BASKET MSG_CONFIRM_DEL_RECORDS MSG_IN_YOUR_CART MSG_NO_RECORD_SELECTED MSG_ITEM_IN_CART MSG_ITEM_NOT_IN_CART */
3 //////////////////////////////////////////////////////////////////////////////
4 // BASIC FUNCTIONS FOR COOKIE MANAGEMENT //
5 //////////////////////////////////////////////////////////////////////////////
7 var CGIBIN = "/cgi-bin/koha/";
9 var nameCookie = "intranet_bib_list";
10 var nameParam = "bib_list";
11 var valCookie = readCookie(nameCookie);
14 var arrayRecords = valCookie.split("/");
15 if(arrayRecords.length > 0){
16 var basketcount = arrayRecords.length-1;
24 function writeCookie(name, val, wd) {
26 parent.opener.document.cookie = name + "=" + val + "; path=/";
29 parent.document.cookie = name + "=" + val + "; path=/";
33 function readCookieValue (str, val_beg) {
34 var val_end = str.indexOf(";", val_end);
37 return str.substring(val_beg, val_end);
40 function readCookie(name, wd) {
41 var str_name = name + "=";
42 var str_len = str_name.length;
45 str_cookie = parent.opener.document.cookie;
48 str_cookie = parent.document.cookie;
50 // fixed - getting the part of the basket that is bib_list
51 var cookie_parts = str_cookie.split(";");
52 for(var i=0;i < cookie_parts.length;i++) {
53 var c = cookie_parts[i];
54 while (c.charAt(0)==' ') c = c.substring(1,c.length);
55 if(c.indexOf(str_name) === 0) return c.substring(str_name.length,c.length);
60 function delCookie(name) {
62 exp.setTime(exp.getTime()-1);
64 parent.opener.document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
66 document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
70 ///////////////////////////////////////////////////////////////////
71 // SPECIFIC FUNCTIONS USING COOKIES //
72 ///////////////////////////////////////////////////////////////////
74 function openBasket() {
76 var valCookie = readCookie(nameCookie);
78 strCookie = nameParam + "=" + valCookie;
84 var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
85 var loc = CGIBIN + "basket/basket.pl?" + strCookie;
86 var basket = open(loc, "basket", optWin);
87 if (window.focus) { basket.focus(); }
90 showCartUpdate(MSG_BASKET_EMPTY);
94 function addRecord(val, selection,NoMsgAlert) {
95 var valCookie = readCookie(nameCookie);
98 if ( ! valCookie ) { // empty basket
99 valCookie = val + '/';
104 // is this record already in the basket ?
106 var arrayRecords = valCookie.split("/");
107 for (var i = 0; i < valCookie.length - 1; i++) {
108 if (val == arrayRecords[i]) {
118 showCartUpdate(MSG_RECORD_IN_BASKET);
122 valCookie += val + '/';
124 updateBasket(arrayRecords.length);
129 writeCookie(nameCookie, valCookie);
130 if (selection) { // when adding a selection of records
131 updateLink(val,"add");
135 showCartUpdate(MSG_RECORD_ADDED);
136 updateLink(val,"add");
141 function AllAreChecked(s){
142 if (! s.length) { return false;}
144 for (var i=0; i < l; i++) {
145 if(! s[i].checked) { return false; }
150 function SelectAll(){
151 if(document.bookbag_form.biblionumber.length > 0) {
152 var checky = AllAreChecked(document.bookbag_form.biblionumber);
153 var l = document.bookbag_form.biblionumber.length;
154 for (var i=0; i < l; i++) {
155 document.bookbag_form.biblionumber[i].checked = (checky) ? false : true;
160 function addMultiple(biblist){
162 if( biblist && biblist.length > 0 ) {
163 for (var i=0; i < biblist.length; i++) {
164 if (biblist[i].checked) {
165 c_value = c_value + biblist[i].value + "/";
169 var bibnums = getContextBiblioNumbers();
170 if ( bibnums.length > 0 ) {
171 for ( var i = 0 ; i < bibnums.length ; i++ ) {
172 c_value = c_value + bibnums[i] + "/";
175 if(document.bookbag_form.biblionumber.length > 0) {
176 for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
177 if (document.bookbag_form.biblionumber[i].checked) {
178 c_value = c_value + document.bookbag_form.biblionumber[i].value + "/";
182 c_value = c_value + document.bookbag_form.biblionumber.value + "/";
186 addSelRecords(c_value);
189 function addSelRecords(valSel) { // function for adding a selection of biblios to the basket
190 // from the results list
191 var arrayRecords = valSel.split("/");
194 for (i=0;i<arrayRecords.length;i++) {
195 if (arrayRecords[i]) {
196 nbAdd += addRecord(arrayRecords[i], 1);
205 msg = MSG_NRECORDS_ADDED.format(nbAdd);
207 msg += MSG_NRECORDS_IN_BASKET.format((i-nbAdd));
210 msg = MSG_NRECORDS_ADDED.format(nbAdd);
215 msg = MSG_NO_RECORD_SELECTED;
218 msg = MSG_NO_RECORD_ADDED;
224 function showCartUpdate(msg){
225 // set body of popup window
226 $("#cartDetails").html(msg);
228 setTimeout(hideCart,2000);
231 function showListsUpdate(msg){
232 // set body of popup window
236 function selRecord(num, status) {
237 var str = document.myform.records.value;
242 str = delRecord(num, str);
245 document.myform.records.value = str;
248 function delSingleRecord(biblionumber){
249 var valCookie = readCookie(nameCookie);
250 var arrayRecords = valCookie.split("/");
251 var pos = jQuery.inArray(biblionumber,arrayRecords);
252 arrayRecords.splice(pos,1);
253 valCookie = arrayRecords.join("/");
254 writeCookie( nameCookie, valCookie );
255 updateBasket( arrayRecords.length-1 );
256 updateLink(biblionumber,"del");
257 showCartUpdate(MSG_RECORD_REMOVED);
260 function delSelRecords() {
263 var valCookie = readCookie(nameCookie, 1);
266 var str = document.myform.records.value;
269 var str2 = valCookie;
271 s = str.indexOf("/");
273 num = str.substring(0, s);
274 str = delRecord(num,str);
275 str2 = delRecord(num,str2);
276 updateLink(num,"del",top.opener);
282 if (str2.length === 0) { // equivalent to emptying the basket
284 rep = confirm(MSG_CONFIRM_DEL_BASKET);
286 delCookie(nameCookie);
287 document.location = "about:blank";
288 updateBasket(0,top.opener);
294 writeCookie(nameCookie, str2, 1);
301 valCookie = readCookie(nameCookie, 1);
302 strCookie = nameParam + "=" + valCookie;
303 var arrayRecords = valCookie.split("/");
304 updateBasket(arrayRecords.length-1,top.opener);
305 document.location = CGIBIN + "basket/basket.pl?" + strCookie;
308 alert(MSG_NO_RECORD_SELECTED);
312 function delRecord (n, s) {
319 pos = aux.indexOf(n, pos+1);
320 var charAfter = aux.charAt(pos+n.length); // character right after the researched string
321 if (charAfter.match(re)) { // record number inside another one
324 else { // good record number
325 aux = s.substring(0, pos)+ s.substring(pos+n.length+1, s.length);
335 function delBasket(context,rep) {
336 if (rep === undefined){
337 rep = confirm(MSG_CONFIRM_DEL_BASKET);
340 if(context == "popup"){
341 delCookie(nameCookie);
342 updateAllLinks(top.opener);
343 document.location = "about:blank";
344 updateBasket(0,top.opener);
347 delCookie(nameCookie);
348 updateBasket(0,top.opener);
355 if (document.myform.records.value) {
357 rep = confirm(MSG_CONFIRM_DEL_RECORDS);
362 updateBasket(arrayRecords.length-1,top.opener);
366 function sendBasket() {
367 var valCookie = readCookie(nameCookie);
368 var strCookie = nameParam + "=" + valCookie;
370 var loc = CGIBIN + "basket/sendbasket.pl?" + strCookie;
372 var optWin="scrollbars=no,resizable=no,height=400,width=650,top=50,left=100";
373 var win_form = open(loc,"win_form",optWin);
376 function downloadBasket() {
377 var valCookie = readCookie(nameCookie);
378 var strCookie = nameParam + "=" + valCookie;
380 var loc = CGIBIN + "basket/downloadcart.pl?" + strCookie;
382 open(loc,"win_form",'scrollbars=no,resizable=no,height=300,width=450,top=50,left=100');
385 function printBasket() {
389 function showMore() {
392 var valCookie = readCookie(nameCookie);
394 strCookie = nameParam + "=" + valCookie;
396 var loc = CGIBIN + "basket/basket.pl?" + strCookie + "&verbose=1";
397 document.location = loc;
400 function showLess() {
403 var valCookie = readCookie(nameCookie);
405 strCookie = nameParam + "=" + valCookie;
407 var loc = CGIBIN + "basket/basket.pl?" + strCookie + "&verbose=0";
408 document.location = loc;
411 function updateBasket(updated_value,target) {
413 target.$('#basketcount').html(" <span>("+updated_value+")</span>");
414 target.$('#cartDetails').html(MSG_IN_YOUR_CART.format(updated_value));
416 $('#basketcount').html(" <span>("+updated_value+")</span>");
417 $('#cartDetails').html(MSG_IN_YOUR_CART.format(updated_value));
419 var basketcount = updated_value;
422 function openBiblio(openerURL) {
423 opener.document.location = openerURL;
427 function addSelToShelf() {
428 var items = document.getElementById('records').value;
430 document.location = "/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumber="+items;
432 alert(MSG_NO_RECORD_SELECTED);
436 /// vShelfAdd() builds url string for multiple-biblio adds.
438 function vShelfAdd(biblist) {
439 var bibs = new Array;
440 if( biblist && biblist.length > 0 ) {
441 for (var i=0; i < biblist.length; i++) {
442 if (biblist[i].checked) {
443 bibs.push("biblionumber=" + biblist[i].value);
446 if (bibs.length === 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
447 return bibs.join("&");
449 var bibnums = getContextBiblioNumbers();
450 if ( bibnums.length > 0 ) {
451 for ( var i = 0 ; i < bibnums.length ; i++ ) {
452 bibs.push("biblionumber=" + bibnums[i]);
454 return bibs.join("&");
460 var position = $("#cartmenulink").offset();
461 var toolbarh = $(".floating").outerHeight();
462 var scrolld = $(window).scrollTop();
463 var top = position.top + $("#cartmenulink").outerHeight();
465 top = scrolld + toolbarh + 15;
467 var left = position.left;
469 .css("position","absolute")
472 .css("z-index",1000);
473 $("#cartDetails").fadeIn("fast");
477 $("#cartDetails").fadeOut("fast");
480 function updateLink(val, op, target){
481 var cart = target ? target.$("#cart" + val) : $("#cart" + val);
482 var cartR = target ? target.$("#cartR" + val) : $("#cartR" + val);
485 cart.html(MSG_ITEM_IN_CART).addClass("incart");
488 cart.html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart");
493 function updateAllLinks(target){
495 target.$("a.incart").html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart");
496 target.$(".cartRemove").hide();
498 $("a.incart").html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart");
499 $(".cartRemove").hide();
503 $(document).ready(function(){
504 $("#cartmenulink").click(function( e ){
508 if(basketcount){ updateBasket(basketcount); }