5 var SC_FETCH_ALL = 'open-ils.circ:open-ils.circ.stat_cat.actor.retrieve.all';
6 var SC_CREATE_MAP = 'open-ils.circ:open-ils.circ.stat_cat.actor.user_map.create';
7 var SV_FETCH_ALL = 'open-ils.circ:open-ils.circ.survey.retrieve.all';
8 var FETCH_ID_TYPES = 'open-ils.actor:open-ils.actor.user.ident_types.retrieve';
9 var FETCH_GROUPS = 'open-ils.actor:open-ils.actor.groups.tree.retrieve';
10 var UPDATE_PATRON = 'open-ils.actor:open-ils.actor.patron.update';
13 var cachedSurveys = {};
14 var cachedSurveyQuestions = {};
15 var cachedSurveyAnswers = {};
16 var ERRORS = ""; /* global set of errors */
17 var cachedStatCats = {};
18 var deletedStatCats = {};
19 var cachedAddresses = {};
20 var deletedAddresses = {};
22 var myPerms = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
34 /* ID's of objects that should be focused when their page is made visible */
40 'ue_stat_cat_selector_1',
41 'ue_survey_selector_1',
46 regexes.phone = /\d{3}-\d{3}-\d{4}/;
47 regexes.email = /\w+\@\w+\.\w+/;
48 regexes.date = /^\d{4}-\d{2}-\d{2}/;
49 regexes.isnum = /^\d+$/;
51 /* fetch the necessary data to start off */
52 function uEditInit() {
55 session = cgi.param('ses');
56 if(cgi.param('adv')) advanced = true
57 if(!session) throw "User session is not defined";
60 $('uedit_user').appendChild(text(USER.usrname()));
61 uEditShowPage('uedit_userid');
66 /* these can be asynch */
67 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
70 /* these have to be synchronous */
71 uEditBuildLibSelector();
77 uEditDrawUser(fetchFleshedUser(cgi.param('usr')));
83 /* UI code ---------------------------------------------------- */
85 function uEditNext() {
86 var i = _findActive();
87 if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
90 function uEditPrev() {
91 var i = _findActive();
92 if( i > 0 ) uEditShowPage(pages[i-1]);
95 function uEditFetchError(id) { if($(id)) return $(id).innerHTML + "\n"; return "";}
97 function uEditShowPage(id) {
98 if( id == null ) return;
100 for( var p in pages ) {
103 removeCSSClass($(page+'_label'), 'label_active');
107 addCSSClass($(id+'_label'), 'label_active');
108 var idx = _findPageIdx(id);
109 var fpage = pageFocus[idx];
110 if(fpage) { $(fpage).focus(); try{$(fpage).select()}catch(e){} }
112 unHideMe($('ue_back'));
113 unHideMe($('ue_fwd'));
115 if(idx == 0) hideMe($('ue_back'));
116 if(idx == (pages.length-1)) hideMe($('ue_fwd'));
120 function _findActive() {
121 for( var p in pages ) {
122 if(! $(pages[p]).className.match(/hide_me/) )
127 function _findPageIdx(name) {
128 for( var i in pages ) {
130 if( page == name ) return i;
135 function uEditAddrHighlight( node, type ) {
136 var tbody = $('ue_address_tbody');
137 for( var c in tbody.childNodes ) {
138 var row = tbody.childNodes[c];
139 if(row.nodeType != XML_ELEMENT_NODE ) continue;
140 var div = $n(row,'ue_addr_'+type+'_yes').parentNode;
141 removeCSSClass(div, 'addr_info_checked');
143 addCSSClass(node.parentNode, 'addr_info_checked');
147 /* ------------------------------------------------------------------------------ */
149 /* ------------------------------------------------------------------------------ */
150 function uEditFetchIDTypes() {
151 var req = new Request(FETCH_ID_TYPES);
152 //req.callback(uEditDrawIDTypes);
154 uEditDrawIDTypes(req.request);
157 function uEditFetchStatCats() {
158 var req = new Request(SC_FETCH_ALL, SESSION);
159 //req.callback(uEditDrawStatCats);
161 uEditDrawStatCats(req.request);
164 function uEditFetchSurveys() {
165 var req = new Request(SV_FETCH_ALL, SESSION);
166 req.callback(uEditDrawSurveys);
171 /* ------------------------------------------------------------------------------ */
173 /* ------------------------------------------------------------------------------ */
174 var uEditExistingStatEntries;
175 var uEditExistingSurveyResponses;
177 function uEditSaveUser() {
186 //alert(js2JSON(patron));
189 var req = new Request(UPDATE_PATRON, SESSION, patron);
191 var result = req.result();
192 if( checkILSEvent(result) ) alert(js2JSON(result));
193 else alert($('ue_success').innerHTML);
197 function uEditCollectData() {
206 patron.card(-1); /* attach to the virtual id of the card */
207 patron.cards([card]);
211 /* if this function is called again, patron will exist */
212 if(!patron.isnew()) {
215 if(!uEditExistingStatEntries)
216 uEditExistingStatEntries = patron.stat_cat_entries();
217 if(!uEditExistingSurveyResponses)
218 uEditExistingSurveyResponses = patron.survey_responses();
222 patron.stat_cat_entries([]);
223 patron.survey_responses([]);
225 uEditFleshCard(card);
226 uEditAddBasicPatronInfo(patron);
227 uEditAddPhones(patron);
228 uEditAddIdents(patron);
229 uEditAddAddresses(patron);
230 uEditAddGroupsAndPerms(patron);
231 uEditReapStatCats(patron);
232 uEditReapSurveys(patron);
238 /* ------------------------------------------------------------------------------ */
240 /* ------------------------------------------------------------------------------ */
241 function uEditDrawUser(p) {
243 hideMe($('uedit_loading'));
244 unHideMe($('ue_maintd'));
249 $('ue_barcode').value = patron.card().barcode();
250 $('ue_username').value = patron.usrname();
251 $('ue_firstname').value = patron.first_given_name();
252 $('ue_middlename').value = patron.second_given_name();
253 $('ue_lastname').value = patron.family_name();
254 $('ue_suffix').value = patron.suffix();
255 $('ue_dob').value = patron.dob();
256 $('ue_primary_ident').value = patron.ident_value();
257 $('ue_secondary_ident').value = patron.ident_value2();
258 $('ue_email1').value = patron.email();
259 $('ue_email2').value = patron.email();
260 $('ue_expire').value = patron.expire_date();
261 $('ue_active').value = patron.active();
262 $('ue_barred').value = patron.barred();
263 $('ue_claims_returned').value = patron.claims_returned_count();
264 $('ue_alert_message').value = patron.alert_message();
266 setSelector( $('ue_primary_ident_type'), patron.ident_type() );
267 setSelector( $('ue_secondary_ident_type'), patron.ident_type2() );
268 setSelector( $('ue_org_selector'), patron.home_ou() );
269 setSelector( $('ue_profile'), patron.profile() );
271 /* flesh out the phone numbers ------------------------- */
272 var dp = patron.day_phone();
273 var np = patron.evening_phone();
274 var op = patron.other_phone();
277 var daynums = dp.split('-');
278 $('ue_day_phone_area').value = daynums[0];
279 $('ue_day_phone_prefix').value = daynums[1];
280 $('ue_day_phone_suffix').value = daynums[2];
284 var nightnums = np.split('-');
285 $('ue_night_phone_area').value = nightnums[0];
286 $('ue_night_phone_prefix').value = nightnums[1];
287 $('ue_night_phone_suffix').value = nightnums[2];
291 var othernums = op.split('-');
292 $('ue_other_phone_area').value = othernums[0];
293 $('ue_other_phone_prefix').value = othernums[1];
294 $('ue_other_phone_suffix').value = othernums[2];
298 /* Flesh the addresses ------------------------------------ */
300 var tbody = $('ue_address_tbody');
301 for( var i = 0; i != patron.addresses().length; i++ ) {
302 var addr = patron.addresses()[i];
303 cachedAddresses[addr.id()] = addr;
305 if( i == 0 ) row = getElementsByTagNameFlat(tbody, 'tr')[0];
306 else row = $('ue_address_new').onclick(); /* create a new row if necessary */
308 row.setAttribute('exists', addr.id() );
310 if( patron.mailing_address().id() == addr.id())
311 $n(row, 'ue_addr_mailing_yes').checked = true;
313 if( patron.billing_address().id() == addr.id())
314 $n(row, 'ue_addr_billing_yes').checked = true;
316 if( addr.valid() ) $n(row, 'ue_addr_valid_yes').checked = true;
319 $n(row, 'ue_addr_label').value = addr.address_type();
320 $n(row, 'ue_addr_street1').value = addr.street1();
321 $n(row, 'ue_addr_street2').value = addr.street2();
322 $n(row, 'ue_addr_city').value = addr.city();
323 $n(row, 'ue_addr_county').value = addr.county();
324 $n(row, 'ue_addr_state').value = addr.state();
325 $n(row, 'ue_addr_zip').value = addr.post_code();
326 $n(row, 'ue_addr_country').value = addr.country();
332 var stattbody = $('ue_stat_cat_tbody');
333 for( var m in patron.stat_cat_entries() ) {
334 var map = patron.stat_cat_entries()[m];
335 var row = grep( getElementsByTagNameFlat( stattbody, 'tr' ),
336 function(a) { return a.getAttribute('statcat') == map.stat_cat() })[0];
337 $n(row, 'ue_stat_cat_newval').value = map.stat_cat_entry();
338 setSelectorByName( $n(row, 'ue_stat_cat_selector'), map.stat_cat_entry() );
346 /* ------------------------------------------------------------------------------ */
348 /* ------------------------------------------------------------------------------ */
349 function uEditDrawIDTypes(r) {
351 var types = r.getResultObject();
352 var pri_sel = $('ue_primary_ident_type');
353 var sec_sel = $('ue_secondary_ident_type');
356 for( var t in types ) {
358 identTypes[type.id()] = type;
359 setSelectorVal( pri_sel, idx, type.name(), type.id() );
361 if(patron && patron.ident_type() != null )
362 setSelector( pri_sel, patron.ident_type() );
364 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
365 if(patron && patron.ident_type2() != null )
366 setSelector( sec_sel, patron.ident_type2() );
372 /* ------------------------------------------------------------------------------ */
373 /* Stat Cat handling code
374 /* ------------------------------------------------------------------------------ */
375 function uEditDrawStatCats(r) {
376 var cats = r.getResultObject();
377 var tbody = $('ue_stat_cat_tbody');
378 var templ = tbody.removeChild($('ue_stat_cat_row'));
380 for( var c in cats ) {
381 var row = templ.cloneNode(true);
382 uEditInsertCat( tbody, row, cats[c], c );
383 tbody.appendChild(row);
387 /* fleshes the stat cat with entries in the dropdown */
388 function uEditInsertCat( tbody, row, cat, idx ) {
390 cat.entries().sort( /* sort the entries by value */
392 if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
393 if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
398 cachedStatCats[cat.id()] = cat;
400 row.setAttribute('statcat', cat.id());
401 var newval = $n(row, 'ue_stat_cat_newval');
402 newval.onchange = function(){
403 findParentByNodeName(newval,'tr').setAttribute('changed', '1'); }
405 var selector = $n(row, 'ue_stat_cat_selector');
406 selector.onchange = function(){
407 findParentByNodeName(selector, 'tr').setAttribute('changed', '1');
408 newval.value = getSelectorName(selector);
409 newval.setAttribute('entry', getSelectorVal(selector));
412 if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1';
414 $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
415 $n(row, 'ue_stat_cat_owner').appendChild(
416 text(fetchOrgUnit(cat.owner()).shortname()));
419 for( var e in cat.entries() ) {
420 var entry = cat.entries()[e];
421 setSelectorVal( selector, idx++, entry.value(), entry.id() );
425 /* finds all the changed/new stat entries and updates the patron object*/
426 function uEditReapStatCats(patron) {
427 var tbody = $('ue_stat_cat_tbody');
428 for( var r in tbody.childNodes ) {
429 var row = tbody.childNodes[r];
430 if( !row || row.nodeName != 'tr' ) continue;
431 if( row.getAttribute('changed') ) {
432 var val = $n( row, 'ue_stat_cat_newval' );
433 uEditCreateStatMap( patron, row.getAttribute('statcat'),
434 val.value, val.getAttribute('entry') );
440 function uEditCreateStatMap( patron, catid, newval, entryid ) {
442 if( ! patron.isnew() ) {
444 /* if the patron exists and we're editing an entry that's
445 already been created for this user... */
446 for( var m in uEditExistingStatEntries ) {
447 var map = uEditExistingStatEntries[m];
448 if( map.stat_cat() == catid ) {
449 if( newval ) map.ischanged(1);
450 else map.isdeleted(1);
451 patron.stat_cat_entries().push(map);
457 var map = new actscecm();
459 map.stat_cat_entry(newval);
461 map.target_usr(patron.id());
462 patron.stat_cat_entries().push(map);
467 /* ------------------------------------------------------------------------------ */
468 /* Survey handling code
469 /* ------------------------------------------------------------------------------ */
470 function uEditDrawSurveys(r) {
472 var surveys = r.getResultObject();
473 var div = $('uedit_surveys');
474 var table = div.removeChild($('ue_survey_table'));
477 for( var s in surveys ) {
478 var survey = surveys[s];
479 cachedSurveys[survey.id()] = survey;
480 var clone = table.cloneNode(true);
481 uEditInsertSurvey( div, clone, survey, x++ );
482 div.appendChild(clone);
486 function uEditInsertSurvey( div, table, survey, sidx ) {
487 $n(table, 'ue_survey_name').appendChild(text(survey.name()));
488 $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
489 var tbody = $n(table, 'ue_survey_tbody');
490 var templ = tbody.removeChild($n(table, 'ue_survey_row'));
492 var polldiv = $('ue_survey_answer_poll');
495 for( var q in survey.questions() ) {
496 var row = templ.cloneNode(true);
497 var quest = survey.questions()[q];
498 cachedSurveyQuestions[quest.id()] = quest;
499 uEditInsertSurveyQuestion( div, table, tbody, row, survey, quest, sidx );
500 tbody.appendChild(row);
504 function uEditInsertSurveyQuestion( div, table, tbody, row, survey, question, sidx ) {
506 $n(row, 'ue_survey_question').appendChild(text(question.question()));
508 var selector = $n(row, 'ue_survey_answer');
509 var polldiv = $n(row, 'ue_survey_answer_poll');
511 var polltbody = $n(row, 'ue_survey_answer_poll_tbody');
512 var pollrow = polltbody.removeChild($n(polltbody, 'ue_survey_answer_poll_row'));
514 table.setAttribute('survey', survey.id());
515 row.setAttribute('question', question.id());
517 selector.onchange = function() {
518 row.setAttribute('answer', getSelectorVal(selector));
519 row.setAttribute('changed', '1');
522 if( sidx == 0 ) selector.id = 'ue_survey_selector_1';
524 for( var a in question.answers() ) {
526 var answer = question.answers()[a];
527 cachedSurveyAnswers[answer.id()] = answer;
529 if( survey.poll() ) {
532 var prow = pollrow.cloneNode(true);
535 $n(prow, 'ue_survey_answer_poll_answer').appendChild(text(answer.answer()));
538 var input = elem('input', {
540 name : 'survey_poll_answer_'+survey.id(),
544 input.onchange = function() {
545 row.setAttribute('answer', answer.id());
546 row.setAttribute('changed', '1');
549 $n(prow, 'ue_survey_answer_poll_radio').appendChild(input);
550 polltbody.appendChild(prow);
554 unHideMe(selector.parentNode);
555 setSelectorVal( selector, idx++, answer.answer(), answer.id() );
561 function uEditReapSurveys(patron) {
563 var div = $('uedit_surveys');
564 var tables = getElementsByTagNameFlat(div, 'table');
566 for( var t in tables ) {
568 var table = tables[t];
569 var survey = cachedSurveys[table.getAttribute('survey')];
570 var tbody = getElementsByTagNameFlat( table, 'tbody' )[0];
571 var rows = getElementsByTagNameFlat( tbody, 'tr' );
573 for( var r in rows ) {
575 if(!row.getAttribute('changed')) continue;
577 var resp = new asvr();
579 resp.survey(survey.id());
580 resp.usr(patron.id());
581 resp.question(row.getAttribute('question'));
582 resp.answer(row.getAttribute('answer'));
583 patron.survey_responses().push( resp );
593 /* returns true if an error occurred */
594 function uEditSetVal( obj, func, val, regxtype, errtype ) {
596 var error = uEditFetchError(errtype);
601 if( val == null ) { iserr = true; break; }
603 if(!instanceOf(val, String)) {
604 try { val = val.value; } catch(e) { return; }
607 if(val == "" ) { iserr = true; break; }
609 if(regxtype && regexes[regxtype]
610 && !val.match(regexes[regxtype]) ) { iserr = true; break; }
612 try { obj[func](val); } catch(e) {
613 alert("Error running function: " +func);
619 if(iserr) { ERRORS += error; return true; }
624 function uEditAddBasicPatronInfo(patron) {
628 /* make sure passwords match */
629 var p1 = $('ue_password1').value;
630 var p2 = $('ue_password1').value;
632 if( p1 || patron.isnew() ) { /* existing patrons will have a blank password */
633 if( p1 != p2 || uEditSetVal( patron, "passwd", p1 ))
634 ERRORS += uEditFetchError('ue_bad_password');
637 uEditSetVal(patron, "usrname", $('ue_username'), null, 'ue_bad_username' );
638 uEditSetVal(patron, "first_given_name", $('ue_firstname'), null, 'ue_bad_firstname' );
639 uEditSetVal(patron, "second_given_name", $('ue_middlename'), null, 'ue_bad_middlename' );
640 uEditSetVal(patron, "family_name", $('ue_lastname'), null, 'ue_bad_lastname' );
641 uEditSetVal(patron, "dob", $('ue_dob'), 'date', 'ue_bad_dob' );
643 patron.suffix($('ue_suffix').value); /* suffis isn't required */
646 /* make sure emails match */
647 var email = $('ue_email1').value;
648 var email2 = $('ue_email2').value;
649 if( email != email2 || uEditSetVal(patron, "email", email, 'email' ))
650 ERRORS += uEditFetchError('ue_bad_email');
652 patron.home_ou(getSelectorVal($('ue_org_selector')));
655 function uEditAddPhones(patron) {
658 /* verifies the phone numbers are formatted correctly */
659 var verify = function(n1, n2, n3) {
663 if( !a || !p || !s ) return false;
664 return a + '-' + p + '-' + s;
668 var er = 'ue_bad_phone'
670 uEditSetVal( patron, "day_phone",
671 verify($('ue_day_phone_area'),
672 $('ue_day_phone_prefix'),
673 $('ue_day_phone_suffix')), 'phone', er );
675 uEditSetVal( patron, "evening_phone",
676 verify($('ue_night_phone_area'),
677 $('ue_night_phone_prefix'),
678 $('ue_night_phone_suffix')), 'phone', er );
680 if( $('ue_other_phone_prefix').value ) {
681 uEditSetVal( patron, "other_phone",
682 verify($('ue_other_phone_area'),
683 $('ue_other_phone_prefix'),
684 $('ue_other_phone_suffix')), 'phone', er );
689 function uEditFleshCard(card) {
692 if(uEditSetVal( card, "barcode", $('ue_barcode'), null, 'ue_bad_barcode' ))
700 function uEditAddIdents(patron) {
702 var err = 'ue_no_ident';
704 uEditSetVal( patron, "ident_type",
705 getSelectorVal($('ue_primary_ident_type')), 'isnum', err );
707 uEditSetVal( patron, "ident_type2",
708 getSelectorVal($('ue_secondary_ident_type')), 'isnum', err );
710 uEditSetVal( patron, "ident_value",
711 $('ue_primary_ident'), null, err );
713 uEditSetVal( patron, "ident_value2",
714 $('ue_secondary_ident'), null, err );
719 function uEditBuildLibSelector( node, depth, selector ) {
720 if(!selector) selector = $('ue_org_selector');
721 if(!node) { depth = 0; node = globalOrgTree; }
723 var opt = insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
725 /* allow these orgs to be selectable via permission? */
726 if(!findOrgType(node.ou_type()).can_have_vols()) opt.disabled = true;
728 if( node.id() == USER.home_ou() ) setSelector(selector, node.id());
729 for( var c in node.children() )
730 uEditBuildLibSelector(node.children()[c], depth, selector);
733 function uEditFetchGroups() {
734 var req = new Request(FETCH_GROUPS);
735 //req.callback(uEditDrawGroups);
737 uEditDrawGroups(req.request);
740 function uEditDrawGroups(r, tree, depth, selector) {
743 tree = r.getResultObject();
746 selector = $('ue_profile');
749 insertSelectorVal( selector, -1, tree.name(), tree.id(), null, depth++ );
750 for( var c in tree.children() )
751 uEditDrawGroups( null, tree.children()[c], depth, selector );
756 function uEditAddGroupsAndPerms(patron) {
758 uEditSetVal( patron, "profile",
759 getSelectorVal($('ue_profile')), 'isnum', 'ue_no_profile');
761 var expire = $('ue_expire').value;
763 uEditSetVal( patron, "expire_date", expire, 'date', 'ue_bad_expire' );
765 if($('ue_active').checked) patron.active(1);
766 if($('ue_barred').checked) patron.barred(1);
767 if($('ue_group_lead').checked) patron.master_account(1);
769 uEditSetVal( patron, "claims_returned_count",
770 $('ue_claims_returned'), 'isnum', 'ue_bad_claims_returned');
772 if($('ue_alert_message').value)
773 uEditSetVal(patron, "alert_message", $('ue_alert_message'));
778 function uEditAddAddresses(patron) {
779 var tbody = $('ue_address_tbody');
780 patron.addresses([]);
782 /* shove the addresses living in the page into the patron */
783 for( var r in tbody.childNodes ) {
784 var row = tbody.childNodes[r];
785 if(!(row && row.nodeName == 'tr')) continue;
786 patron.addresses().push( uEditBuildAddress( patron, tbody, row ));
788 for( var a in deletedAddresses ) {
789 var addr = deletedAddresses[a];
790 patron.addresses().push(addr);
794 /* extracts a single address from the page */
795 var uEditVirtualAddrId = -1;
796 function uEditBuildAddress( patron, tbody, row ) {
798 var addr = new aua();
799 var id = row.getAttribute('exists');
806 addr.id(uEditVirtualAddrId--);
810 if($n(row, 'ue_addr_mailing_yes').checked) patron.mailing_address(addr.id());
811 if($n(row, 'ue_addr_billing_yes').checked) patron.billing_address(addr.id());
812 if($n(row, 'ue_addr_valid_yes').checked) addr.valid(1);
813 if($n(row, 'ue_addr_street2').value) addr.street2($n(row, 'ue_addr_street2').value);
815 uEditSetVal(addr, "address_type", $n(row, 'ue_addr_label'), null, 'ue_bad_addr_label' );
816 uEditSetVal(addr, "street1", $n(row, 'ue_addr_street1'), null, 'ue_bad_addr_street' );
817 uEditSetVal(addr, "city", $n(row, 'ue_addr_city'), null, 'ue_bad_addr_city' );
818 uEditSetVal(addr, "county", $n(row, 'ue_addr_county'), null, 'ue_bad_addr_county' );
819 uEditSetVal(addr, "state", $n(row, 'ue_addr_state'), null, 'ue_bad_addr_state' );
820 uEditSetVal(addr, "post_code", $n(row, 'ue_addr_zip'), null, 'ue_bad_addr_zip' );
821 uEditSetVal(addr, "country", $n(row, 'ue_addr_country'), null, 'ue_bad_addr_country' );
826 function uEditRemoveAddress(node) {
827 if( confirm($("ue_delete_addr_warn").innerHTML) ) {
828 var td = node.parentNode.parentNode;
829 var mytab = td.parentNode.parentNode.parentNode;
830 var row = mytab.parentNode.parentNode;
831 if( row.getAttribute('exists') ) {
832 var a = cachedAddresses[row.getAttribute('exists')];
834 deletedAddresses[a.id()] = a;
836 var tbody = row.parentNode;
837 tbody.removeChild(mytab.parentNode.parentNode);
843 var uEditAddrTemplate;
844 var uEditOrigAddrRow;
845 function uEditBuildAddrs() {
847 var tbody = $('ue_address_tbody');
848 uEditAddrTemplate = tbody.removeChild($('ue_address_template'));
850 $('ue_address_new').onclick =
852 /* we have to retain the mailing/billing radio input values */
853 var rows = getElementsByTagNameFlat(tbody,'tr');
856 for( var r in rows ) {
858 if($n(row,'ue_addr_mailing_yes').checked) mailrow = row;
859 if($n(row,'ue_addr_billing_yes').checked) billrow = row;
861 var newrow = uEditAddrTemplate.cloneNode(true);
862 tbody.appendChild(newrow);
863 $n(newrow, 'ue_addr_label').focus();
864 if(mailrow) $n(mailrow,'ue_addr_mailing_yes').checked = true;
865 if(billrow) $n(billrow,'ue_addr_billing_yes').checked = true;
869 /* go ahead and add a blank addr */
871 var row = uEditAddrTemplate.cloneNode(true);
872 uEditOrigAddrRow = row;
873 $n( row, 'ue_addr_label').id = 'ue_addr_label_1';
874 tbody.appendChild(row);
880 function uEditShowSummary() {
882 var table = $('ue_summary_table').cloneNode(true);;
883 uEditFleshSummaryTable(table);
884 var win = window.open("", $('ue_summary_window').innerHTML );
885 win.document.body.innerHTML = "";
886 win.document.body.appendChild(table);
890 function uEditFleshSummaryTable(table) {
892 var yes = $('yes').innerHTML;
893 var no = $('no').innerHTML;
900 if( patron.ident_type() != null)
901 identt1 = identTypes[patron.ident_type()].name();
902 if( patron.ident_type2() != null )
903 identt2 = identTypes[patron.ident_type2()].name();
904 if( patron.home_ou() != null )
905 homeorg = findOrgUnit(patron.home_ou()).name();
906 if( patron.profile() != null )
907 profile = findTreeItemById(groupTree, patron.profile()).name();
910 $n(table, 'ue_summary_username').appendChild(text(patron.usrname()));
911 $n(table, 'ue_summary_firstname').appendChild(text(patron.first_given_name()));
912 $n(table, 'ue_summary_middlename').appendChild(text(patron.second_given_name()));
913 $n(table, 'ue_summary_lastname').appendChild(text(patron.family_name()));
914 $n(table, 'ue_summary_suffix').appendChild(text(patron.suffix()));
915 $n(table, 'ue_summary_dob').appendChild(text(patron.dob()));
916 $n(table, 'ue_summary_primary_ident_type').appendChild(text(identt1));
917 $n(table, 'ue_summary_primary_ident').appendChild(text(patron.ident_value()));
918 $n(table, 'ue_summary_secondary_ident_type').appendChild(text(identt2));
919 $n(table, 'ue_summary_secondary_ident').appendChild(text(patron.ident_value2()));
920 $n(table, 'ue_summary_email').appendChild(text(patron.email()));
921 $n(table, 'ue_summary_dayphone').appendChild(text(patron.day_phone()));
922 $n(table, 'ue_summary_nightphone').appendChild(text(patron.evening_phone()));
923 $n(table, 'ue_summary_otherphone').appendChild(text(patron.other_phone()));
924 $n(table, 'ue_summary_home_lib').appendChild(text(homeorg));
925 $n(table, 'ue_summary_profile').appendChild(text(profile));
926 $n(table, 'ue_summary_expire').appendChild(text(patron.expire_date()));
927 $n(table, 'ue_summary_family_lead').appendChild(text( (patron.master_account()) ? yes : no ));
928 $n(table, 'ue_summary_claims_returned').appendChild(text(patron.claims_returned_count()));
929 $n(table, 'ue_summary_alert_message').appendChild(text(patron.alert_message()));
931 uEditFleshSummaryAddresses( table, patron );
932 uEditFleshSummaryStatCats( table, patron );
933 uEditFleshSummarySurveys( table, patron );
934 uEditFleshSummaryErrors( table );
939 function uEditFleshSummaryAddresses( table, patron ) {
941 var addrtbody = $n(table, 'ue_summary_addr_tbody');
942 var rowtmpl = addrtbody.removeChild($n(addrtbody, 'ue_summary_addr_row'));
944 for( var a in patron.addresses() ) {
945 var address = patron.addresses()[a];
946 var row = rowtmpl.cloneNode(true);
947 uEditFleshSummaryAddr( address, patron, row );
948 addrtbody.appendChild(row);
949 if(address.isdeleted()) addCSSClass(row, 'deleted');
954 function uEditFleshSummaryAddr( address, patron, row ) {
955 var yes = $('yes').innerHTML;
956 var no = $('no').innerHTML;
958 $n(row, 'label').appendChild(text(address.address_type()));
959 $n(row, 'street1').appendChild(text(address.street1()));
960 $n(row, 'street2').appendChild(text(address.street2()));
961 $n(row, 'city').appendChild(text(address.city()));
962 $n(row, 'county').appendChild(text(address.county()));
963 $n(row, 'state').appendChild(text(address.state()));
964 $n(row, 'country').appendChild(text(address.country()));
965 $n(row, 'zip').appendChild(text(address.post_code()));
966 $n(row, 'valid').appendChild(text( (address.valid()) ? yes : no ));
968 $n(row, 'mailing').appendChild(text(
969 (patron.mailing_address() == address.id()) ? yes : no ));
971 $n(row, 'billing').appendChild(text(
972 (patron.billing_address() == address.id()) ? yes : no ));
976 function uEditFleshSummaryStatCats( table, patron ) {
977 var tbody = $n(table, 'ue_summary_stats_tbody');
978 var rowtmpl = tbody.removeChild($n(tbody, 'ue_summary_stats_row'));
980 for( var s in patron.stat_cat_entries() ) {
981 row = rowtmpl.cloneNode(true);
982 var entry = patron.stat_cat_entries()[s];
983 var cat = cachedStatCats[entry.stat_cat()];
984 $n(row, 'ue_summary_stat_name').appendChild(text(cat.name()));
985 $n(row, 'ue_summary_stat_value').appendChild(text(entry.stat_cat_entry()));
986 row.setAttribute('statcat', entry.stat_cat());
987 if( entry.isdeleted() ) addCSSClass(row, 'deleted');
988 tbody.appendChild(row);
991 for( var s in uEditExistingStatEntries ) {
993 var entry = uEditExistingStatEntries[s];
994 var rows = getElementsByTagNameFlat( tbody, 'tr' );
995 var test = function(a) { return a.getAttribute('statcat') == entry.stat_cat() };
997 if( ! grep( rows, test ) ) {
999 row = rowtmpl.cloneNode(true);
1000 var cat = cachedStatCats[entry.stat_cat()];
1001 $n(row, 'ue_summary_stat_name').appendChild(text(cat.name()));
1002 $n(row, 'ue_summary_stat_value').appendChild(text(entry.stat_cat_entry()));
1003 row.setAttribute('statcat', entry.stat_cat());
1004 tbody.appendChild(row);
1009 if( ! getElementsByTagNameFlat( tbody, 'tr' )[1] )
1010 unHideMe($n(tbody, 'ue_summary_stat_cat_none'));
1014 function uEditFleshSummarySurveys( table, patron ) {
1016 var tbody = $n(table, 'ue_summary_survey_tbody');
1017 var rowtmpl = tbody.removeChild($n(tbody, 'ue_summary_survey_row'));
1019 for( var r in patron.survey_responses() ) {
1020 var row = rowtmpl.cloneNode(rowtmpl);
1021 var resp = patron.survey_responses()[r];
1022 var survey = cachedSurveys[resp.survey()];
1023 var quest = cachedSurveyQuestions[resp.question()];
1024 var answer = cachedSurveyAnswers[resp.answer()];
1025 $n(row, 'ue_summary_survey_name').appendChild(text(survey.name()));
1026 $n(row, 'ue_summary_survey_question').appendChild(text(quest.question()));
1027 $n(row, 'ue_summary_survey_answer').appendChild(text(answer.answer()));
1028 tbody.appendChild(row);
1031 if( ! getElementsByTagNameFlat(tbody, 'tr')[1])
1032 unHideMe($n(tbody, 'ue_summary_survey_none'))
1036 function uEditFleshSummaryErrors( table ) {
1038 unHideMe($n(table, 'ue_summary_errors_row'));
1039 var errors = ERRORS.replace(/\n/g, "<br/>");
1040 $n(table, 'ue_summary_errors').innerHTML += errors;