<tmpl_include headerBase.inc>
<head>
 <base href="/">
</head>
<style type="text/css">

div.searchBlock {
    width : 99%;
    height: auto;
    border: 1px solid #F0F0F0;
    margin: 5px auto ;
    padding : 15px;
    background-color : #59B5BD;
    -moz-border-radius: 5px;border-radius:5px 5px 5px 5px;
    -webkit-border-radius: 5px;
    font-weight:normal;
    font-family:arial;
    !important;
}

.record-grid {
  display: flex;
  flex-wrap: wrap;
  margin-left: -2px;
  margin-right: -2px;
}

.record-card {
  padding: 6px;
  display: flex;
}

.record-card .panel {
  width: 100%;
  margin-bottom: 0;
  display: flex;
  flex-direction: column;
  min-height: 250px;
}

.record-card .panel-heading {
  min-height: 56px;
  padding:10px;
}

.record-card .panel-body {
  flex: 1 1 auto;
  padding: 1px;
}

.record-card .record-main {
  display: flex;
  align-items: flex-start;
  padding:10px;
}

.record-card .record-text {
  flex: 1 1 auto;
  min-width: 0;
  padding-right: 10px;
}

.record-card .record-image {
  width: 85px;
  text-align: right;
  flex: 0 0 85px;
}

.record-card .record-image img {
  display: inline-block;
  max-width: 75px;
  height: auto;
}

.record-card .record-field {
  margin-bottom: 4px;
  line-height: 1.35;
}

.record-card .record-title {
  margin: 0;
  /*line-height: 1.4;*/
  font-size: 18px;
}

.eq-footer {
  padding: 10px 12px;
  white-space: nowrap;
}

.eq-left {
  float: left;
  margin-right: 15px;
}

.eq-right {
  float: right;
}

.eq-right .label {
  margin-left: 4px;
}

.record-card .category-line {
  margin-bottom: 8px;
  min-height : 20px;
  display:block;
  line-height:20px;
}

.record-card .text-value-alt {
  color: #31708f;
}

.record-card .text-value-normal {
  color: #555;
}
.row > [class*="col-"] {
  padding : 1px;
}
.checkbox-lg input[type="checkbox"] {
  transform: scale(1.5);
  margin-right: 6px;   /* spacing so it doesn't overlap text */
}
.eq-table {
  margin-bottom: 0;
  table-layout: auto;
}

.eq-table th {
  white-space: nowrap;
  background: #337ab7;
  color: #fff;
  vertical-align: middle;
}

.eq-table td {
  vertical-align: top;
}

.eq-thumb {
  width: 50px;
  max-width: 100%;
  height: auto;
}

.eq-name-cell {
  line-height: 1.4;
}

.eq-name-link {
  /*font-weight: 600;*/
  font-size: 1.2em;
}

.eq-link {
  word-break: break-word;
  white-space: normal;
}
</style>

<script type='text/javascript'>
  var PID=Date.now();
  opalsApp.service('SharedData',function(){
    var param = {}, result = {} , record = {}; recId = 0;
    return {
      setParam:  function(data)  { param={};param=data},
      getParam:  function()      { return param;},
      setResult: function(data) { result=data},
      getResult: function()     { return result},
      getRecord: function()     { return record},
      setRecord: function(data) { record=data},
      getRecId: function()     { return recId},
      setRecId: function(id) { recId=id}
    }
  });

  opalsApp.config(function($locationProvider,$routeProvider){
    $locationProvider.html5Mode({
      enabled:true,
      requireBase:false
    })
    $locationProvider.hashPrefix('')
      $routeProvider 
        .when('/bin/eqmnt/search/search/result',{
          pageTmplUrl: '/theme/opals/eqmnt/search/resultPage.html?tttt='+PID,
          controller:'resultCtrl' ,
          reloadOnSearch:true,
          reloadOnUrl:true
        })
        .when('/bin/eqmnt/search/search/recDetail',{
          pageTmplUrl: '/theme/opals/eqmnt/search/recDetailPage.html?d='+PID,
          controller:'recDetailCtrl',
          reloadOnSearch:true,
          reloadOnUrl:true
         })
        .when('/bin/login',{
          redirectTo: '/bin/login',
          reloadOnUrl:true
         })
        .otherwise({ redirectTo: '/bin/eqmnt/search/search'  })
  });
  opalsApp.run(['$route','$rootScope','$window','$location','SharedData',function($route,$rootScope,$window,$location,SharedData){
    var original = $location.path();
    $rootScope.$on('$routeChangeStart',function(event,next,current){
      var route=next.$$route;
      if (route){
        route.templateUrl=route.pageTmplUrl;
        if (route.originalPath==="/bin/login"){
          $window.location.href='/bin/login';
        }
        if (route.reloadOnSearch){
          //console.log("reloadOnSearch:",original,":",$location);
        }
        if(route.reloadOnUrl){
          SharedData.setParam($location.search());
        }
      }
      $rootScope.oplMsg=oplMsg;
    });
  
  }]);
