Follow up for 6665 : Fixing the hide_marc pref also
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / cataloguing / addbiblio.tt
1 [% INCLUDE 'doc-head-open.inc' %]
2 <title>Koha &rsaquo; Cataloging &rsaquo; [% IF ( biblionumber ) %]Editing [% title |html %] (Record Number [% biblionumber %])[% ELSE %]Add MARC Record[% END %]</title>
3 [% INCLUDE 'doc-head-close.inc' %]
4 <script type="text/javascript" src="[% themelang %]/lib/yui/plugins/bubbling-min.js"></script>
5 <script type="text/javascript">
6 //<![CDATA[
7
8      var fields_in_use = {};
9          $(document).ready(function() {
10                 $('#addbibliotabs > ul').tabs().bind('show.ui-tabs', function(e, ui) {
11                         $("#"+ui.panel.id+" input:eq(0)").focus();
12                 });
13         $('.tag').each(function() {
14             var field_id = this.getAttribute('id').substring(0, 7);
15             if (field_id in fields_in_use) {
16                 fields_in_use[field_id]++;
17             } else {
18                 fields_in_use[field_id] = 1;
19             }
20         });
21         $('.subfield_line').each(function() {
22             var field_id = this.getAttribute('id').substring(0, 12);
23             if (field_id in fields_in_use) {
24                 fields_in_use[field_id]++;
25             } else {
26                 fields_in_use[field_id] = 1;
27             }
28         });
29                 /* check cookie to hide/show marcdocs*/
30                 if($.cookie("marcdocs_[% borrowernumber %]") == 'false'){
31                         hideMARCdocLinks();
32                         $("#marcDocsSelect").attr('checked',false);
33                 } else {
34                         /* reset cookie expire date */
35                         $.cookie("marcdocs_[% borrowernumber %]",'true',
36                                                 { path: "/", expires: 365 });
37                 }
38
39         });
40
41         $('#header_search > ul').tabs().bind('show.ui-tabs', function(e, ui) { $('#header_search > div:not(.ui-tabs-hide)').find('input').eq(0).focus(); });
42
43
44 function confirmnotdup(redirect){
45         $("#confirm_not_duplicate").attr("value","1");
46     $("#redirect").attr("value",redirect);
47         Check();
48 }
49
50 /**
51  * 
52  * 
53  */
54 function Check(){
55     var StrAlert = AreMandatoriesNotOk();
56     if( ! StrAlert ){
57         document.f.submit();
58         return true;
59     } else {
60         alert(StrAlert);
61         return false;
62     }
63 }
64
65 function Dopop(link,i) {
66     defaultvalue = document.getElementById(i).value;
67     window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
68 }
69
70 /**
71  * this function open a popup to search on z3950 server.
72  */
73 function PopupZ3950() {
74     var strQuery = GetZ3950Terms();
75         if(strQuery){
76         window.open("/cgi-bin/koha/cataloguing/z3950_search.pl?biblionumber=[% biblionumber %]"+strQuery,"z3950search",'width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes');
77     } 
78 }
79
80 function PopupMARCFieldDoc(field, blocknumber) {
81     [% IF ( MARC21 ) %]
82         _MARC21FieldDoc(field);
83     [% ELSE %]
84         _UNIMARCFieldDoc(field, blocknumber);
85     [% END %]
86 }
87
88 function _MARC21FieldDoc(field) {
89     if(field == 0) {
90         window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
91     } else if (field < 900) {
92         window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
93     } else {
94         window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
95     }
96 }
97
98 function _UNIMARCFieldDoc(field, blocknumber) {
99     /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
100        seems to be the only version available that can be linked to per tag.  More recent
101        versions of the UNIMARC standard are available on the IFLA website only as
102        PDFs!
103     */
104     if(field == 0) {
105         window.open("http://archive.ifla.org/VI/3/p1996-1/uni.htm");
106     } else if (field < 100) {
107         window.open("http://archive.ifla.org/VI/3/p1996-1/uni"+blocknumber+".htm#b" + ("000"+field).slice(-3));
108     } else if (field < 900) {
109         window.open("http://archive.ifla.org/VI/3/p1996-1/uni"+blocknumber+".htm#" + ("000"+field).slice(-3));
110     } else {
111         window.open("http://archive.ifla.org/VI/3/p1996-1/uni9.htm");
112     }
113 }
114
115 /*
116  * Functions to hide/show marc docs links
117  */
118 function hideMARCdocLinks() {
119         $(".marcdocs").hide();
120         $.cookie("marcdocs_[% borrowernumber %]",'false', { path: "/", expires: 365 });
121 }
122
123 function showMARCdocLinks() {
124         $(".marcdocs").show();
125         $.cookie("marcdocs_[% borrowernumber %]",'true', { path: "/", expires: 365 });
126 }
127
128 /**
129  * check if mandatory subfields are written
130  */
131 function AreMandatoriesNotOk(){
132     var mandatories = new Array();
133     var mandatoriesfields = new Array();
134     var tab = new Array();
135     var label = new Array();
136     var flag=0;
137     var tabflag= new Array();  
138     [% FOREACH BIG_LOO IN BIG_LOOP %]
139         [% FOREACH innerloo IN BIG_LOO.innerloop %]
140                 [% IF ( innerloo.mandatory ) %]
141                 mandatoriesfields.push(new Array("[% innerloo.tag %]","[% innerloo.index %][% innerloo.random %]","[% innerloo.index %]"));
142                 [% END %]
143                 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
144                         [% IF ( subfield_loo.mandatory ) %]mandatories.push("[% subfield_loo.id %]");
145                         tab.push("[% BIG_LOO.number %]");
146                         label.push("[% subfield_loo.marc_lib %]");
147                 [% END %]
148             [% END %]
149         [% END %]
150     [% END %]
151     var StrAlert = _("Can't save this record because the following field aren't filled:");
152     StrAlert += "\n\n";
153     for(var i=0,len=mandatories.length; i<len ; i++){
154         var tag=mandatories[i].substr(4,3);
155         var subfield=mandatories[i].substr(17,1);
156         var tagnumber=mandatories[i].substr(19,mandatories[i].lastIndexOf("_")-19);
157         if (tabflag[tag+subfield+tagnumber] ==  null) { 
158             tabflag[tag+subfield+tagnumber]=new Array();
159             tabflag[tag+subfield+tagnumber][0]=0; 
160         }
161         if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(mandatories[i]) != null && ! document.getElementById(mandatories[i]).value || document.getElementById(mandatories[i]) == null)){
162             tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
163             document.getElementById(mandatories[i]).setAttribute('class','subfield_not_filled');
164             $('#' + mandatories[i]).focus();
165             tabflag[tag+subfield+tagnumber][1]=label[i];
166             tabflag[tag+subfield+tagnumber][2]=tab[i];
167         } else {
168             tabflag[tag+subfield+tagnumber][0] = 1;
169         }    
170     }
171     for (var tagsubfieldid in tabflag){
172       if (tabflag[tagsubfieldid][0]==0){
173         var tag=tagsubfieldid.substr(0,3);
174         var subfield=tagsubfieldid.substr(3,1);    
175         StrAlert += "\t* "+_("tag ")+tag+_(" subfield ")+subfield+" "+tabflag[tagsubfieldid][1]+_(" in tab ")+tabflag[tagsubfieldid][2]+"\n";
176         //StrAlert += "\t* "+label[i]+_(" in tab ")+tab[i]+"\n"; 
177         flag=1;    
178       }   
179     }   
180     
181     /* Check for mandatories field(not subfields) */
182     for(var i=0,len=mandatoriesfields.length; i<len; i++){
183             isempty  = true;
184                 arr      = mandatoriesfields[i];
185         divid    = "tag_" + arr[0] + "_" + arr[1];
186         varegexp = new RegExp("^tag_" + arr[0] + "_code_");
187         
188                 if(parseInt(arr[0]) >= 10){
189                 elem = document.getElementById(divid);
190                 eleminputs = elem.getElementsByTagName('input');
191                 
192                 for(var j=0,len2=eleminputs.length; j<len2; j++){
193         
194                         if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
195                                         inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
196                                         
197                                         for( var k=0; k<len2; k++){
198                                                 if(eleminputs[k].id.match(inputregexp) && eleminputs[k].value){
199                                                         isempty = false
200                                                 }
201                                         }
202                                         
203                                         elemselect = elem.getElementsByTagName('select');
204                                         for( var k=0; k<elemselect.length; k++){
205                                                 if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
206                                                         isempty = false
207                                                 }
208                                         }
209                         }
210                 }
211
212                 elemtextareas = elem.getElementsByTagName('textarea');
213                 for(var j=0,len2=elemtextareas.length; j<len2; j++){
214                 // this bit assumes that the only textareas in this context would be for subfields
215                 if (elemtextareas[j].value) {
216                     isempty = false;
217                 }
218             }
219         }else{
220                 isempty = false;
221         }
222         
223         if(isempty){
224                 flag = 1;
225                 StrAlert += _("\t* Field ") + arr[0] + _(" is mandatory, at least one of its subfields must be filled.") + "\n";
226         }
227         
228     }
229     
230     if(flag){
231             return StrAlert;
232         } else {
233                 return flag;
234         }
235 }
236
237 /** 
238  * check if z3950 mandatories are set or not
239  */
240 function GetZ3950Terms(){
241  var strQuery="&frameworkcode="+document.forms['f'].frameworkcode.value;
242     var mandatories = new Array();
243     var mandatories_label = new Array();
244     [% FOREACH BIG_LOO IN BIG_LOOP %][% FOREACH innerloo IN BIG_LOO.innerloop %][% FOREACH subfield_loo IN innerloo.subfield_loop %][% IF ( subfield_loo.z3950_mandatory ) %]mandatories.push("[% subfield_loo.id %]");
245         mandatories_label.push("[% subfield_loo.z3950_mandatory %]");[% END %][% END %][% END %][% END %]
246     
247     for(var i=0,len=mandatories.length; i<len ; i++){
248         var field_value = document.getElementById(mandatories[i]).value;
249         if( field_value ){
250             strQuery += "&"+mandatories_label[i]+"="+field_value;
251         }
252     }
253     return strQuery;
254 }
255
256 function Changefwk(FwkList) {
257         var fwk = FwkList.options[FwkList.selectedIndex].value;
258         window.location = "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% biblionumberdata %]&op=[% op %]&breedingid=[% breedingid %]&mode=[% popup %]&frameworkcode="+fwk;
259
260 }
261
262 // returns the subfieldcode based upon subfieldid writing
263 function getSubfieldcode(tagsubfieldid){
264     // 3 : tag +3 : tagnumber +4 : number of _ +8 subfield -1 begins at 0  
265     return tagsubfieldid.substr(3+3+4+8-1,1);
266 }
267
268 // Take the base of tagsubfield information (removing the subfieldcodes and subfieldindexes)
269 // returns the filter
270 function getTagInputnameFilter(tagsubfieldid){
271     var tagsubfield=tagsubfieldid.substr(0,tagsubfieldid.lastIndexOf("_"));  
272     var tagcode=tagsubfield.substr(tagsubfield.lastIndexOf("_"));
273     tagsubfield=tagsubfield.substr(0,tagsubfield.lastIndexOf("_"));
274     tagsubfield=tagsubfield.substr(0,tagsubfield.lastIndexOf("_"));
275     tagsubfield=tagsubfield+"_."+tagcode;
276     return tagsubfield;  
277 }
278
279 function openAuth(tagsubfieldid,authtype) {
280     // let's take the base of tagsubfield information (removing the indexes and the codes
281     var element=document.getElementById(tagsubfieldid);
282     var tagsubfield=getTagInputnameFilter(tagsubfieldid);
283     var elementsubfcode=getSubfieldcode(element.name);
284     var mainmainstring=element.value;
285     var mainstring="";  
286     var inputs = element.parentNode.parentNode.getElementsByTagName("input");
287
288     for (var myindex =0; myindex<inputs.length;myindex++){
289         if (inputs[myindex].name && inputs[myindex].name.match(tagsubfield)){
290             var subfieldcode=getSubfieldcode(inputs[myindex].name);
291             if (isNaN(parseInt(subfieldcode)) && inputs[myindex].value != "" && subfieldcode!=elementsubfcode){
292                 mainstring=inputs[myindex].value+" "+mainstring;
293             }      
294         }
295     }           
296         newin=window.open("../authorities/auth_finder.pl?authtypecode="+  authtype+ "&index="+tagsubfieldid+"&value_mainstr="+encodeURI(mainmainstring)+"&value_main="+encodeURI(mainstring), "_blank",'width=700,height=550,toolbar=false,scrollbars=yes');
297 }
298
299
300 function ExpandField(index) {
301     var original = document.getElementById(index); //original <div>
302     var divs = original.getElementsByTagName('div');
303     for(var i=0,divslen = divs.length ; i<divslen ; i++){      // foreach div
304         if(divs[i].getAttribute('id').match(/^subfield/)){  // if it s a subfield
305             if (divs[i].style.display == 'block') {
306                 divs[i].style.display = 'none';
307             } else {
308                 divs[i].style.display = 'block';
309             }
310         }
311     }
312 }
313
314 /**
315  * To clone a field or a subfield by clicking on '+' button
316  */ 
317 function CloneField(index) {
318     var original = document.getElementById(index); //original <div>
319     fields_in_use[index.substr(0, 7)]++;
320     var clone = original.cloneNode(true);
321     var new_key = CreateKey();
322     var new_id  = original.getAttribute('id')+new_key;
323     
324     clone.setAttribute('id',new_id); // setting a new id for the parent div
325     
326     var divs = clone.getElementsByTagName('div');
327     
328     [% UNLESS ( hide_marc ) %] // No indicator if hide_marc
329         // setting a new name for the new indicator
330         for(var i=0; i < 2; i++) {
331             var indicator = clone.getElementsByTagName('input')[i];
332             indicator.setAttribute('name',indicator.getAttribute('name')+new_key);
333         }
334     [% END %]
335         
336     // settings all subfields
337     for(var i=0,divslen = divs.length ; i<divslen ; i++){      // foreach div
338         if(divs[i].getAttribute("id").match(/^subfield/)){  // if it s a subfield
339             
340             // set the attribute for the new 'div' subfields
341             divs[i].setAttribute('id',divs[i].getAttribute('id')+new_key);
342             
343             var inputs   = divs[i].getElementsByTagName('input');
344             var id_input = "";
345             
346             for( j = 0 ; j < inputs.length ; j++ ) {
347                 if(inputs[j].getAttribute("id") && inputs[j].getAttribute("id").match(/^tag_/) ){
348                         inputs[j].value = "";
349                 }
350             }
351             
352             inputs[0].setAttribute('id',inputs[0].getAttribute('id')+new_key);
353             inputs[0].setAttribute('name',inputs[0].getAttribute('name')+new_key);
354             var id_input;
355             try {
356                 id_input = inputs[1].getAttribute('id')+new_key;
357                 inputs[1].setAttribute('id',id_input);
358                 inputs[1].setAttribute('name',inputs[1].getAttribute('name')+new_key);
359             } catch(e) {
360                 try{ // it s a select if it is not an input
361                     var selects = divs[i].getElementsByTagName('select');
362                     id_input = selects[0].getAttribute('id')+new_key;
363                     selects[0].setAttribute('id',id_input);
364                     selects[0].setAttribute('name',selects[0].getAttribute('name')+new_key);
365                 }catch(e2){ // it is a textarea if it s not a select or an input
366                         var textaeras = divs[i].getElementsByTagName('textarea');
367                         id_input = textaeras[0].getAttribute('id')+new_key;
368                         textaeras[0].setAttribute('id',id_input);
369                     textaeras[0].setAttribute('name',textaeras[0].getAttribute('name')+new_key);
370                 }
371             }
372             
373             [% UNLESS ( advancedMARCEditor ) %]
374             // when cloning a subfield, re set its label too.
375             var labels = divs[i].getElementsByTagName('label');
376             labels[0].setAttribute('for',id_input);
377             [% END %]
378             
379             [% UNLESS ( hide_marc ) %]
380                 // updating javascript parameters on button up
381                 var imgs = divs[i].getElementsByTagName('img');
382                 imgs[0].setAttribute('onclick',"upSubfield(\'"+divs[i].getAttribute('id')+"\');");
383             [% END %]
384             
385             // setting its '+' and '-' buttons
386             try {
387                 var anchors = divs[i].getElementsByTagName('a');
388                 for (var j = 0; j < anchors.length; j++) {
389                     if(anchors[j].getAttribute('class') == 'buttonPlus'){
390                         anchors[j].setAttribute('onclick',"CloneSubfield('" + divs[i].getAttribute('id') + "')");
391                     } else if (anchors[j].getAttribute('class') == 'buttonMinus') {
392                         anchors[j].setAttribute('onclick',"UnCloneField('" + divs[i].getAttribute('id') + "')");
393                     }
394                 }
395             }
396             catch(e){
397                 // do nothig if ButtonPlus & CloneButtonPlus don t exist.
398             }
399             
400             // button ...
401             var spans=0;
402             try {
403                 spans = divs[i].getElementsByTagName('a');
404             } catch(e) {
405                 // no spans
406             }
407             if(spans){
408                 var buttonDot;
409                 if(!CloneButtonPlus){ // it s impossible to have  + ... (buttonDot AND buttonPlus)
410                     buttonDot = spans[0];
411                     if(buttonDot){
412                         // 2 possibilities :
413                         try{
414                             var buttonDotOnClick = buttonDot.getAttribute('onclick');
415                             if(buttonDotOnClick.match('Clictag')){   // -1- It s a plugin
416                                 var re = /\('.*'\)/i;
417                                 buttonDotOnClick = buttonDotOnClick.replace(re,"('"+inputs[1].getAttribute('id')+"')");
418                                 if(buttonDotOnClick){
419                                     buttonDot.setAttribute('onclick',buttonDotOnClick);
420                                 }
421                             } else {
422                                 if(buttonDotOnClick.match('Dopop')) {  // -2- It's a auth value
423                                     var re1 = /&index=.*',/;
424                                     var re2 = /,.*\)/;
425
426                                     buttonDotOnClick = buttonDotOnClick.replace(re1,"&index="+inputs[1].getAttribute('id')+"',");
427                                     buttonDotOnClick = buttonDotOnClick.replace(re2,",'"+inputs[1].getAttribute('id')+"')");
428                                     
429                                     if(buttonDotOnClick){
430                                             buttonDot.setAttribute('onclick',buttonDotOnClick);
431                                     }
432                                 }
433                             }
434                             try {
435                                 // do not copy the script section.
436                                 var script = spans[0].getElementsByTagName('script')[0];
437                                 spans[0].removeChild(script);
438                             } catch(e) {
439                                 // do nothing if there is no script
440                             }
441                         }catch(e){}
442                         }
443                 }
444             }
445             [% UNLESS ( hide_marc ) %]
446                 var buttonUp = divs[i].getElementsByTagName('img')[0];
447                 buttonUp.setAttribute('onclick',"upSubfield('" + divs[i].getAttribute('id') + "')");
448             [% END %]
449             
450         } else { // it's a indicator div
451             if(divs[i].getAttribute('id').match(/^div_indicator/)){
452                 var inputs = divs[i].getElementsByTagName('input');
453                 inputs[0].setAttribute('id',inputs[0].getAttribute('id')+new_key);
454                 inputs[1].setAttribute('id',inputs[1].getAttribute('id')+new_key);
455                 
456                 var CloneButtonPlus;
457                 try {
458                     var anchors = divs[i].getElementsByTagName('a');
459                     for (var j = 0; j < anchors.length; j++) {
460                         if (anchors[j].getAttribute('class') == 'buttonPlus') {
461                             anchors[j].setAttribute('onclick',"CloneField('" + new_id + "')");
462                         } else if (anchors[j].getAttribute('class') == 'buttonMinus') {
463                             anchors[j].setAttribute('onclick',"UnCloneField('" + new_id + "')");
464                         } else if (anchors[j].getAttribute('class') == 'expandfield') {
465                             anchors[j].setAttribute('onclick',"ExpandField('" + new_id + "')");
466                         }
467                     }
468                 }
469                 catch(e){
470                     // do nothig CloneButtonPlus doesn't exist.
471                 }
472
473             }
474         }
475     }
476     
477     // insert this line on the page
478     original.parentNode.insertBefore(clone,original.nextSibling);
479 }
480
481 function CloneSubfield(index){
482     var original = document.getElementById(index); //original <div>
483     fields_in_use[index.substr(0, 12)]++;
484     var clone = original.cloneNode(true);
485     var new_key = CreateKey();
486     var new_id  = original.getAttribute('id')+new_key;
487     // set the attribute for the new 'div' subfields
488     var inputs     = clone.getElementsByTagName('input');
489     var selects    = clone.getElementsByTagName('select');
490     var textareas  = clone.getElementsByTagName('textarea');
491     var linkid;
492
493     // input
494     var id_input = "";
495     for(var i=0,len=inputs.length; i<len ; i++ ){
496         id_input = inputs[i].getAttribute('id')+new_key;
497         inputs[i].setAttribute('id',id_input);
498         inputs[i].setAttribute('name',inputs[i].getAttribute('name')+new_key);
499         linkid = id_input;
500     }
501     
502     // select 
503     for(var i=0,len=selects.length; i<len ; i++ ){
504         id_input = selects[i].getAttribute('id')+new_key;
505         selects[i].setAttribute('id',selects[i].getAttribute('id')+new_key);
506         selects[i].setAttribute('name',selects[i].getAttribute('name')+new_key);
507     }
508     
509     // textarea
510     for(var i=0,len=textareas.length; i<len ; i++ ){
511         id_input = textareas[i].getAttribute('id')+new_key;
512         textareas[i].setAttribute('id',textareas[i].getAttribute('id')+new_key);
513         textareas[i].setAttribute('name',textareas[i].getAttribute('name')+new_key);
514     }
515
516     // Changing the "..." link's onclick attribute for plugin callback
517     var links  = clone.getElementsByTagName('a');
518     var link = links[0];
519     var buttonDotOnClick = link.getAttribute('onclick');
520     if(buttonDotOnClick.match('Clictag')){   // -1- It s a plugin
521         var re = /\('.*'\)/i;
522         buttonDotOnClick = buttonDotOnClick.replace(re,"('"+linkid+"')");
523         if(buttonDotOnClick){
524             link.setAttribute('onclick',buttonDotOnClick);
525         }
526     }
527
528
529     [% UNLESS ( advancedMARCEditor ) %]
530     // when cloning a subfield, reset its label too.
531     var label = clone.getElementsByTagName('label')[0];
532     label.setAttribute('for',id_input);
533     [% END %]
534     
535     // setting a new id for the parent div
536     clone.setAttribute('id',new_id);
537     
538     try {
539         var buttonUp = clone.getElementsByTagName('img')[0];
540         buttonUp.setAttribute('onclick',"upSubfield('" + new_id + "')");
541         var anchors = clone.getElementsByTagName('a');
542         if(anchors.length){
543             for(var i = 0 ,lenanchors = anchors.length ; i < lenanchors ; i++){
544                 if(anchors[i].getAttribute('class') == 'buttonPlus'){
545                     anchors[i].setAttribute('onclick',"CloneSubfield('" + new_id + "')");
546                 } else if (anchors[i].getAttribute('class') == 'buttonMinus') {
547                     anchors[i].setAttribute('onclick',"UnCloneField('" + new_id + "')");
548                 }
549             }
550         }
551     }
552     catch(e){
553         // do nothig if ButtonPlus & CloneButtonPlus don't exist.
554     }
555     // insert this line on the page
556     original.parentNode.insertBefore(clone,original.nextSibling);
557 }
558
559  /**
560  * This function removes or clears unwanted subfields
561  */
562 function UnCloneField(index) {
563     var original = document.getElementById(index);
564     var field_id;
565     if (index.match("tag")) {
566         field_id = index.substr(0, 7);
567     } else {
568         field_id = index.substr(0, 12);
569     }
570     if (1 == fields_in_use[field_id]) {
571         // clear inputs, but don't delete
572         $(":input.input_marceditor", original).each(function(){
573             // thanks to http://www.learningjquery.com/2007/08/clearing-form-data for
574             // hint about clearing selects correctly
575             var type = this.type;
576             var tag = this.tagName.toLowerCase();
577             if (type == 'text' || type == 'password' || tag == 'textarea') {
578                 this.value = "";
579             } else if (type == 'checkbox' || type == 'radio') {
580                 this.checked = false;
581             } else if (tag == 'select') {
582                 this.selectedIndex = -1;
583             }
584         });
585         $(":input.indicator", original).val("");
586     } else {
587         original.parentNode.removeChild(original);
588         fields_in_use[field_id]--;
589     }
590 }
591
592 /**
593  * This function create a random number
594  */
595 function CreateKey(){
596     return parseInt(Math.random() * 100000);
597 }
598
599 /**
600  * This function allows to move a subfield up by clickink on the 'up' button .
601  */
602 function upSubfield(index) {
603     try{
604         var line = document.getElementById(index); // get the line where the user has clicked.
605     } catch(e) {
606         return; // this line doesn't exist...
607     }
608     var tag = line.parentNode; // get the dad of this line. (should be "<div id='tag_...'>")
609     
610     // getting all subfields for this tag
611     var subfields = tag.getElementsByTagName('div');
612     var subfieldsLength = subfields.length;
613     
614     if(subfieldsLength<=1) return; // nothing to do if there is just one subfield.
615     
616     // among all subfields 
617     for(var i=0;i<subfieldsLength;i++){ 
618         if(subfields[i].getAttribute('id') == index){ //looking for the subfield which is clicked :
619             if(i==1){ // if the clicked subfield is on the top
620                 tag.appendChild(subfields[1]);
621                 return;
622             } else {
623                 var lineAbove = subfields[i-1];
624                 tag.insertBefore(line,lineAbove);
625                 return;
626             }
627         }
628     }
629 }
630
631 function unHideSubfield(index,labelindex) { // FIXME :: is it used ?
632     subfield = document.getElementById(index);
633     subfield.style.display = 'block';
634     label = document.getElementById(labelindex);
635     label.style.display='none'; 
636 }
637 //]]>
638 </script>
639 <link type="text/css" rel="stylesheet" href="[% themelang %]/css/addbiblio.css" />
640 </head>
641 <body>
642 <div id="yui-cms-loading">
643       <div id="yui-cms-float">
644           Loading, please wait...
645       </div>
646   </div>
647 <script type="text/javascript" src="[% themelang %]/lib/yui/plugins/loading-min.js"></script>
648 <script type="text/javascript">
649 //<![CDATA[
650 (function() {
651         // configuring the loading mask
652         YAHOO.widget.Loading.config({
653                 opacity: 0.8
654         });
655 })();
656 //]]>
657 </script>
658 [% INCLUDE 'header.inc' %]
659 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/cataloguing/addbooks.pl">Cataloging</a>  &rsaquo; [% IF ( biblionumber ) %]Editing <em>[% title |html %]</em> (Record Number [% biblionumber %])[% ELSE %]Add MARC Record[% END %]</div>
660
661 <div id="doc" class="yui-t7">
662
663 <div id="bd">
664         <div id="yui-main">
665         <div class="yui-g">
666
667
668
669 <h1>[% IF ( biblionumber ) %]Editing <em>[% title |html %]</em> (Record Number [% biblionumber %])</h1>[% ELSE %]Add MARC Record</h1>[% END %]
670 <div><input type="checkbox" name="marcDocsSelect" id="marcDocsSelect" checked="true" /> Show MARC tag documentation links<br/></div>
671
672 [% UNLESS ( number ) %]
673     <!-- show duplicate warning on tab 0 only -->
674         [% IF ( duplicatebiblionumber ) %]
675                     <div class="dialog alert">
676                         <h4>Duplicate Record suspected</h4>
677                         <p>Is this a duplicate of <a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% duplicatebiblionumber %]" onclick="openWindow('../MARCdetail.pl?biblionumber=[% duplicatebiblionumber %]&amp;popup=1', 'Duplicate biblio'; return false;)">[% duplicatetitle %]</a>?</p>
678                         [% IF ( CAN_user_editcatalogue_edit_items ) %]<form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
679                                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber %]" />
680                                                     <input type="submit" class="edit" value="Yes: Edit existing items" />
681                                                 </form>[% ELSE %]<form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
682                                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber %]" />
683                                                     <input type="submit" value="Yes: View existing items" />
684                                                 </form>[% END %]
685                         <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
686                         [% IF ( CAN_user_editcatalogue_edit_items ) %]<input type="button" class="save" onclick="confirmnotdup('items'); return false;" value="No: Save as New Record" />[% ELSE %]<input type="button" class="save" onclick="confirmnotdup('view'); return false;" value="No: Save as New Record" />[% END %]
687                         </form>
688                     </div>
689         [% END %]
690     [% END %]
691
692 [% IF ( done ) %]
693     <script type="text/javascript">
694         opener.document.forms['f'].biblionumber.value=[% biblionumber %];
695         opener.document.forms['f'].title.value='[% title |html %]';
696         window.close();
697     </script>
698 [% ELSE %]
699     <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
700     <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
701         <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
702 [% END %]
703         
704 <div id="toolbar">
705
706 <script type="text/javascript">
707         //<![CDATA[
708
709         // prepare DOM for YUI Toolbar
710
711          $(document).ready(function() {
712                 $("#z3950searchc").empty();
713         $("#savebutton").empty();
714             yuiToolbar();
715
716         $("#marcDocsSelect").click(function(){
717             if($(this).attr("checked")){
718                 showMARCdocLinks();
719             } else {
720                 hideMARCdocLinks();
721             }
722         });
723          });
724
725     function redirect(dest){
726         $("#redirect").attr("value",dest);
727         return Check();
728     }
729 [% IF ( CAN_user_editcatalogue_edit_items ) %]
730     var onOption = function () {
731         return Check();
732     }
733
734     var savemenu = [
735         { text: _("Save and view record"), value: 1, onclick: {fn:function(){redirect("view");}} },
736         { text: _("Save and edit items"), value: 2, onclick: {fn:function(){redirect("items");}} }
737     ];
738 [% END %]
739
740         // YUI Toolbar Functions
741
742         function yuiToolbar() {
743 [% IF ( CAN_user_editcatalogue_edit_items ) %]
744         var savesplitmenu = new YAHOO.widget.Button({
745             type: "split",
746             label: _("Save"),
747             id: "addbiblio",
748             name: "savemenubutton",
749             menu: savemenu,
750             container: "savebutton"
751          });
752
753         savesplitmenu.on("click", onOption); 
754 [% ELSE %]
755         new YAHOO.widget.Button({
756             id: "addbiblio",
757             type: "button",
758             label: _("Save"),
759             container: "savebutton",
760             onclick: {fn:function(){redirect("view");}}
761         });
762 [% END %]
763                 new YAHOO.widget.Button({
764             id: "z3950search",
765             type: "button",
766             label: _("Z39.50 Search"),
767             container: "z3950searchc",
768                         onclick: {fn:function(){PopupZ3950()}}
769         });
770         }
771
772         //]]>
773         </script>
774
775                 <ul class="toolbar">
776                         <li id="savebutton"><input id="addbiblio" type="submit" value="Save" /></li>
777                         <li id="z3950searchc"><input type="button" id="z3950search" value="Z39.50 Search" onclick="PopupZ3950(); return false;" /></li>
778                         <li id="changeframework"><label for="Frameworks">Change framework: </label>
779                         <select name="Frameworks" id="Frameworks" onchange="Changefwk(this);">
780                                         <option value="Default">Default</option>
781                                                         [% FOREACH frameworkcodeloo IN frameworkcodeloop %]                                             
782                                 <option value="[% frameworkcodeloo.value %]" [% frameworkcodeloo.selected %]>
783                                                      [% frameworkcodeloo.frameworktext %]                                      
784                                  </option>                          
785                                                 [% END %]
786                         </select> 
787 <input type="hidden" name="op" value="addbiblio" /></li>
788                 </ul>
789 </div>
790
791 [% IF ( popup ) %]
792         <input type="hidden" name="mode" value="popup" />
793 [% END %]
794         <input type="hidden" name="frameworkcode" value="[% frameworkcode %]" />
795         <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
796         <input type="hidden" name="breedingid" value="[% breedingid %]" />
797
798 <div id="addbibliotabs" class="toptabs numbered">
799         <ul>[% FOREACH BIG_LOO IN BIG_LOOP %]
800           <li>  [% IF ( BIG_LOO.number ) %]
801                 <a href="/cgi-bin/koha/cataloguing/addbiblio.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
802             [% ELSE %]
803                 <a href="/cgi-bin/koha/cataloguing/addbiblio.pl#tab[% BIG_LOO.number %]XX">[% BIG_LOO.number %]</a>
804             [% END %]</li>
805         [% END %]</ul>
806
807 [% FOREACH BIG_LOO IN BIG_LOOP %]
808 <!-- hide every tab except the 1st -->
809 [% IF ( BIG_LOO.number ) %]
810     <div id="tab[% BIG_LOO.number %]XX">
811 [% ELSE %]
812     <div id="tab[% BIG_LOO.number %]XX">
813 [% END %]
814
815     
816     [% FOREACH innerloo IN BIG_LOO.innerloop %]
817         [% IF ( innerloo.tag ) %]
818         <div class="tag" id="tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]">
819         <div class="tag_title" id="div_indicator_tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]">
820             [% UNLESS hide_marc %]
821                 [% IF advancedMARCEditor %]
822                 <a href="#" tabindex="1" class="tagnum" title="[% innerloo.tag_lib %] - Click to Expand this Tag" onclick="ExpandField('tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]'); return false;">[% innerloo.tag %]</a>
823                 [% ELSE %]
824                         <span class="tagnum" title="[% innerloo.tag_lib %]">[% innerloo.tag %]<a class="marcdocs"
825                  onclick="PopupMARCFieldDoc('[% innerloo.tag %]', [% BIG_LOO.number %]); return false;">&nbsp;?</a></span>
826                 [% END %]
827                 [% IF ( innerloo.fixedfield ) %]
828                         <input tabindex="1" class="indicator flat" type="text" style="display:none;" name="tag_[% innerloo.tag %]_indicator1_[% innerloo.index %][% innerloo.random %]" size="1" maxlength="1" value="[% innerloo.indicator1 %]" />
829                         <input tabindex="1" class="indicator flat" type="text" style="display:none;" name="tag_[% innerloo.tag %]_indicator2_[% innerloo.index %][% innerloo.random %]" size="1" maxlength="1" value="[% innerloo.indicator2 %]" />
830                 [% ELSE %]
831                         <input tabindex="1" class="indicator flat" type="text" name="tag_[% innerloo.tag %]_indicator1_[% innerloo.index %][% innerloo.random %]" size="1" maxlength="1" value="[% innerloo.indicator1 %]" />
832                         <input tabindex="1" class="indicator flat" type="text" name="tag_[% innerloo.tag %]_indicator2_[% innerloo.index %][% innerloo.random %]" size="1" maxlength="1" value="[% innerloo.indicator2 %]" />
833                 [% END %] -
834             [% ELSE %]
835                 [% IF ( innerloo.fixedfield ) %]
836                     <input tabindex="1" type="hidden" name="tag_[% innerloo.tag %]_indicator1_[% innerloo.index %][% innerloo.random %]" value="[% innerloo.indicator1 %]" />
837                     <input tabindex="1" type="hidden" name="tag_[% innerloo.tag %]_indicator2_[% innerloo.index %][% innerloo.random %]" value="[% innerloo.indicator2 %]" />
838                 [% ELSE %]
839                     <input tabindex="1" type="hidden" name="tag_[% innerloo.tag %]_indicator1_[% innerloo.index %][% innerloo.random %]" value="[% innerloo.indicator1 %]" />
840                     <input tabindex="1" type="hidden" name="tag_[% innerloo.tag %]_indicator2_[% innerloo.index %][% innerloo.random %]" value="[% innerloo.indicator2 %]" />
841                 [% END %]
842             [% END %]
843
844             [% UNLESS advancedMARCEditor %]
845                     <a href="#" tabindex="1" class="expandfield" onclick="ExpandField('tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]'); return false;" title="Click to Expand this Tag">[% innerloo.tag_lib %]</a>
846             [% END %]
847             [% IF ( innerloo.repeatable ) %]
848                 <span class="subfield_controls"><a href="#" tabindex="1" class="buttonPlus" onclick="CloneField('tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]'); return false;" title="Repeat this Tag"><img src="/intranet-tmpl/prog/img/repeat-tag.png" alt="Repeat this Tag" /></a>
849             [% END %]
850                 <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]'); return false;" title="Delete this Tag"><img src="/intranet-tmpl/prog/img/delete-tag.png" alt="Delete this Tag" /></a></span>
851
852             
853         </div>
854         
855         [% FOREACH subfield_loo IN innerloo.subfield_loop %]
856             <!--  One line on the marc editor -->
857             <div class="subfield_line" style="[% subfield_loo.visibility %]; float: left; clear: left; width: 100%;" id="subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]">
858             
859                 [% UNLESS advancedMARCEditor %]
860                     <label for="tag_[% subfield_loo.tag %]_subfield_[% subfield_loo.subfield %]_[% subfield_loo.index %]_[% subfield_loo.index_subfield %]" [% IF ( subfield_loo.fixedfield ) %] style="display:none;" [% END %] class="labelsubfield">
861                 [% END %] 
862                 
863                 [% UNLESS hide_marc %]
864                 <span class="subfieldcode">[% IF ( subfield_loo.fixedfield ) %] 
865                         <img class="buttonUp" style="display:none;" src="[% themelang %]/../img/up.png" onclick="upSubfield('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]')" alt="Move Up" title="Move Up" />
866                     [% ELSE %]
867                         <img class="buttonUp" src="[% themelang %]/../img/up.png" onclick="upSubfield('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]')" alt="Move Up" title="Move Up" />
868                     [% END %]
869                         <input title="[% subfield_loo.marc_lib_plain %]" style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;" type="text" tabindex="0" name="tag_[% subfield_loo.tag %]_code_[% subfield_loo.subfield %]_[% subfield_loo.index %]_[% subfield_loo.index_subfield %]" value="[% subfield_loo.subfield %]" size="1" maxlength="1" class="flat" />
870  </span>
871                 [% ELSE %]
872                     <input type="hidden" name="tag_[% subfield_loo.tag %]_code_[% subfield_loo.subfield %]_[% subfield_loo.index %]_[% subfield_loo.index_subfield %]" value="[% subfield_loo.subfield %]" />
873  </span>
874                 [% END %]
875             
876                 [% UNLESS advancedMARCEditor %]
877                     [% IF ( subfield_loo.mandatory ) %]<span class="subfield subfield_mandatory">[% ELSE %]<span class="subfield">[% END %]
878                         [% subfield_loo.marc_lib_plain %]
879                         [% IF ( subfield_loo.mandatory ) %]<span class="mandatory_marker" title="This field is mandatory">*</span>[% END %]
880                     </span>
881                     </label>
882                 [% END %]
883                 
884                 [% subfield_loo.marc_value %]
885                 
886                 [% IF ( subfield_loo.repeatable ) %]
887                     <span class="subfield_controls"><a href="#" class="buttonPlus" tabindex="1" onclick="CloneSubfield('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]'); return false;"><img src="/intranet-tmpl/prog/img/clone-subfield.png" alt="Clone" title="Clone this subfield" /></a>
888                                         <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]'); return false;"><img src="/intranet-tmpl/prog/img/delete-subfield.png" alt="Delete" title="Delete this subfield" /></a></span>
889                 [% END %]
890
891                 
892             </div>
893             <!-- End of the line -->
894             
895         [% END %]
896         </div>
897         [% END %]<!-- tag -->
898     [% END %]
899     </div>
900 [% END %]
901 </div>
902 <!-- Fields for fast add cataloguing -->
903 <input type="hidden" name="barcode" value="[% barcode %]" />
904 <input type="hidden" name="branch" value="[% branch %]" />
905 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber %]" />
906 <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
907 <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
908 <!-- /End of fast add fields -->
909 </form>
910
911 </div>
912 </div>
913 </div>
914
915 [% INCLUDE 'intranet-bottom.inc' %]