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');
50 rule_warnings = []; disable_widgets('explain_marc');
54 var rows = document.getElementById('ctrl_rows').childNodes;
58 if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
60 test_tagnumber_rule(rows[r]);
66 rows = document.getElementById('data_rows').childNodes;
70 if ( (typeof(rows[r]) == 'object') &&
71 (rows[r].tagName == 'row') &&
72 (rows[r].getAttribute('hidden') != 'true')
75 test_tagnumber_rule(rows[r]);
77 test_ind1_rule(rows[r]);
79 test_ind2_rule(rows[r]);
81 test_subfield_rule(rows[r]);
87 if (rule_warnings.length > 0) {
89 enable_widgets('explain_marc'); }
95 mw.sdump('D_CAT','Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
98 function test_tagnumber_rule(r) {
99 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
103 var t = r.firstChild.firstChild;
105 if (t.value.length > 3) {
107 t.value = t.value.substr(0,3);
109 } else if (t.value.length < 3) {
111 switch(t.value.length) {
112 case 2: t.value = '0' + t.value; break;
113 case 1: t.value = '00' + t.value; break;
114 case 0: t.value = '000'; break;
119 removeCSSClass(t,'invalid');
121 if (marc_rules[t.value]) {
123 var rule = marc_rules[t.value];
125 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
127 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
129 addCSSClass(t,'invalid');
131 var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
133 rule_warnings.push(s); mw.sdump('D_CAT',s);
137 } else if (t.value != 'LDR') {
139 addCSSClass(t,'invalid');
141 var s = 'Tag ' + t.value + ' is unknown.\n';
143 rule_warnings.push(s); mw.sdump('D_CAT',s);
153 function test_ind1_rule(r) {
154 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
155 var tagnumber = r.childNodes[0].firstChild.value;
156 var ind1 = r.childNodes[1].firstChild;
157 removeCSSClass(ind1,'invalid');
158 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
159 var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
160 if (! ind1.value.match(eval(regex)) ) {
161 addCSSClass(ind1,'invalid');
162 var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
163 rule_warnings.push(s); mw.sdump('D_CAT',s);
168 function test_ind2_rule(r) {
169 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
170 var tagnumber = r.childNodes[0].firstChild.value;
171 var ind2 = r.childNodes[2].firstChild;
172 removeCSSClass(ind2,'invalid');
173 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
174 var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
175 if (! ind2.value.match(eval(regex)) ) {
176 addCSSClass(ind2,'invalid');
177 var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
178 rule_warnings.push(s); mw.sdump('D_CAT',s);
183 function test_subfield_rule(r) {
184 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
185 var tagnumber = r.childNodes[0].firstChild.value;
186 var data = r.childNodes[3].firstChild;
187 removeCSSClass(data,'invalid');
188 if (marc_rules[tagnumber]) {
189 var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
190 var subf_array = datastring.split(String.fromCharCode(8225));
191 if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
194 addCSSClass(data,'invalid');
195 var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
196 rule_warnings.push(s); mw.sdump('D_CAT',s);
200 for (var i in subf_array) {
201 if ((subf_array[i]=='')||(subf_array==null)) {
202 addCSSClass(data,'invalid');
203 var s = 'You have incomplete subfield delimiters.\n';
204 rule_warnings.push(s); mw.sdump('D_CAT',s);
207 var s_ind = subf_array[i].substr(0,1);
208 if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
209 var rule = marc_rules[tagnumber][s_ind];
211 if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
212 addCSSClass(data,'invalid');
213 var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
214 rule_warnings.push(s); mw.sdump('D_CAT',s);
217 addCSSClass(data,'invalid');
218 var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
219 rule_warnings.push(s); mw.sdump('D_CAT',s);