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