Initial dev repository
[kcls-web.git] / opac / skin / craftsman / js / advanced.js
diff --git a/opac/skin/craftsman/js/advanced.js b/opac/skin/craftsman/js/advanced.js
new file mode 100644 (file)
index 0000000..12728c1
--- /dev/null
@@ -0,0 +1,172 @@
+/* advanced search interface */
+
+attachEvt("common", "run", advInit);
+
+function advInit() { 
+
+       /* propogate these? */
+
+       depthSelInit(); 
+       setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
+
+       unHideMe($('adv_quick_search_sidebar'));
+
+       /*
+       if(isXUL()) 
+               setSelector($('adv_quick_type'), 'tcn'); */
+
+       setEnterFunc($('adv_quick_text'), advGenericSearch);
+
+       unHideMe($('adv_marc_search_sidebar'));
+}
+
+
+function advAddMARC() {
+       var newt = $('adv_sdbar_table').cloneNode(true);
+       newt.id = "";
+       unHideMe($n(newt, 'crow'));
+       $n(newt, 'advanced.marc.tag').value = "";
+       $n(newt, 'advanced.marc.subfield').value = "";
+       $n(newt, 'advanced.marc.value').value = "";
+       $('adv_marc_search_sidebar').insertBefore(newt, $('adv_marc_submit'));
+}
+
+function advMARCRun() {
+
+       clearSearchParams();
+
+       var div = $('adv_marc_search_sidebar');
+       var tbodies = div.getElementsByTagName('tbody');
+       var searches = [];
+
+       for( var i = 0; i < tbodies.length; i++ ) {
+               var tbody = tbodies[i];
+               var val = advExtractMARC(tbody);
+               if(val) searches.push(val);
+       }
+
+       if(searches.length == 0) return;
+
+       var arg = {};
+       arg.page = RRESULT;
+       arg[PARAM_FORM] = 'all'
+       arg[PARAM_RTYPE] = RTYPE_MARC;
+       arg[PARAM_OFFSET] = 0;
+       arg[PARAM_DEPTH]        = depthSelGetDepth();
+       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+       arg[PARAM_SEARCHES] = js2JSON(searches);
+       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
+       arg[PARAM_TERM] = "";
+
+       goTo(buildOPACLink(arg));
+}
+
+
+/* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
+function advExtractMARC(tbody) {
+       if(!tbody) return null;
+       var term = $n(tbody, 'advanced.marc.value').value;
+       if(!term) return null;
+
+       var subfield = $n(tbody, 'advanced.marc.subfield').value;
+       if(!subfield) subfield = "_";
+
+       var tag = $n(tbody, 'advanced.marc.tag').value;
+       if(!tag) return null;
+
+       return { 'term' : term.toLowerCase(), 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
+}
+
+function advGenericSearch() {
+       clearSearchParams();
+       var type = getSelectorVal($('adv_quick_type'));
+       
+       var term = $('adv_quick_text').value;
+       if(!term) return;
+
+       var arg = {};
+
+       switch(type) {
+
+               case 'isbn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_RTYPE]                = RTYPE_ISBN;
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_ADVTERM]      = term.toLowerCase();
+                       break;
+               
+               case 'issn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_ADVTERM]      = term.toLowerCase();
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_RTYPE]                = RTYPE_ISSN;
+                       break;
+
+               case 'tcn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_ADVTERM]      = term;
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_RTYPE]                = RTYPE_TCN;
+                       break;
+
+        case 'barcode':
+            advFindBarcode(term);
+            break;
+
+
+               case 'cn':
+                       arg.page                        = CNBROWSE;
+                       arg[PARAM_CN]   = term;
+                       arg[PARAM_DEPTH]                = depthSelGetDepth();
+                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+                       break;
+
+               case 'lccn':
+                       arg.page = RRESULT;
+                       arg[PARAM_FORM] = 'all'
+                       arg[PARAM_RTYPE] = RTYPE_MARC;
+                       arg[PARAM_OFFSET] = 0;
+                       arg[PARAM_DEPTH]        = depthSelGetDepth();
+                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+                       arg[PARAM_SEARCHES] = js2JSON([{ 'term' : term.toLowerCase(), 
+                                       'restrict' :  [ { 'tag' : '010', 'subfield' : '_' } ] }]);
+                       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
+                       arg[PARAM_TERM] = "";
+                       break;
+
+
+               default: alert('not done');
+       }
+
+       if(arg.page) goTo(buildOPACLink(arg));
+}
+
+
+function advFindBarcode(barcode) {
+    var req = new Request(FETCH_BIB_ID_BY_BARCODE, barcode);
+    req.callback(advDrawBarcode);
+    req.request.alertEvent = false;
+    req.send();
+}
+
+function advDrawBarcode(r) {
+    titleid = r.getResultObject();
+    if(checkILSEvent(titleid)) {
+        alertId('myopac.copy.not.found');
+        return;
+    }
+    if(!titleid) return;
+    var args = {};
+    args.page = RDETAIL;
+    args[PARAM_RID] = titleid;
+    location.href = buildOPACLink(args);
+}
+
+
+