</script>

<script>
  opalsApp.controller('searchCtrl',['$scope','$http','$location','SharedData',
    function($scope,$http,$location,SharedData){
      $scope.oplMsg=oplMsg;
      $scope.sessionVarName= "eq_search";
      $scope.searchFieldList=<tmpl_var searchFieldList default=[]>;
      $scope.buildingList=<tmpl_var bldList default=[]>;
      $scope.displayRecord = "<tmpl_var displayStyle default='linear'>";
      $scope.notFound=0;
      $scope.searchCbFn=function(data){ 
        if (data.hits>0){
          $scope.notFound=0;
          SharedData.setResult(data);
          console.log("data from search:",data);
          $location.path("/bin/eqmnt/search/search/result").search(data.srchParam);
        }
        else{
          $scope.notFound=1;
          SharedData.setResult({});
          $location.path("/bin/eqmnt/search/search");
        }
      } 
       
      $scope.searchParamFn=function(data){
        for (var propName in data) {
          if (data[propName]===null||data[propName]===undefined||data[propName]===''){
            delete data[propName];
          }
        }
        $scope.srchParam=data;
        SharedData.setParam(data);
      }

      $scope.resetCbFn=function(){     
        $scope.srchParam={};
        $scope.updateParam=0;
        $scope.notFound=0;
        SharedData.setParam($scope.srchParam);
        SharedData.setResult({});
        $location.path("/bin/eqmnt/search/search");
      }

      $scope.onChangeCbFn=function(p){
        if (p.kw===''){
          $scope.resetCbFn();
        }
        else{
          SharedData.setResult({});
          $scope.srchParam=p;
          SharedData.setParam($scope.srchParam);
          $location.path("/bin/eqmnt/search/search");
        }

      }
      $scope.init=function(){
        $scope.srchParam={};
        $scope.notFound=0;
         setTimeout(function(){
          $scope.srchParam=SharedData.getParam();
         },1000);
     }

     $scope.$watch(function(){
        return SharedData.getParam();
        }, function(newData){
          $scope.searchParamFn(newData);
      });
     
  }]);


  opalsApp.controller('resultCtrl',['$scope','$http','$location','SharedData','waitingAnimation',
    function($scope,$http,$location,SharedData,waitingAnimation){
      $scope.oplMsg=oplMsg;
      $scope.sessionVarName= "eq_search";
      $scope.defList = <tmpl_var fieldList default=[]>;
      $scope.srchFieldShow={};
      $scope.record_edit = <tmpl_var eq_record_edit default=0>;
      $scope.result=SharedData.getResult();
      $scope.srchParam={};
      $scope.facetList={};
      $scope.sortFields= <tmpl_var sortFields default=[]>;
      $scope.sortField="";
      $scope.nSelected=0;
      $scope.facetMap = {
        "category_facet": "Category",
        "building_facet": "Building Location"
      }
      $scope.displayRecord = "<tmpl_var displayStyle default='linear'>";
      $scope.paging = {
          pSize:10,
          pNo:1,
          start:1,
          end:10,
          max:10
      },

      $scope.listEditor = {
        param : {
        },
        paging : 
            {
          pSize:10,
          pNo:1,
          start:1,
          end:10
        },
        result:{
          hits:0
        },
        selectAll:0,
      },
      $scope.navPage=function(p){
        $scope.srchParam.pNo=p;
        $scope.srchParam.offset=0;
        $scope.paging.pNo=p;
        SharedData.setParam($scope.srchParam);
        $scope.doSearch();
      }
      $scope.doSearch=function(){
        waitingAnimation.start();
        var url="/bin/eqmnt/ajax/search/searchFn";
        var param = $scope.srchParam;
        param.op = "search";
        $scope.result={};
        $scope.paging.pNo=$scope.srchParam.pNo;
        $http.post(url,param)
          .success(
            function(data){
              console.log("data from doSearch resultCtrl:", data);
                $scope.srchResult={};
                $scope.result=data;
                $scope.facetList=data.facetList;
                SharedData.setResult(data);
                waitingAnimation.stop();
                $location.path("/bin/eqmnt/search/search/result").search($scope.srchParam);
                $scope.sortField=$scope.srchParam.sortAttr;
                $scope.calculatePagingInfo();
            })
          .error(function(data){
            console.log("error:", data);
            waitingAnimation.stop();
          })
      }
      $scope.calculatePagingInfo=function(){
        $scope.paging.start=($scope.paging.pNo-1)*$scope.paging.pSize +1;
        $scope.paging.end=($scope.result.hits<($scope.paging.pNo*$scope.paging.pSize))?
          $scope.result.hits:$scope.paging.pNo*$scope.paging.pSize;
      }
      $scope.recDetail=function(pos){
        $scope.srchParam.offset=pos;
        $scope.srchParam.pSize=1;
        let param={...$scope.srchParam};
        param.offset=pos;
        param.pSize=1;
        $scope.getRecDetail(param);
      }
      $scope.getRecDetail=function(p){
        var url="/bin/eqmnt/ajax/search/searchFn";
        SharedData.setParam($scope.srchParam);
        waitingAnimation.start();
        $http.post(url,p)
            .success(
              function(data){
                  waitingAnimation.stop();
                  data.recordList[0].isFirst=parseInt(data.offset)===0;
                  data.recordList[0].isLast=parseInt(data.offset)===parseInt(data.hits-1);
                  SharedData.setRecord(data.recordList[0]);
                  $location.path("/bin/eqmnt/search/search/recDetail").search($scope.srchParam);
              })
            .error(function(data){
                waitingAnimation.stop();
                console.log("error:", data);
          })
      }

      $scope.searchFacetBy=function(type,value){
        if (value == 0){
          $scope.srchParam.searchByCat=false;
          $scope.srchParam.cat="";
          $scope.srchParam.bldList="";
          $scope.srchParam.bldId="";
        }
        if (type.includes('category')){
          $scope.srchParam.searchByCat=true;
          $scope.srchParam.cat=value;
        }
        else if (type.includes('building')){
          $scope.srchParam.bldList=value;
          $scope.srchParam.bldId=value;
        }
        $scope.paging.pNo=1;
        $scope.paging.start=1;
        $scope.srchParam.pNum=1;
        $scope.srchParam.pNo=1;
        SharedData.setParam($scope.srchParam);
        $scope.doSearch();
      }

      $scope.updateSort=function(){
        $scope.srchParam.sortAttr=$scope.sortField;
        SharedData.setParam($scope.srchParam);
        $location.path("/bin/eqmnt/search/search/result").search($scope.srchParam);
        $scope.doSearch();
      }

      $scope.selectRecord=function(rec){
        let records= $scope.result.recordList;
        let itemList=[]; 
        angular.forEach(records,function(r){
          if (rec.rid == r.rid){
            r.selected=1;
            itemList.push({"rid":rec.rid,"barcode":rec.barcode||rec.eq_barcode,"selected":1});
          }
        });
        $scope.sessionHdl(itemList,$scope.getSessionList);
      }
      $scope.selectItem=function(rec){
        let records= $scope.result.recordList;
        let itemList=[]; 
        angular.forEach(records,function(r){
          if (rec.rid == r.rid && rec.barcode==r.barcode){
            r.selected=1;
            itemList.push({"rid":rec.rid,"barcode":rec.barcode||rec.eq_barcode,"selected":1});
          }
        });
        $scope.sessionHdl(itemList,$scope.getSessionList);
      }
      $scope.selectPage=function(){
        let records= $scope.result.recordList;
        let itemList=[]; 
        angular.forEach(records,function(r){
          r.selected=1;
          itemList.push({"rid":r.rid,"barcode":r.barcode||r.eq_barcode,"selected":1});
        });
        $scope.sessionHdl(itemList,$scope.getSessionList);
      }
      $scope.clearSelected=function(){
        waitingAnimation.start();
        var requestParam={ varName:$scope.sessionVarName,action:'clear'};
        $http.post("/bin/eqmnt/ajax/session",requestParam).success(
          function(data){
            angular.forEach($scope.result.recordList,function(r){
                  r.selected=0;    
            });
            $scope.getSessionList();
            waitingAnimation.stop();
        });
      }
      $scope.isSelected=function(){
        angular.forEach($scope.result.recordList,function(r){
          if ($scope.displayRecord === "barcode"){
            r.selected= $scope.selectedBcList.includes(r.barcode)?1:0;
          }
          else{
            r.selected= $scope.selectedRidList.includes(r.rid)?1:0;
          }
        });
      }

      $scope.selectPage=function(){
        let records= $scope.result.recordList;
        let itemList=[]; 
        angular.forEach(records,function(r){
          r.selected=1;
          itemList.push({"rid":r.rid,"barcode":r.barcode||r.eq_barcode,"selected":1});
        });
        $scope.sessionHdl(itemList,$scope.getSessionList);
      }

      $scope.sessionHdl = function(list,cbFn){
          let found=0;
          found = list.find(l => l.selected==1||l.selected=='1');
          let action='add';
          action = found && found.selected==1?action:'del';
          let note = "Equipment Search";
          list.forEach((l,i)=> { 
            l.note = note;
          });
          var params = { "varName":$scope.sessionVarName,
                         "action":action,
                         "itemList":list};
          $http.post("/bin/eqmnt/ajax/session",params).success(
            function( data, status, headers, config) {
              if (cbFn){
                setTimeout(()=> {cbFn()},1000);
              }
          });
      }
      $scope.getSessionList = function(){
           waitingAnimation.start();  
           var params = {"varName":$scope.sessionVarName,
                         "pSize":$scope.nSelected,
                         "pNum":1,
                         "groupBy" : "eq_barcode",
                         "briefFormat" : 1};
           $http.post("/bin/eqmnt/ajax/util/eq_getItemFromSession",params).success(
            function(data){
              $scope.nSelected= $scope.displayRecord==='record'? data.ridCount:data.bcCount;
              //$scope.selectedList=[];
              $scope.selectedRidList=[];
              $scope.selectedBcList=[];
              angular.forEach(data.itemList,function(i){
                  $scope.selectedRidList.push(i.rid);
                  i.barcode && $scope.selectedBcList.push(i.barcode);
                });
              setTimeout(()=> {
                $scope.isSelected();
              },1000);
              waitingAnimation.stop();
            });
      }
      
      $scope.listEditorGet=function(type){
        $scope.listEditor.param = {...$scope.srchParam};
        $scope.listEditor.selectAll= (type=='all')?1:0;
        if (type != 'all'){
          $scope.listEditor.param.field="eq_barcode";
          $scope.listEditor.param.kw=$scope.selectedBcList.join(" OR ");
          $scope.listEditor.param.op="search_svar";
        }
        else{
          $scope.listEditor.param.pNo=$scope.listEditor.paging.pNo;
        }
        $scope.listEditorGetRecords();
      }

      $scope.listEditorGetRecords=function(){
        let url="/bin/eqmnt/ajax/search/searchFn";
        waitingAnimation.start();
        $scope.listEditor.result={};
        $scope.listEditor.param.pNo=$scope.listEditor.paging.pNo;
        $http.post(url,$scope.listEditor.param)
            .success(
              function(data){
                $scope.listEditor.result=data;
                $scope.calculateListEditorPagingInfo("listEditor");
                waitingAnimation.stop();
              })
            .error(function(data){
                waitingAnimation.stop();
                console.log("error:", data);
            })
      }

      $scope.calculateListEditorPagingInfo=function(listEditor){
        if (listEditor){
          $scope.listEditor.paging.start = ($scope.listEditor.paging.pNo-1)*$scope.listEditor.paging.pSize +1;
          $scope.listEditor.paging.end = ($scope.listEditor.result.hits < ($scope.listEditor.paging.pNo*$scope.listEditor.paging.pSize) )?
          $scope.listEditor.result.hits:$scope.listEditor.paging.pNo*$scope.listEditor.paging.pSize;
        }
      }

      $scope.listEditorNavPage=function(p){
        $scope.listEditor.result.hits=0;
        $scope.listEditor.paging.pNo=p;
        $scope.srchParam.pNo=p;
        $scope.listEditorGetRecords();
      }
     
      $scope.changeSelectAll=function(){
          $scope.rfSelectedAll=$scope.selAllFields;
          $scope.ifSelectedAll=$scope.selAllFields;
          $scope.changeSelect();
      }

      $scope.changeSelect=function(){
          $scope.defList.record.forEach((e,i)=> {e.selected=$scope.rfSelectedAll} );
          $scope.defList.item.forEach((e,i)=> {e.selected=$scope.ifSelectedAll} );
          $scope.selAllFields= $scope.ifSelectedAll&&$scope.rfSelectedAll;
      }
      
      $scope.listEditorReset=function(){
        $scope.rfSelectedAll=0;
        $scope.ifSelectedAll=0;
        $scope.selectedAll=0;
        $scope.selAllFields=0;
        $scope.selCircStatus=0;
        $scope.defList.record.forEach((e,i)=> e.selected=0);
        $scope.defList.item.forEach((e,i)=> e.selected=0);
        $scope.listEditor.result ={};
      }

      $scope.listEditorSave=function(type){
        let param= {...$scope.listEditor.param}
        param.pSize=$scope.listEditor.result.hits;
        if ($scope.listEditor.selectAll!==1){
          param.field="eq_barcode";
          param.kw=$scope.selectedBcList.join(" OR ");
        }
        let url="/bin/eqmnt/ajax/search/searchFn";
        $http.post(url,param)
            .success(
              function(data){
                $scope.listEditor.data= data.recordList;
                let content;
                if (type==='HTML')
                  content=$scope.getContentAsHTML($scope.listEditor.data);
                else{
                  content=$scope.getContentAsCSV($scope.listEditor.data);
                }
                $scope.writeToFile(type,content);
                waitingAnimation.stop();
              })
            .error(function(data){
                waitingAnimation.stop();
                console.log("error:", data);
            });
      }
      $scope.writeToFile=function(type,content){
        var dt = $scope.getFormatDateTime()
				var filename="equiment_" + dt + ".csv";
        if (type==='HTML'){
          filename="equiment_" + dt + ".html"
        }
        if (window.navigator.msSaveOrOpenBlob) {
          var blob = new Blob([decodeURIComponent(encodeURI(content))], {
                    type: "text/csv;charset=utf-8;"
          });
          navigator.msSaveBlob(blob, filename);
				} else {
          var a = document.createElement('a');
          a.href = 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(content);
          a.target = '_blank';
          a.download = filename;
          document.body.appendChild(a);
          a.click();
        }
      }
      $scope.getContentAsHTML=function(data){
          let content="",trHeader="",tr="",td="";
          let style="<style>table {border-collapse:collapse;width:100%;tr:nth-child(even){background-color:#f2f2f2;};font-size:85%;}</style>";
          trHeader="<td>Equipment</td>";
          angular.forEach($scope.defList.record,function(v,k){
            if (v.selected)
              trHeader += "<td>" + v.name+ "</td>";
            if (v.selected && v.id=='category'){
              trHeader += "<td>" + "Category Description " + "</td>";
            }
          })
          trHeader += "<td>Barcode</td>";
          angular.forEach($scope.defList.item,function(v,k){
            if (v.selected)
              trHeader += "<td>" + v.name+ "</td>";
            if (v.selected && v.id=='category'){
              trHeader += "<th>" + "Category description " + "</th>";
            }
          })
          //trHeader +="<td>Status</td>";
          //if ($scope.srch.circ_type=='onloan' && $scope.showPatron==1){
          //  trHeader += "<td>Patron / Due date</td>";
          //}
          if ($scope.selCircStatus){
              trHeader += "<td>Circ. Status</td>";
          }
          trHeader +="</tr>";
          angular.forEach(data,function(r,k){
            tr += "<tr><td>"+r.eq_name+"</td>";
            angular.forEach($scope.defList.record,function(f,kk){
              if (f.selected) {
                r.record[f.id] = (r.record[f.id]==0||r.record[f.id]==null||!r.record[f.id]||typeof r.record[f.id]===undefined)?"":r.record[f.id];
                tr += "<td>" + r.record[f.id] || "" + "</td>";
                if (f.id=='category'){
                  r.record.categoryStr = (r.record.categoryStr==null)?"":r.record.categoryStr;
                  tr += "<td>" + r.record.categoryStr  + "</td>";
                }
              }
            });
            tr += "<td>"+r.eq_barcode+"</td>";
            angular.forEach($scope.defList.item,function(f,kk){
              if (f.selected){
                r.item[f.id] = (r.item[f.id]==0||r.item[f.id]==null||!r.item[f.id]||typeof r.item[f.id]===undefined)?"":r.item[f.id];
                tr += "<td>" +  r.item[f.id] + "</td>";
              }
            });
            //tr += "<td>"+r.statusTxt+"</td>";
            //if ($scope.srch.circ_type=='onloan' && $scope.showPatron==1 ){
            //  tr += "<td>"+ r.circInfo.patron_name +" / " + r.circInfo.l_duedate + "</td>";
            //}
            if ($scope.selCircStatus){
              //r.circInfo= (r.circInfo==null|| typeof r.circInfo===undefined)?"":r.circInfo;
              tr += "<td>"+ r.statusTxt||"" + "</td>";
            }
            tr += "</tr>";
          })
          content = style + "<table>" + trHeader + tr + "</table>";
          return content;
      }

      $scope.getContentAsCSV=function(data){
          let header='"Equipment"';
          let content="";
          let rows="";
          angular.forEach($scope.defList.record,function(v,k){
            if (v.selected){
              header += ',"' + v.name+ '"';
              if (v.id=='category') {
                header += ',"' + "Category description" + '"';
              }
            }
          })
          header += ',"Barcode"';
          angular.forEach($scope.defList.item,function(v,k){
            if (v.selected)
              header += ',"' + v.name+ '"';
          })
          
          /*header += ',"Status"';
          if ($scope.srch.circ_type=='onloan' && $scope.showPatron==1){
            header += '"Patron / Due date"';
          }*/
          
          if ($scope.selCircStatus){
             header += ',"Circ. Status"'; 
          }
          header +="\r\n";

          angular.forEach($scope.listEditor.data,function(r,k){
            r.eq_name = $scope.escapeFn(r.eq_name);
            rows += "\""+r.eq_name+"\"";
            angular.forEach($scope.defList.record,function(f,kk){
	      r.record = r.record||{};	
              if (f.selected){
                r.record[f.id]= r.record[f.id]||"";
                //r.record[f.id] = (r.record[f.id]==0 || r.record[f.id]==null)?"":r.record[f.id];
                r.record[f.id] = $scope.escapeFn(r.record[f.id]);
                rows += ",\"" + r.record[f.id]+ "\"";
                if (f.id=='category'){
                  r.record.categoryStr = (r.record.categoryStr==null)?"":r.record.categoryStr;
                  rows += ",\"" + r.record.categoryStr + "\"";
                }
              }
            });
            rows += ",\""+r.eq_barcode+"\"";
            angular.forEach($scope.defList.item,function(f,kk){
	      r.item = r.item || {};
              if (f.selected) {
                r.item[f.id] = r.item[f.id]||"";
                //r.item[f.id] = (r.item[f.id]==0||r.item[f.id]==null||!r.item[f.id]||typeof r.item[f.id]===undefined)?"":r.item[f.id];
                var v = r.item && f.id?r.item[f.id]:'';
                rows += ",\"" + v + "\"";
              }
            });
            //rows += ",\""+r.statusTxt+"\"";
            /*if ($scope.srch.circ_type=='onloan' && $scope.showPatron==1 ){
              rows += ",\""+ r.circInfo.patron_name + " / " + r.circInfo.l_duedate + "\"";
            }*/
            
            if ($scope.selCircStatus){
              //r.circInfo= (r.circInfo==null|| typeof r.circInfo===undefined)?"":r.circInfo;
              r.statusTxt = r.statusTxt || "";
              rows += ",\""+ r.statusTxt + "\"";
            }
            rows += "\r\n";
          })
          content = header + rows ;
          return content;
      }
      $scope.getFormatDateTime=function(){
				  var d= new Date();
				  var dateString =
    					d.getUTCFullYear() +
    					("0" + (d.getUTCMonth()+1)).slice(-2) +
				 		("0" + d.getUTCDate()).slice(-2) + 
				 		("0" + d.getUTCHours()).slice(-2) + 
				 		("0" + d.getUTCMinutes()).slice(-2) +
				 		("0" + d.getUTCSeconds()).slice(-2);
				  return dateString;			
			}
      $scope.escapeFn=function(str){
          str = str.replace(/"/g,'""');
          return str;
      }
      
      $scope.init=function(){
        $scope.srchParam = SharedData.getParam();
        //delete $scope.srchParam['rid'];
        //delete $scope.srchParam['offset'];
        $scope.srchParam.pSize=(parseInt($scope.srchParam.pSize)===1)?10:$scope.srchParam.pSize;
        $scope.listEditor.result={};
        console.log("scope defList:", $scope.defList.record);
        if ($scope.srchParam.kw !=''){
          $scope.doSearch();
          $scope.getSessionList();
         }
         $scope.srchFieldShow.record = ($scope.defList.record || []).filter(r => r.showOnSearch == 1);
         $scope.srchFieldShow.item =    ($scope.defList.item || []).filter(r => r.showOnSearch == 1);
        }
      
  }]);

  // recDetailCtrl
  opalsApp.controller('recDetailCtrl',['$scope','$window','$http','$location','SharedData','waitingAnimation',
    function($scope,$window,$http,$location,SharedData,waitingAnimation){
      $scope.oplMsg=oplMsg;
      $scope.record_edit = <tmpl_var eq_record_edit default=0>;
      $scope.record={};
      $scope.defList = <tmpl_var fieldList default=[]>;
      $scope.srchParam={};
      $scope.curRid;
      $scope.backToResult=function(){
         $scope.srchParam.pSize=10;
         delete $scope.srchParam['offset'];
         SharedData.setParam($scope.srchParam);
         $scope.doSearch();
      }
      
      $scope.doSearch=function(){
        waitingAnimation.start();
        var url="/bin/eqmnt/ajax/search/searchFn";
        var param = $scope.srchParam;
        param.op = "search";

        $http.post(url,param)
          .success(
            function(data){
                SharedData.setResult(data);
                waitingAnimation.stop();
                $location.path("/bin/eqmnt/search/search/result").search($scope.srchParam);
            })
          .error(function(data){
            console.log("error:", data);
            waitingAnimation.stop();
          })
      }

      $scope.prevRecord=function(){
        $scope.srchParam.offset=$scope.srchParam.offset<1?0:$scope.srchParam.offset-1 ;
        $location.path("/bin/eqmnt/search/search/recDetail").search($scope.srchParam);
        $scope.getRecDetail($scope.srchParam);
      }
      $scope.nextRecord=function(){
        $scope.srchParam.offset=$scope.srchParam.offset>0?$scope.srchParam.offset+1:1;
        $location.path("/bin/eqmnt/search/search/recDetail/").search($scope.srchParam);
        $scope.getRecDetail($scope.srchParam);
      }

      $scope.getRecDetail=function(p){
        var url="/bin/eqmnt/ajax/search/searchFn";
        waitingAnimation.start();
        $http.post(url,p)
            .success(
              function(data){
                  waitingAnimation.stop();
                  data.recordList[0].isFirst=parseInt(data.offset)===0;
                  data.recordList[0].isLast=parseInt(data.offset)===parseInt(data.hits-1);
                  SharedData.setRecord(data.recordList[0]);
                  SharedData.setRecId(data.recordList[0].rid);
                  $location.path("/bin/eqmnt/search/search/recDetail").search($scope.srchParam);
              })
            .error(function(data){
                waitingAnimation.stop();
                console.log("error:", data);
          })
      }

      $scope.getItemCircStatus=function(barcode){
        var url = '/bin/eqmnt/circ/itemStatus?bc='+barcode;
        $window.location.href=url;
      }

      $scope.edit=function(){
          const param = {...$scope.srchParam};
          param.rid=$scope.recId;
          const data = new URLSearchParams(param).toString();
          var url="/bin/eqmnt/record/edit?"+data;
          console.log("edit url:", url);
          SharedData.setParam({});
          $window.location.href=url;
      }
    
      $scope.clone=function(){
          //var data=$.param($scope.srchParam);
          //var url="/bin/eqmnt/record/edit?op=clone&"+data;
          //$window.location.href=url;
          const param = {...$scope.srchParam};
          param.rid=$scope.recId;
          param.op='clone';
          const data = new URLSearchParams(param).toString();
          var url="/bin/eqmnt/record/edit?"+data;
          SharedData.setParam({});
          $window.location.href=url;
      }
      $scope.$watch(function(){
        return SharedData.getRecord();
        }, function(newData){
          $scope.record=newData;
          $scope.recId=newData.rid;
          $location.path("/bin/eqmnt/search/search/recDetail").search($scope.srchParam);
      });
      
      $scope.init=function(){
        $scope.record={};
        $scope.srchParam={};
        $scope.recId=0;
        $scope.srchParam = {...SharedData.getParam()};
        $scope.getRecDetail($scope.srchParam);
      }
    
  }]);

</script> 

<div ng-controller="searchCtrl" ng-init="init();" >
  <div class="searchBlock">
    <eq-search search-cb-fn="searchCbFn" search-get-param-fn="searchParamFn" reset-cb-fn="resetCbFn" on-change-cb-fn="onChangeCbFn"
      search-field-list="searchFieldList" search-building-list="buildingList" display-record="{{displayRecord}}" 
      page-size="{{paging.search.pSize}}" cur-page="{{paging.search.pNo}}" show-adv-search="true" ss-var-name="{{sessionVarName}}" search-param="{{srchParam}}">
    </eq-search>
  </div>
  <div ng-show="notFound===1">
    <div class="srchMessage">
      {{oplMsg.noRecFoundTxt || "No equipment records found"}}
    </div>
  </div>
</div>

<div ng-view class="content"> </div>


<tmpl_include footer.inc>
