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)
74 var t = r.firstChild.firstChild;
75 if (t.value.length > 3) {
76 t.value = t.value.substr(0,3);
77 } else if (t.value.length < 3) {
78 switch(t.value.length) {
79 case 2: t.value = '0' + t.value; break;
80 case 1: t.value = '00' + t.value; break;
81 case 0: t.value = '000'; break;
84 remove_css_class(t,'invalid');
85 if (marc_rules[t.value]) {
86 var rule = marc_rules[t.value];
87 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
88 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
89 add_css_class(t,'invalid');
90 var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
91 rule_warnings.push(s); mw.sdump('D_CAT',s);
93 } else if (t.value != 'LDR') {
94 add_css_class(t,'invalid');
95 var s = 'Tag ' + t.value + ' is unknown.\n';
96 rule_warnings.push(s); mw.sdump('D_CAT',s);
100 function test_ind1_rule(r) {
101 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
102 var tagnumber = r.childNodes[0].firstChild.value;
103 var ind1 = r.childNodes[1].firstChild;
104 remove_css_class(ind1,'invalid');
105 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
106 var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
107 if (! ind1.value.match(eval(regex)) ) {
108 add_css_class(ind1,'invalid');
109 var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
110 rule_warnings.push(s); mw.sdump('D_CAT',s);
115 function test_ind2_rule(r) {
116 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
117 var tagnumber = r.childNodes[0].firstChild.value;
118 var ind2 = r.childNodes[2].firstChild;
119 remove_css_class(ind2,'invalid');
120 if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
121 var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
122 if (! ind2.value.match(eval(regex)) ) {
123 add_css_class(ind2,'invalid');
124 var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
125 rule_warnings.push(s); mw.sdump('D_CAT',s);
130 function test_subfield_rule(r) {
131 // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
132 var tagnumber = r.childNodes[0].firstChild.value;
133 var data = r.childNodes[3].firstChild;
134 remove_css_class(data,'invalid');
135 if (marc_rules[tagnumber]) {
136 var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
137 var subf_array = datastring.split(String.fromCharCode(8225));
138 if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
141 add_css_class(data,'invalid');
142 var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
143 rule_warnings.push(s); mw.sdump('D_CAT',s);
147 for (var i in subf_array) {
148 if ((subf_array[i]=='')||(subf_array==null)) {
149 add_css_class(data,'invalid');
150 var s = 'You have incomplete subfield delimiters.\n';
151 rule_warnings.push(s); mw.sdump('D_CAT',s);
154 var s_ind = subf_array[i].substr(0,1);
155 if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
156 var rule = marc_rules[tagnumber][s_ind];
158 if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
159 add_css_class(data,'invalid');
160 var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
161 rule_warnings.push(s); mw.sdump('D_CAT',s);
164 add_css_class(data,'invalid');
165 var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
166 rule_warnings.push(s); mw.sdump('D_CAT',s);