1 /* global MSG_BASKET_EMPTY MSG_RECORD_IN_BASKET MSG_RECORD_ADDED MSG_NRECORDS_IN_BASKET MSG_NRECORDS_ADDED MSG_NO_RECORD_SELECTED MSG_NO_RECORD_ADDED MSG_RECORD_REMOVED MSG_CONFIRM_DEL_BASKET MSG_CONFIRM_DEL_RECORDS MSG_ITEM_IN_CART MSG_ITEM_NOT_IN_CART */
3 //////////////////////////////////////////////////////////////////////////////
4 // BASIC FUNCTIONS FOR COOKIE MANAGEMENT //
5 //////////////////////////////////////////////////////////////////////////////
7 function basketCount(){
8 var valCookie = readCookie("bib_list");
10 var arrayRecords = valCookie.split("/");
11 if(arrayRecords.length > 0){
12 var basketcount = arrayRecords.length-1;
22 function writeCookie(name, val, wd) {
24 parent.opener.document.cookie = name + "=" + val + ";path=/";
27 parent.document.cookie = name + "=" + val + ";path=/";
31 function readCookieValue (str, val_beg) {
32 var val_end = str.indexOf(";", val_end);
35 return str.substring(val_beg, val_end);
38 function readCookie(name, wd) {
39 var str_name = name + "=";
40 var str_len = str_name.length;
43 str_cookie = parent.opener.document.cookie;
46 str_cookie = parent.document.cookie;
48 // fixed - getting the part of the basket that is bib_list
49 var cookie_parts = str_cookie.split(";");
50 for(var i=0;i < cookie_parts.length;i++) {
51 var c = cookie_parts[i];
52 while (c.charAt(0)==' ') c = c.substring(1,c.length);
53 if(c.indexOf(str_name) == 0) return c.substring(str_name.length,c.length);
58 function delCookie(name) {
60 exp.setTime(exp.getTime()-1);
62 parent.opener.document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
64 document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
68 ///////////////////////////////////////////////////////////////////
69 // SPECIFIC FUNCTIONS USING COOKIES //
70 ///////////////////////////////////////////////////////////////////
72 function openBasket() {
74 var nameCookie = "bib_list";
75 var valCookie = readCookie(nameCookie);
77 strCookie = nameCookie + "=" + valCookie;
83 var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
84 var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie;
85 var basket = open(loc, "basket", optWin);
86 if (window.focus) {basket.focus()}
89 showCartUpdate(MSG_BASKET_EMPTY);
93 function addRecord(val, selection,NoMsgAlert) {
94 var nameCookie = "bib_list";
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");
142 function AllAreChecked(s){
143 if (! s.length) { return false;}
145 for (var i=0; i < l; i++) {
146 if(! s[i].checked) { return false; }
151 function SelectAll(){
152 if(document.bookbag_form.biblionumber.length > 0) {
153 var checky = AllAreChecked(document.bookbag_form.biblionumber);
154 var l = document.bookbag_form.biblionumber.length;
155 for (var i=0; i < l; i++) {
156 document.bookbag_form.biblionumber[i].checked = (checky) ? false : true;
161 function addMultiple(){
163 if(document.bookbag_form.biblionumber.length > 0) {
164 for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
165 if (document.bookbag_form.biblionumber[i].checked) {
166 c_value = c_value + document.bookbag_form.biblionumber[i].value + "/";
169 addSelRecords(c_value);
171 c_value = c_value + document.bookbag_form.biblionumber.value + "/";
172 addSelRecords(c_value);
176 function addSelRecords(valSel) { // function for adding a selection of biblios to the basket
177 // from the results list
178 var arrayRecords = valSel.split("/");
181 for (i=0;i<arrayRecords.length;i++) {
182 if (arrayRecords[i]) {
183 nbAdd += addRecord(arrayRecords[i], 1);
192 msg = nbAdd+" "+MSG_NRECORDS_ADDED+", "+(i-nbAdd)+" "+MSG_NRECORDS_IN_BASKET;
195 msg = nbAdd+" "+MSG_NRECORDS_ADDED;
200 msg = MSG_NO_RECORD_SELECTED;
203 msg = MSG_NO_RECORD_ADDED+" ("+MSG_NRECORDS_IN_BASKET+") !";
209 function showCartUpdate(msg){
210 // set body of popup window
211 $("#cartDetails").html(msg);
213 setTimeout("hideCart()",2000);
216 function showListsUpdate(msg){
217 // set body of popup window
221 function selRecord(num, status) {
222 var str = document.myform.records.value
227 str = delRecord(num, str);
230 document.myform.records.value = str;
233 function delSingleRecord(biblionumber){
234 biblionumber = String( biblionumber );
235 var nameCookie = "bib_list";
236 var valCookie = readCookie(nameCookie);
237 var arrayRecords = valCookie.split("/");
238 var pos = jQuery.inArray(biblionumber,arrayRecords);
239 arrayRecords.splice( pos, 1 );
240 valCookie = arrayRecords.join("/");
241 writeCookie( nameCookie, valCookie );
242 updateBasket( arrayRecords.length-1 );
243 updateLink(biblionumber,"del");
244 showCartUpdate(MSG_RECORD_REMOVED);
247 function delSelRecords() {
250 var nameCookie = "bib_list";
251 var valCookie = readCookie(nameCookie, 1);
253 var str = document.myform.records.value;
256 var str2 = valCookie;
258 s = str.indexOf("/");
260 num = str.substring(0, s);
261 str = delRecord(num,str);
262 str2 = delRecord(num,str2);
263 updateLink(num,"del",top.opener);
269 if (str2.length == 0) { // equivalent to emptying the basket
271 rep = confirm(MSG_CONFIRM_DEL_BASKET);
273 delCookie(nameCookie);
274 document.location = "about:blank";
275 updateBasket(0,top.opener);
281 writeCookie(nameCookie, str2, 1);
288 var nameCookie = "bib_list";
289 var valCookie = readCookie(nameCookie, 1);
290 strCookie = nameCookie + "=" + valCookie;
291 var arrayRecords = valCookie.split("/");
292 updateBasket(arrayRecords.length-1,top.opener);
293 document.location = "/cgi-bin/koha/opac-basket.pl?" + strCookie;
296 alert(MSG_NO_RECORD_SELECTED);
300 function delRecord (n, s) {
307 pos = aux.indexOf(n, pos+1);
308 var charAfter = aux.charAt(pos+n.length); // character right after the researched string
309 if (charAfter.match(re)) { // record number inside another one
312 else { // good record number
313 aux = s.substring(0, pos)+ s.substring(pos+n.length+1, s.length);
323 function delBasket() {
324 var nameCookie = "bib_list";
327 rep = confirm(MSG_CONFIRM_DEL_BASKET);
329 delCookie(nameCookie);
330 updateAllLinks(top.opener);
331 document.location = "about:blank";
332 updateBasket(0,top.opener);
339 if (document.myform.records.value) {
341 rep = confirm(MSG_CONFIRM_DEL_RECORDS);
346 updateBasket(arrayRecords.length-1,top.opener);
350 function sendBasket() {
351 var nameCookie = "bib_list";
352 var valCookie = readCookie(nameCookie);
353 var strCookie = nameCookie + "=" + valCookie;
355 var loc = "/cgi-bin/koha/opac-sendbasket.pl?" + strCookie;
357 var optWin="scrollbars=yes,resizable=yes,height=600,width=900,top=50,left=100";
358 var win_form = open(loc,"win_form",optWin);
361 function showMore() {
364 var nameCookie = "bib_list";
365 var valCookie = readCookie(nameCookie);
367 strCookie = nameCookie + "=" + valCookie;
369 var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie + "&verbose=1";
370 document.location = loc;
373 function showLess() {
376 var nameCookie = "bib_list";
377 var valCookie = readCookie(nameCookie);
379 strCookie = nameCookie + "=" + valCookie;
381 var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie + "&verbose=0";
382 document.location = loc;
386 var items = document.getElementById('records').value;
388 parent.opener.document.location = "/cgi-bin/koha/opac-reserve.pl?biblionumbers=" + items;
391 alert(MSG_NO_RECORD_SELECTED);
395 function updateBasket(updated_value,target) {
396 if(updated_value > 0){
397 bcount = "<span>"+updated_value+"</span>";
402 target.$('#basketcount').html(bcount);
404 $('#basketcount').html(bcount);
408 function openBiblio(dest,biblionumber) {
409 openerURL=dest+"?biblionumber="+biblionumber;
410 opener.document.location = openerURL;
414 function addSelToShelf() {
415 var items = document.getElementById('records').value;
419 var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
420 var loc = "/cgi-bin/koha/opac-addbybiblionumber.pl?biblionumber="+items;
421 var shelf = open(loc, "shelf", optWin);
423 alert(MSG_NO_RECORD_SELECTED);
427 /// vShelfAdd() builds url string for multiple-biblio adds.
429 function vShelfAdd() {
431 if(document.bookbag_form.biblionumber.length > 0) {
432 for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
433 if (document.bookbag_form.biblionumber[i].checked) {
434 bibs.push("biblionumber=" + document.bookbag_form.biblionumber[i].value);
437 if (bibs.length == 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
438 return bibs.join("&");
440 if (document.bookbag_form.biblionumber.checked) {
441 return "biblionumber=" + document.bookbag_form.biblionumber.value;
447 var position = $("#cartmenulink").offset();
448 var scrolld = $(window).scrollTop();
449 var top = position.top + $("#cartmenulink").outerHeight();
454 var buttonWidth = $("#cartmenulink").innerWidth();
455 var buttonOffset = menuWidth - buttonWidth;
456 var left = position.left - 0 // buttonOffset;
458 .css({"position":"absolute", "top":top, "left":left})
463 $("#cartDetails").fadeOut("fast");
466 function updateLink(val,op,target){
469 target.$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_IN_CART ).addClass("incart");
470 target.$("a.cartR"+val).show();
472 target.$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_NOT_IN_CART ).removeClass("incart").addClass("addtocart cart"+val);
473 target.$("a.cartR"+val).hide();
477 $("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_IN_CART ).addClass("incart");
478 $("a.cartR"+val).show();
480 $("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_NOT_IN_CART ).removeClass("incart").addClass("addtocart cart"+val);
481 $("a.cartR"+val).hide();
486 function updateAllLinks(target){
488 target.$("a.incart").html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_NOT_IN_CART ).removeClass("incart").addClass("addtocart");
489 target.$("a.cartRemove").hide();
491 $("a.incart").html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + MSG_ITEM_NOT_IN_CART ).removeClass("incart").addClass("addtocart");
492 $("a.cartRemove").hide();
496 $("#cartDetails").ready(function(){
497 $("#cartDetails,#cartmenulink").on("click",function(){ hideCart(); });
498 $("#cartmenulink").click(function(e){
501 $("li").closest().removeClass("open");
503 updateBasket(basketCount());