add_css_class is now addCSSClass
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / cat / marc_validate.js
1 var rule_warnings = [];
2 var tag_seen;
3
4 function explain_marc() {
5         var s = '';
6         for (var w in rule_warnings) {
7                 s = s + rule_warnings[w];
8         }
9         alert(s);
10 }
11
12 function legend_marc() {
13         var s = '';
14         var rows = document.getElementById('ctrl_rows').childNodes;
15         for (var r in rows) {
16                 if (    (typeof(rows[r]) == 'object') &&
17                         (rows[r].tagName == 'row') &&
18                         (rows[r].getAttribute('hidden') != 'true')
19                 ) {
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';
23                         } else {
24                                 s = s + tagnumber + '\n';
25                         }
26                 }
27         }
28         rows = document.getElementById('data_rows').childNodes;
29         for (var r in rows) {
30                 if (    (typeof(rows[r]) == 'object') &&
31                         (rows[r].tagName == 'row') &&
32                         (rows[r].getAttribute('hidden') != 'true')
33                 ) {
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';
37                         } else {
38                                 s = s + tagnumber + '\n';
39                         }
40                 }
41         }
42         alert(s);
43
44 }
45
46 function handle_tag_change(ev) {
47         mw.sdump('D_CAT','Entering handle_tag_change: ' + timer_elapsed('cat') + '\n');
48         try {
49 dump('1\n');
50         rule_warnings = []; disable_widgets('explain_marc');
51 dump('2\n');
52         tag_seen = {};
53 dump('3\n');
54         var rows = document.getElementById('ctrl_rows').childNodes;
55 dump('4\n');
56         for (var r in rows) {
57 dump('5\n');
58                 if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
59 dump('6\n');
60                         test_tagnumber_rule(rows[r]);
61 dump('7\n');
62                 }
63 dump('8\n');
64         }
65 dump('9\n');
66         rows = document.getElementById('data_rows').childNodes;
67 dump('10\n');
68         for (var r in rows) {
69 dump('11\n');
70                 if (    (typeof(rows[r]) == 'object') &&
71                         (rows[r].tagName == 'row') &&
72                         (rows[r].getAttribute('hidden') != 'true')
73                 ) {
74 dump('12\n');
75                         test_tagnumber_rule(rows[r]);
76 dump('13\n');
77                         test_ind1_rule(rows[r]);
78 dump('14\n');
79                         test_ind2_rule(rows[r]);
80 dump('15\n');
81                         test_subfield_rule(rows[r]);
82 dump('16\n');
83                 }
84 dump('17\n');
85         }
86 dump('18\n');
87         if (rule_warnings.length > 0) { 
88 dump('19\n');
89                 enable_widgets('explain_marc'); }
90         } catch(E) {
91 dump('20\n');
92                 handle_error(E);
93         }
94 dump('21\n');
95         mw.sdump('D_CAT','Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
96 }
97
98 function test_tagnumber_rule(r) {
99         // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
100 dump('t1\n');
101         try {
102 dump('t2\n');
103         var t = r.firstChild.firstChild;
104 dump('t3\n');
105         if (t.value.length > 3) { 
106 dump('t4\n');
107                 t.value = t.value.substr(0,3); 
108 dump('t5\n');
109         } else if (t.value.length < 3) {
110 dump('t6\n');
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;
115                 }
116 dump('t7\n');
117         }
118 dump('t8\n');
119         removeCSSClass(t,'invalid');
120 dump('t9\n');
121         if (marc_rules[t.value]) {
122 dump('t10\n');
123                 var rule = marc_rules[t.value];
124 dump('t11\n');
125                 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
126 dump('t12\n');
127                 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
128 dump('t13\n');
129                         addCSSClass(t,'invalid');
130 dump('t14\n');
131                         var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
132 dump('t15\n');
133                         rule_warnings.push(s); mw.sdump('D_CAT',s);
134 dump('t16\n');
135                 }
136 dump('t17\n');
137         } else if (t.value != 'LDR') {
138 dump('t18\n');
139                 addCSSClass(t,'invalid');
140 dump('t19\n');
141                 var s = 'Tag ' + t.value + ' is unknown.\n';
142 dump('t20\n');
143                 rule_warnings.push(s); mw.sdump('D_CAT',s);
144 dump('t21\n');
145         }
146 dump('t22\n');
147         } catch(E) {
148                 dump('t23\n');
149                 handle_error();
150         }
151 }
152
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);
164                 }
165         }
166 }
167
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);
179                 }
180         }
181 }
182
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) ) {
192                         subf_array.shift();
193                 } else {
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);
197                         subf_array.shift();
198                 }
199                 var subf_seen = {};
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);
205                                 continue;
206                         }
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];
210                         if (rule) {
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);
215                                 }
216                         } else {
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);
220                         }
221                 }
222         }
223 }