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');
49 rule_warnings = []; disable_widgets('explain_marc');
51 var rows = document.getElementById('ctrl_rows').childNodes;
53 if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
54 test_tagnumber_rule(rows[r]);
57 rows = document.getElementById('data_rows').childNodes;
59 if ( (typeof(rows[r]) == 'object') &&
60 (rows[r].tagName == 'row') &&
61 (rows[r].getAttribute('hidden') != 'true')
63 test_tagnumber_rule(rows[r]);
64 test_ind1_rule(rows[r]);
65 test_ind2_rule(rows[r]);
66 test_subfield_rule(rows[r]);
69 if (rule_warnings.length > 0) {
70 enable_widgets('explain_marc'); }
74 mw.sdump('D_CAT','Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
77 function test_tagnumber_rule(r) {
78 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
80 var t = r.firstChild.firstChild;
81 if (t.value.length > 3) {
82 t.value = t.value.substr(0,3);
83 } else if (t.value.length < 3) {
84 switch(t.value.length) {
85 case 2: t.value = '0' + t.value; break;
86 case 1: t.value = '00' + t.value; break;
87 case 0: t.value = '000'; break;
90 removeCSSClass(t,'invalid');
91 if (marc_rules[t.value]) {
92 var rule = marc_rules[t.value];
93 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
94 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
95 addCSSClass(t,'invalid');
96 var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
97 rule_warnings.push(s); mw.sdump('D_CAT',s);
99 } else if (t.value != 'LDR') {
100 addCSSClass(t,'invalid');
101 var s = 'Tag ' + t.value + ' is unknown.\n';
102 rule_warnings.push(s); mw.sdump('D_CAT',s);
109 function test_ind1_rule(r) {
110 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
111 var tagnumber = r.childNodes[0].firstChild.value;
112 var ind1 = r.childNodes[1].firstChild;
113 removeCSSClass(ind1,'invalid');
114 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
115 var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
116 if (! ind1.value.match(eval(regex)) ) {
117 addCSSClass(ind1,'invalid');
118 var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
119 rule_warnings.push(s); mw.sdump('D_CAT',s);
124 function test_ind2_rule(r) {
125 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
126 var tagnumber = r.childNodes[0].firstChild.value;
127 var ind2 = r.childNodes[2].firstChild;
128 removeCSSClass(ind2,'invalid');
129 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
130 var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
131 if (! ind2.value.match(eval(regex)) ) {
132 addCSSClass(ind2,'invalid');
133 var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
134 rule_warnings.push(s); mw.sdump('D_CAT',s);
139 function test_subfield_rule(r) {
140 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
141 var tagnumber = r.childNodes[0].firstChild.value;
142 var data = r.childNodes[3].firstChild;
143 removeCSSClass(data,'invalid');
144 if (marc_rules[tagnumber]) {
145 var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
146 var subf_array = datastring.split(String.fromCharCode(8225));
147 if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
150 addCSSClass(data,'invalid');
151 var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
152 rule_warnings.push(s); mw.sdump('D_CAT',s);
156 for (var i in subf_array) {
157 if ((subf_array[i]=='')||(subf_array==null)) {
158 addCSSClass(data,'invalid');
159 var s = 'You have incomplete subfield delimiters.\n';
160 rule_warnings.push(s); mw.sdump('D_CAT',s);
163 var s_ind = subf_array[i].substr(0,1);
164 if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
165 var rule = marc_rules[tagnumber][s_ind];
167 if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
168 addCSSClass(data,'invalid');
169 var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
170 rule_warnings.push(s); mw.sdump('D_CAT',s);
173 addCSSClass(data,'invalid');
174 var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
175 rule_warnings.push(s); mw.sdump('D_CAT',s);