1 var rule_warnings = [];
4 function explain_marc() {
6 for (var w in rule_warnings) {
7 s = s + rule_warnings[w];
12 function legend_marc() {
14 var rows = document.getElementById('ctrl_rows').childNodes;
16 if ( (typeof(rows[r]) == 'object') &&
17 (rows[r].tagName == 'row') &&
18 (rows[r].getAttribute('hidden') != 'true')
20 var tagnumber = rows[r].firstChild.firstChild.value;
21 if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
22 s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
24 s = s + tagnumber + '\n';
28 rows = document.getElementById('data_rows').childNodes;
30 if ( (typeof(rows[r]) == 'object') &&
31 (rows[r].tagName == 'row') &&
32 (rows[r].getAttribute('hidden') != 'true')
34 var tagnumber = rows[r].firstChild.firstChild.value;
35 if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
36 s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
38 s = s + tagnumber + '\n';
46 function handle_tag_change(ev) {
47 mw.sdump('D_CAT','Entering handle_tag_change: ' + timer_elapsed('cat') + '\n');
48 rule_warnings = []; disable_widgets('explain_marc');
50 var rows = document.getElementById('ctrl_rows').childNodes;
52 if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
53 test_tagnumber_rule(rows[r]);
56 rows = document.getElementById('data_rows').childNodes;
58 if ( (typeof(rows[r]) == 'object') &&
59 (rows[r].tagName == 'row') &&
60 (rows[r].getAttribute('hidden') != 'true')
62 test_tagnumber_rule(rows[r]);
63 test_ind1_rule(rows[r]);
64 test_ind2_rule(rows[r]);
65 test_subfield_rule(rows[r]);
68 if (rule_warnings.length > 0) { enable_widgets('explain_marc'); }
69 mw.sdump('D_CAT','Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
72 function test_tagnumber_rule(r) {
73 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
75 var t = r.firstChild.firstChild;
76 if (t.value.length > 3) {
77 t.value = t.value.substr(0,3);
78 } else if (t.value.length < 3) {
79 switch(t.value.length) {
80 case 2: t.value = '0' + t.value; break;
81 case 1: t.value = '00' + t.value; break;
82 case 0: t.value = '000'; break;
85 removeCSSClass(t,'invalid');
86 if (marc_rules[t.value]) {
87 var rule = marc_rules[t.value];
88 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
89 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
90 add_css_class(t,'invalid');
91 var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
92 rule_warnings.push(s); mw.sdump('D_CAT',s);
94 } else if (t.value != 'LDR') {
95 add_css_class(t,'invalid');
96 var s = 'Tag ' + t.value + ' is unknown.\n';
97 rule_warnings.push(s); mw.sdump('D_CAT',s);
104 function test_ind1_rule(r) {
105 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
106 var tagnumber = r.childNodes[0].firstChild.value;
107 var ind1 = r.childNodes[1].firstChild;
108 removeCSSClass(ind1,'invalid');
109 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
110 var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
111 if (! ind1.value.match(eval(regex)) ) {
112 add_css_class(ind1,'invalid');
113 var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
114 rule_warnings.push(s); mw.sdump('D_CAT',s);
119 function test_ind2_rule(r) {
120 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
121 var tagnumber = r.childNodes[0].firstChild.value;
122 var ind2 = r.childNodes[2].firstChild;
123 removeCSSClass(ind2,'invalid');
124 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
125 var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
126 if (! ind2.value.match(eval(regex)) ) {
127 add_css_class(ind2,'invalid');
128 var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
129 rule_warnings.push(s); mw.sdump('D_CAT',s);
134 function test_subfield_rule(r) {
135 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
136 var tagnumber = r.childNodes[0].firstChild.value;
137 var data = r.childNodes[3].firstChild;
138 removeCSSClass(data,'invalid');
139 if (marc_rules[tagnumber]) {
140 var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
141 var subf_array = datastring.split(String.fromCharCode(8225));
142 if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
145 add_css_class(data,'invalid');
146 var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
147 rule_warnings.push(s); mw.sdump('D_CAT',s);
151 for (var i in subf_array) {
152 if ((subf_array[i]=='')||(subf_array==null)) {
153 add_css_class(data,'invalid');
154 var s = 'You have incomplete subfield delimiters.\n';
155 rule_warnings.push(s); mw.sdump('D_CAT',s);
158 var s_ind = subf_array[i].substr(0,1);
159 if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
160 var rule = marc_rules[tagnumber][s_ind];
162 if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
163 add_css_class(data,'invalid');
164 var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
165 rule_warnings.push(s); mw.sdump('D_CAT',s);
168 add_css_class(data,'invalid');
169 var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
170 rule_warnings.push(s); mw.sdump('D_CAT',s);