'use strict';RMSFrontEnd.factory('ajaxService',['$http','$q','$log',function($http,$q,$log){function translateStatus(code){switch(code){case 0:return"Success";case 1:return"Failed";case 2:return"Error";case 3:return"Pending";case 4:return"Restricted";}}
return{postResult:function(url,data,headers){headers=headers||{};return $http.post(url,data,{headers:headers}).then(function(response){if(response.status===200&&response.data){return response.data;}else{return{status:response.data.status,message:"Unknown error occured."}}},function(response){return{status:response.data.status,message:"Unknown error occured."}});},normalize:function(httpPromise){var deferred=$q.defer();httpPromise.then(function(response){if(response.status>=200&&response.status<300&&response.data){deferred.resolve(response.data);}else{deferred.reject({status:response.data.status||-1,message:"Unknown error occured.",statusCode:response.status});}},function(response){deferred.reject({status:-2,message:"Unknown error occured.",statusCode:response.status});});return deferred.promise;},doAjaxCall:function(method,url,data,headers){headers=headers||{};$('body').addClass('working');var deferred=$q.defer();var promise=deferred.promise;promise._then=promise.then;promise.then=function(thenFn,errFn,notifyFn){var catchFn=function(err){$('body').removeClass('working');var error={};error.message={error:"We're experiencing technical difficulties. Please try again later."};if(errFn)
errFn(error);else
$log.warn("Error function hasn't been defined.");}
return promise._then(thenFn,errFn,notifyFn).catch(catchFn);};$http({method:method,url:url,data:data,headers:headers}).then(function(response){$('body').removeClass('working');if(response.data.status!==0){deferred.reject(response.data);return;}
deferred.resolve(response.data);},function(response){$('body').removeClass('working');if(!response||!response.data||!response.data.message){response.data={};response.data.message="We're experiencing technical difficulties. Please try again later.";}
deferred.reject(response.data);});return deferred.promise;}}}]);;;
'use strict';RMSFrontEnd.factory('userService',function(ajaxService,$http,fileUploaderService){var profileData={};return{create:function(data,recaptcha){return ajaxService.doAjaxCall('POST','/api/member/Create',data,{'X-Recaptcha':recaptcha});},editProfile:function(data){return ajaxService.postResult('/api/member/Edit',data);},login:function(data){return $http.post('/api/member/Login',data);},logout:function(){return $http.post('/api/member/Logout').then(function(response){if(response.status===200&&response.data){return response.data;}});},consign:function(data,recaptcha){return $http.post('/api/consign/Create',data,{headers:{'X-Recaptcha':recaptcha}});},privateSale:function(data,recaptcha){var httpPromise=$http.post('/api/private-sales/Create',data,{headers:{'X-Recaptcha':recaptcha}});return ajaxService.normalize(httpPromise);},consignConfirm:function(consignmentId){return $http.post('/api/consign/Submit?consignmentId='+consignmentId,{});},consignPhotoUpload:function(data,consignmentId){return fileUploaderService.saveModel(data,'/api/consign/UploadPhoto?consignmentId='+consignmentId);},requestMobileNumberVerification:function(number){return $http.get('/api/member/SendMobileNumberVerification?number='+encodeURIComponent(number)).then(function(response){if(response.status===200&&response.data){return response.data;}});},verifyMobileNumberVerification:function(number,code){return $http.get('/api/member/VerifyMobileNumber?number='+encodeURIComponent(number)+'&code='+code).then(function(response){if(response.status===200&&response.data){return response.data;}});},requestChangeEmail:function(data){return ajaxService.postResult('/api/member/SendEmailChange',data);},requestPasswordChange:function(data){return ajaxService.postResult('/api/member/ChangePassword',data);},resetPassword:function(data){return ajaxService.doAjaxCall('POST','/api/member/ResetPassword',data);},forgotPassword:function(data){return ajaxService.doAjaxCall('POST','/api/member/SendResetPassword',data);},validateEmail:function(data){return ajaxService.doAjaxCall('POST','/api/member/SendEmailConfirmation',data);},exists:function(username){return $http.post('/api/member/ValidateUsername',{username:username});},roles:function(){return $http.post('/api/member/MemberRoles').then(function(response){if(response.status===200&&response.data){return response.data;}});},setNotifications:function(data){return ajaxService.postResult('/api/member/SetNotifications',data);},info:function(){return $http.post('/api/member/Me').then(function(response){if(response.status===200&&response.data){return response.data;}});},storeProfile:function(data){profileData=data;},retrieveProfile:function(){return profileData;},};});;;
'use strict';RMSFrontEnd.factory('timeService',function($http,$q){var _this=this;var offsetRequest={deferred:null,date:null};return{getOffset:function(cached){cached=cached||true;if(cached){if(offsetRequest.deferred==null){offsetRequest.deferred=$q.defer();offsetRequest.date=new Date();$http.get('/api/bidding/settings/TimeOffset?dateTime='+offsetRequest.date.toISOString(),{cache:true}).then(function(response){if(response.status===200&&response.data){offsetRequest.deferred.resolve(response.data);}});}
return offsetRequest.deferred.promise;}
return $http.get('/api/bidding/settings/TimeOffset?dateTime='+offsetRequest.date.toISOString()).then(function(response){if(response.status===200&&response.data){return response.data;}});},getTimeSpanTemplates:function(cache){return $http.get('/api/bidding/settings/TimeTemplates',{cache:cache||true}).then(function(response){if(response.status===200&&response.data){return response.data;}});},formatTimeSpan:function formatTimeSpan(timeSpan,template){var timeLeftText="";if(template===undefined){return timeSpan.toString();}
var hasTemplate=function(templateText){return(templateText||"").trim()!=="";};if(timeSpan.TotalSeconds<0&&hasTemplate(template.finishing)){return timeSpan.toString(template.finishing);}
if(timeSpan.TotalMinutes<1&&hasTemplate(template.underMinute)){return timeSpan.toString(template.underMinute);}
if(timeSpan.TotalMinutes<2&&hasTemplate(template.under2Minute)){return timeSpan.toString(template.under2Minute);}
if(timeSpan.TotalHours<1&&hasTemplate(template.underHour)){return timeSpan.toString(template.underHour);}
if(timeSpan.TotalHours<2&&hasTemplate(template.under2Hour)){return timeSpan.toString(template.under2Hour);}
if(timeSpan.TotalDays<1&&hasTemplate(template.underDay)){return timeSpan.toString(template.underDay);}
if(timeSpan.TotalDays<2&&hasTemplate(template.under2Day)){return timeSpan.toString(template.under2Day);}
if(hasTemplate(template.fullTime)){return timeSpan.toString(template.fullTime);}
return timeLeftText;},adjustDateOffset:function(date,offsetMs){date.setMilliseconds(offsetMs+date.getMilliseconds());},formatTimeSpanInMillis:function(millis,template){return this.formatTimeSpan(this.getTimeSpan(millis),template)},getTimeSpan:function(milliseconds){var millisInSeconds=1000;var millisInMinutes=millisInSeconds*60;var millisInHours=millisInMinutes*60;var millisInDays=millisInHours*24;var direction=milliseconds<0?-1:1;var totalMilliseconds=Math.abs(milliseconds);milliseconds=totalMilliseconds;var days=Math.floor(milliseconds/(millisInDays));milliseconds-=days*(millisInDays);var hours=Math.floor(milliseconds/(millisInHours));milliseconds-=hours*(millisInHours);var minutes=Math.floor(milliseconds/(millisInMinutes));milliseconds-=minutes*(millisInMinutes);var seconds=Math.floor(milliseconds/(millisInSeconds));milliseconds-=seconds*(millisInSeconds);return{Days:days*direction,Hours:hours*direction,Minutes:minutes*direction,Seconds:seconds*direction,Milliseconds:milliseconds*direction,TotalDays:Math.floor(totalMilliseconds/millisInDays)*direction,TotalHours:Math.floor(totalMilliseconds/millisInHours)*direction,TotalMinutes:Math.floor(totalMilliseconds/millisInMinutes)*direction,TotalSeconds:Math.floor(totalMilliseconds/millisInSeconds)*direction,TotalMilliseconds:totalMilliseconds*direction,format:function(templates){for(const template of templates){let valid=(template.template||"").trim()!=="";if(!valid)continue;if(template.milliseconds){if(this.TotalMilliseconds<template.milliseconds){return this.toString(template.template)}}
if(template.seconds){if(this.TotalSeconds<template.seconds){return this.toString(template.template)}}
if(template.minutes){if(this.TotalMinutes<template.minutes){return this.toString(template.template)}}
if(template.hours){if(this.TotalHours<template.hours){return this.toString(template.template)}}
if(template.days){if(this.TotalDays<template.days){return this.toString(template.template)}}
if(template.unlimited){return this.toString(template.template)}}
return"";},toString:function(template){template=template||"{days=|$value day|$value days}{hours=| $value hour| $value hours}{minutes=| $value minutes| $value minutes}{seconds=| $value seconds| $value seconds}";var regex=/\{(seconds|days|hours|minutes|milliseconds)+?=(.*?)\|(.*?)\|(.*?)\}/;var result;while((result=regex.exec(template))!==null){if(result.index===regex.lastIndex){regex.lastIndex++;}
var value=0;var key=result[1];switch(key){case"days":value=this.Days;break;case"hours":value=this.Hours;break;case"minutes":value=this.Minutes;break;case"seconds":value=this.Seconds;break;case"milliseconds":value=this.Milliseconds;break;}
var valueTemplate="";if(value>1){valueTemplate=result[4];}else if(value===1){valueTemplate=result[3];}else{valueTemplate=result[2];}
template=template.replace(result[0],valueTemplate.replace(/\$value/gi,value))}
return template.replace("{days}",this.Days.toString()).replace("{hours}",this.Hours.toString()).replace("{minutes}",this.Minutes.toString()).replace("{seconds}",this.Seconds.toString()).replace("{milliseconds}",this.Milliseconds.toString());}}},formatTimeLeft:function(timeLeft,finished,closingInSeconds,templates){var formattedTimeLeft="";if(finished){formattedTimeLeft=templates.finished;}else{if(timeLeft.TotalSeconds<closingInSeconds){formattedTimeLeft=timeLeft.toString(templates.finishing);}else{formattedTimeLeft=this.formatTimeSpan(timeLeft,templates);}}
return formattedTimeLeft;},getTimingStats:function(startTime,endTime,offsetMs,startingInTemplate,endingInTemplate){var currentDate=new Date();var offsetDate=currentDate.setMilliseconds(offsetMs+currentDate.getMilliseconds());var started=(offsetDate-startTime)>0;var millis=endTime-offsetDate;var startMillis=startTime-offsetDate;return{started:started,millisRemaining:millis,millisStartingIn:startMillis,timeSpan:this.getTimeSpan(millis),formattedTimeRemaining:this.getTimeSpan(millis).toString(startingInTemplate||"{days=|$valued|$valued}{hours=| $valueh| $valueh}{minutes=| $valuem| $valuem}{seconds=| $values| $values}"),formattedTimeStartingIn:this.getTimeSpan(millis).toString(endingInTemplate||"{days=|$valued|$valued}{hours=| $valueh| $valueh}{minutes=| $valuem| $valuem}{seconds=| $values| $values}"),}}};});;;
'use strict';RMSFrontEnd.factory('logService',function($http){function errorLog(message){return $http({method:'POST',url:'/api/utils/ErrorLog',data:{message:message}}).then(function(response){if(response.status===200&&response.data){return response.data;}});}
function log(message){return $http({method:'POST',url:'/api/utils/Log',data:{message:message}}).then(function(response){if(response.status===200&&response.data){return response.data;}});}
return{errorLog:errorLog,log:log};});;;
'use strict';RMSFrontEnd.factory('registerToBidService',function($http,fileUploaderService,ajaxService){return{uploadAttachments:function(id,data){return fileUploaderService.saveModel(data,'/api/registration/UploadAttachments?id='+id).then(function(response){if(response.status===200&&response.data){return response.data;}});},submitRegistration:function(data){return ajaxService.postResult('/api/registration/submit',data);},createRegistration:function(data,recaptcha){return ajaxService.postResult('/api/registration/create',data,{'X-Recaptcha':recaptcha});},getRegistrationStatus:function(id){var append=id===undefined?"":"&auctionId="+id;return $http.get('/api/registration/RegistrationStatus?'+append).then(function(response){if(response.status===200&&response.data){return response.data;}});},getMemberAccess:function(){return $http.get('/api/registration/MemberAccess').then(function(response){if(response.status===200&&response.data){return response.data;}});},getConfiguration:function(id){return $http.get('/api/registration/Configuration?auctionId='+id).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},getLots:function(id){return $http.get('/api/registration/Lots?auctionId='+id).then(function(response){if(response.status===200&&response.data){return response.data;}});},getAuctions:function(auctionId){return $http.get('/api/registration/auctions?auctionId='+auctionId);},};});;;
'use strict';RMSFrontEnd.factory('getQueryStringService',['$window',function($window){return{getURLParams:function(field,url){var href=url?url:$window.location.href;var reg=new RegExp('[?&]'+field+'=([^&#]*)','i');var string=reg.exec(href);return string?string[1]:null;}};}]);;;
'use strict';RMSFrontEnd.factory('formDataOptions',['$http',function($http){return{getMediaTypes:function(callback){return $http.get('/api/Utils/GetMediaTypes',{cache:true}).then(function(response){if(response.status===200&&response.data){return response.data;}}).then(callback);},getOptions:function(callback){return $http.get('/api/utils/GetFormData',{cache:true}).then(function(response){if(response.status===200&&response.data){return response.data;}}).then(callback);},requestInquiry:function(data,recaptcha){return $http.post('/api/utils/RequestInquiry',data,{headers:{'X-Recaptcha':recaptcha}}).then(function(response){if(response.status===200&&response.data){return response.data;}});},requestOffer:function(data,recaptcha){return $http.post('/api/utils/RequestOffer',data,{headers:{'X-Recaptcha':recaptcha}}).then(function(response){if(response.status===200&&response.data){return response.data;}});},hasOffer:function(lotId){return $http.get('/api/utils/HasOffer?lotId='+lotId).then(function(response){if(response.status===200&&response.data){return response.data;}});},};}]);;;
'use strict';RMSFrontEnd.factory('stateSelection',function(formDataOptions){return{getStates:function(country){return formDataOptions.getOptions(function(data){var array=[];switch(country){case'Canada':array=data.states["canada"];break;case'United States':array=data.states["united states"];break;default:array=[];}
return array;})}}});;;
RMSFrontEnd.factory('savedBillingAddress',['$http',function($http){'use strict';return{getOptions:function(callback){$http.get('/umbraco/Surface/Utils/GetAuctions').success(callback);},getStaticOptions:["Enter a new address","San Jose, Costa Rica"]};}]);;;
'use strict';RMSFrontEnd.factory('searchService',function(ajaxService,$http,$location){function mapSelectionIds(list){let newList=[];if(list){for(const item of list){newList.push(item.id);}}
return newList;}
function mapSelections(idList,options){let newList=[];for(const item of(idList||[])){for(const option of(options||[])){if(option.id===item){newList.push(option);}}}
return newList;}
function mapSelection(idList,options){var items=mapSelections(idList,options);if(items.length>0)return items[0];return undefined;}
function mapSelectionId(prop){if(prop===undefined||prop===null)
return prop;if(prop.id===undefined)
return undefined;return prop.id;}
function searchFromLocation(options){var search=$location.search();search.LocationCountry=mapSelections(angular.isArray(search.LocationCountry)?search.LocationCountry:[search.LocationCountry],options.countries||[]);search.Collection=mapSelection([search.Collection||null],options.collections);search.OfferStatus=mapSelection([search.OfferStatus||null],options.offerStatus);search.BiddingStatus=mapSelection([search.BiddingStatus||null],options.biddingStatus);search.WinningStatus=mapSelection([search.WinningStatus||null],options.winningStatus);search.Auction=mapSelection([search.Auction||null],options.auctions);search.Day=mapSelection([search.Day||null],options.days);search.SortBy=mapSelection([search.SortBy||options.defaultSort||"Default"],options.sorting);search.CategoryTag=mapSelections(angular.isArray(search.CategoryTag)?search.CategoryTag:[search.CategoryTag],options.tags);if(search.Auctions)search.Auctions=angular.isArray(search.Auctions)?search.Auctions:[search.Auctions];if(search.FromYear)search.FromYear=parseInt(search.FromYear);if(search.ToYear)search.ToYear=parseInt(search.ToYear);if(search.page)search.page=parseInt(search.page);if(search.pageSize)search.pageSize=parseInt(search.pageSize);return{search:search,page:parseInt($location.search().page),pageSize:parseInt($location.search().pageSize)};}
function searchDefaults(options){return{LocationCountry:[],OfferStatus:mapSelection([null],options.offerStatus),Collection:mapSelection([null],options.collections),WinningStatus:mapSelection([null],options.winningStatus),BiddingStatus:mapSelection([null],options.biddingStatus),Auction:mapSelection([null],options.auctions),Day:mapSelection([null],options.days),SortBy:mapSelection(["Default"],options.sorting),SearchTerm:"",CategoryTag:[],FromYear:""}}
function updateLocation(data){var searchOptionsCopy=angular.copy(data);var searchLocation=sanitize(searchOptionsCopy.search);searchLocation.page=searchOptionsCopy.page;searchLocation.pageSize=searchOptionsCopy.pageSize;$location.search(searchLocation);}
function sanitize(search){var newSearch=angular.copy(search);newSearch.LocationCountry=mapSelectionIds(newSearch.LocationCountry);newSearch.CategoryTag=mapSelectionIds(newSearch.CategoryTag);newSearch.Collection=mapSelectionId(newSearch.Collection);newSearch.OfferStatus=mapSelectionId(newSearch.OfferStatus);newSearch.BiddingStatus=mapSelectionId(newSearch.BiddingStatus);newSearch.WinningStatus=mapSelectionId(newSearch.WinningStatus);newSearch.Auction=mapSelectionId(newSearch.Auction);newSearch.Day=mapSelectionId(newSearch.Day);newSearch.SortBy=mapSelectionId(newSearch.SortBy);return newSearch;}
return{searchDefaults:searchDefaults,searchFromLocation:searchFromLocation,updateLocation:updateLocation,search:function(data,page,pageSize){return $http.post('/api/search/SearchLots?page='+(page||0)+"&pageSize="+(pageSize||40),sanitize(data)).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},searchAuction:function(auction,stillForSale,data,page,pageSize){var copy={Auction:{id:auction},StillForSaleOnly:stillForSale}
var newdata=angular.merge({},data,copy)
return this.search(newdata,page,pageSize);},searchMyFavouriteLots:function(data,page,pageSize){var copy={favoritesOnly:true,}
var newdata=angular.merge({},data,copy)
return this.search(newdata,page,pageSize);},searchMyActiveLots:function(data,page,pageSize){var copy={BiddingOnly:"Current",}
var newdata=angular.merge({},data,copy)
return this.search(newdata,page,pageSize);},searchMyPastLots:function(data,page,pageSize){var copy={BiddingOnly:"Past",}
var newdata=angular.merge({},data,copy)
return this.search(newdata,page,pageSize);},searchOptions:function(auction){return $http.get('/api/search/GetSearchSelectionOptions?auction='+auction,{cache:true}).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},searchBiddingOptions:function(current){return $http.get('/api/search/GetSearchBiddingSelectionOptions?current='+current,{cache:true}).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},searchBlogPosts:function(data,page,pageSize){return $http.post('/api/search/SearchBlogs?page='+(page||0)+"&pageSize="+(pageSize||40),data).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},toIdList:mapSelectionIds,toOptionList:mapSelections,GetPager:function(totalItems,currentPage,pageSize,totalPages){currentPage=currentPage||1;pageSize=pageSize||10;var totalPages=totalPages;var startPage,endPage;if(totalPages<=4){startPage=1;endPage=totalPages;}else{if(currentPage<=2){startPage=1;endPage=4;}else if(currentPage==totalPages){startPage=totalPages-3;endPage=4;}else if(currentPage+3>totalPages){startPage=currentPage-((currentPage+3)-totalPages);endPage=4;}else{startPage=currentPage;endPage=4;}}
var startIndex=(currentPage-1)*pageSize;var endIndex=Math.min(startIndex+pageSize-1,totalItems-1);var pages=range(startPage,endPage);function range(start,count){return Array.apply(0,Array(count)).map(function(element,index){return index+start;});}
return{totalItems:totalItems,currentPage:currentPage,pageSize:pageSize,totalPages:totalPages,startPage:startPage,endPage:endPage,startIndex:startIndex,endIndex:endIndex,pages:pages};}}});;;
'use strict';RMSFrontEnd.factory('mediaService',function($http){return{findReleases:function(year){return $http.get('/api/press/releases/FindByYear?year='+year).then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});},getAvailableYears:function(){return $http.get('/api/press/releases/GetAvailableYears').then(function(response){if(response.status===200&&response.data){return response.data;}else{return response.data.message;}});}}});;;
(function(){'use strict';angular.module("RMSFrontEnd").factory("fileUploaderService",function($q,$http){var getModelAsFormData=function(data){var dataAsFormData=new FormData();angular.forEach(data,function(value,key){if(key=="Images"){for(var i=0;i<value.length;i++){dataAsFormData.append(value[i].name,value[i]);}}else{dataAsFormData.append(key,value);}});return dataAsFormData;};var saveModel=function(data,url,headers){headers=headers||{};headers['Content-Type']=undefined;return $http({url:url,method:"POST",data:getModelAsFormData(data),transformRequest:angular.identity,headers:headers});};return{saveModel:saveModel};});})();;;
'use strict';RMSFrontEnd.factory('modalService',['$http',function($http){return{registration:function(callback){$http.get('/umbraco/Surface/RegisterBID/GetModal',{cache:true}).success(callback);},consign:function(callback){$http.get('/umbraco/Surface/Consign/GetModal',{cache:true}).success(callback);},bidding:function(item){return"<div id='bid-"+item.id+"' class='modal modal--form-steps fade' tabindex='-1' role='dialog' style='padding-right: 17px;'>"+"<div class='modal-dialog' role='document' style=' width: 224px;'>"+"<div class='modal-content "+item.StyleClass+"' style='padding: 0;'>"+"<bidding-widget id='"+item.id+"' registered='true' modal='true'  time='time' current-bid='currentBid' is-high-bidder='isHighBidder' ></bidding-widget>"+"</div>"+"</div>"+"</div>";},sealedBidding:function(item){return"<div id='sealed-bid-"+item.id+"' class='modal modal--form-steps fade' tabindex='-1' role='dialog' style='padding-right: 17px;'>"+"<div class='modal-dialog' role='document' style=' width: 224px;'>"+"<div class='modal-content "+item.StyleClass+"' style='padding: 0;'>"+"<sealed-bidding id='"+item.id+"' auction-id='"+item.auctionId+"' modal='true' time='time' is-high-bidder='isHighBidder' ></sealed-bidding>"+"</div>"+"</div>"+"</div>";},timedBidding:function(item){return"<div id='timed-bid-"+item.id+"' class='modal modal--form-steps fade' tabindex='-1' role='dialog' style='padding-right: 17px;'>"+"<div class='modal-dialog' role='document' style=' width: 224px;'>"+"<div class='modal-content "+item.StyleClass+"' style='padding: 0;'>"+"<timed-bidding id='"+item.id+"' auction-id='"+item.auctionId+"' modal='true' time='time' current-bid='currentBid' is-high-bidder='isHighBidder' ></timed-bidding>"+"</div>"+"</div>"+"</div>";}}}]);;;
'use strict';RMSFrontEnd.factory('paymentService',function($http,$q,logService,ajaxService){function getPaymentToken(braintreeClient,notifyEmail){notifyEmail=notifyEmail||"";var deferred=$q.defer();var nonceDeferred=$q.defer();braintreeClient.getNonce(nonceDeferred,logService).then(function(data){if(data.status==="Success"){createPayment(data.payload.nonce,notifyEmail).then(function(data){deferred.resolve(data);});}else{deferred.resolve(data);}},function(data){deferred.reject(data);});return deferred.promise;}
function createBraintreeClient(id){var deferred=$q.defer();getToken().then(function(data){deferred.resolve(new braintreeClient(data.token,id));},function(data){deferred.reject(data);});return deferred.promise;}
function getToken(){return $http.post('/api/payment/RequestToken').then(function(response){if(response.status===200&&response.data){return response.data;}});}
function createPayment(nonce){return ajaxService.postResult('/api/payment/CreatePayment?nonce='+nonce);}
function updatePayment(nonce,token){return ajaxService.postResult('/api/payment/UpdatePayment?token='+token+'&nonce='+nonce);}
function deletePayment(token){return ajaxService.postResult('/api/payment/DeletePayment?token='+token);}
function getPaymentMethods(){return $http.post('/api/payment/ListPayments').then(function(response){if(response.status===200&&response.data){return response.data;}});}
return{createBraintreeClient:createBraintreeClient,getPaymentToken:getPaymentToken,getToken:getToken,createPayment:createPayment,deletePayment:deletePayment,updatePayment:updatePayment,getPaymentMethods:getPaymentMethods};});;;
'use strict';RMSFrontEnd.factory('recaptcha',function($q){var _this=this;var ready=false;if(window.grecaptcha!==undefined){window.grecaptcha.ready(function(){_this.ready=true;});}
function isLoaded(){return _this.ready;}
function getToken(action){var deferred=$q.defer();if(isLoaded()){window.grecaptcha.execute('6LfVqbgUAAAAAJAEnXYSsV3PwKEdUnOnOqaTU24U',{action:action}).then(function(token){deferred.resolve(token);},function(){deferred.resolve("");});}else{deferred.reject("");}
return deferred.promise;}
return{isLoaded:isLoaded,getToken:getToken};});;;
'use strict';RMSFrontEnd.factory('biddingConnection',function(retryService){var BiddingWebSocket=function(config){config=config||{useHeartBeat:true,heartBeatDelay:5000,heartBeatTimeout:1000}
const splitter="=>";let heartBeatId=null;let heartBeatSentOn=null;let heartBeatReceivedOn=null;let socket;let version="";const noop=function(){};let onSessionOpen=noop;let onSessionAccepted=noop;let onSessionClose=noop;let onSessionError=noop;let onSessionDataReceived=noop;let onSendError=noop;let onReceive=noop;let transformSend=function(key,value){return value};let transformReceived=function(key,value){return value};const ConnectionProvider=function(){let onConnectionProvided=function(host,token){};let onConnectionRequested=function(connectionProvider){};let onConnectionFailed=function(reason){};let onConnectionDeclined=function(reason){};return{request:function(){onConnectionRequested(this)},connection:function(host,token){onConnectionProvided(host,token);},failConnection:function(reason){onConnectionFailed(reason)},declineConnection:function(reason){onConnectionDeclined(reason);},onRequestConnection:function(callback){onConnectionRequested=callback;},onConnectionProvided:function(callback){onConnectionProvided=callback;},onConnectionFailed:function(callback){onConnectionFailed=callback;},onConnectionDeclined:function(callback){onConnectionDeclined=callback;}}};let connectionProvider=new ConnectionProvider();connectionProvider.onConnectionProvided(function(host,token){if(socket){socket.onerror=null;socket.onopen=null;socket.onclose=null;socket.onmessage=null;socket.close(1000,"New connection");}
socket=new WebSocket(host);const handler=function(){sendHeartBeat();heartBeatSentOn=new Date();setTimeout(function(){if(!heartBeatReceivedOn){heartBeatReceivedOn=new Date();}
var offset=heartBeatSentOn-heartBeatReceivedOn;if(offset>config.heartBeatTimeout){console.log("Heartbeat failed; nothing receive for at least "+offset+"ms.");onSessionClose("Heartbeat failed.",1001);disconnect();}},config.heartBeatTimeout);heartBeatId=setTimeout(handler,config.heartBeatDelay);};socket.onerror=function(evt){console.error("Connection error: "+evt.reason+"("+evt.code+")");onSessionError();};socket.onopen=function(){send("authorization=>",token);onSessionOpen();heartBeatSentOn=null;heartBeatReceivedOn=null;if(config.useHeartBeat){heartBeatId=setTimeout(handler,config.heartBeatDelay)}};socket.onclose=function(evt){heartBeatSentOn=null;heartBeatReceivedOn=null;clearTimeout(heartBeatId);console.warn("Connection closed: "+evt.reason+"("+evt.code+")");onSessionClose(evt.reason,evt.code);};socket.onmessage=function(event){const message=event.data.toString();heartBeatReceivedOn=new Date();if(message===" "){return;}
if(message.startsWith("v=>")){version=JSON.parse(message.replace("v=>",""));return;}
if(message==="OK"){onSessionAccepted(version);return;}
received(message);onSessionDataReceived(message);};});function connect(){connectionProvider.request();}
function disconnect(){socket.close();}
function received(message){const at=message.indexOf(splitter);const key=message.substring(0,at);const value=message.substring(at+splitter.length);var obj;if(value.trim().length>0){obj=transformReceived(key,JSON.parse(value));}else{obj=transformReceived(key);}
onReceive(key,obj);}
function send(key,value){let normalizedKey=key.replace(splitter,"");trySend(normalizedKey+splitter+JSON.stringify(transformSend(normalizedKey,value)));}
function sendHeartBeat(){trySend(' ');}
function trySend(text){if(socket&&socket.readyState===1){try{socket.send(text);}catch(e){onSendError(e.message);}}else{onSendError("No connection currently available.")}}
return{version:function(){return version},connectionProvider:connectionProvider,connect:connect,disconnect:disconnect,send:send,onReceive:function(callback){onReceive=callback||noop;},onSessionOpen:function(callback){onSessionOpen=callback||noop;},onSessionAccepted:function(callback){onSessionAccepted=callback||noop;},onSessionClose:function(callback){onSessionClose=callback||noop;},onSessionError:function(callback){onSessionError=callback||noop;},onSessionDataReceived:function(callback){onSessionDataReceived=callback||noop;},onSendError:function(callback){onSendError=callback||noop;},transformSend:function(callback){transformSend=callback||noop;},transformReceived:function(callback){transformReceived=callback||noop;},}}
return{getClient:function(config){let biddingWebSocket=new BiddingWebSocket(config);let retry=retryService.retry(biddingWebSocket.connect,5,5000);let sessionAccepted=function(){}
let sessionClosed=function(reason,code){}
let sessionError=function(){}
let sendError=function(reason){}
let connectionRetrying=function(reason){}
let connectionFailed=function(reason){}
let connectionDeclined=function(reason){}
biddingWebSocket.connectionProvider.onConnectionDeclined(connectionDeclined);biddingWebSocket.connectionProvider.onConnectionFailed(function(reason){if(retry.continue()){connectionRetrying(reason);}else{connectionFailed(reason)}})
biddingWebSocket.onSessionAccepted(function(version){retry.completed();sessionAccepted(version);});biddingWebSocket.onSessionClose(function(reason,code){if(code!==1003){if(retry.continue()){connectionRetrying(reason);}else{connectionFailed(reason)}}else{connectionDeclined(reason);}
sessionClosed(reason,code);});biddingWebSocket.onSessionError(sessionError);biddingWebSocket.onSendError(sendError);return{version:biddingWebSocket.version,connect:function(){retry.completed();biddingWebSocket.connect();},disconnect:biddingWebSocket.disconnect,send:biddingWebSocket.send,onReceive:function(callback){biddingWebSocket.onReceive(callback)},onRequestConnection:biddingWebSocket.connectionProvider.onRequestConnection,onSessionAccepted:function(callback){sessionAccepted=callback;},onSessionDataReceived:biddingWebSocket.onSessionDataReceived,onSessionOpen:biddingWebSocket.onSessionOpen,onSessionClose:function(callback){sessionClosed=callback;},onSessionError:function(callback){sessionError=callback;},onSendError:function(callback){sendError=callback;},onConnectionRetrying:function(callback){connectionRetrying=callback;},onConnectionFailed:function(callback){connectionFailed=callback;},onConnectionDeclined:function(callback){connectionDeclined=callback;},transformSend:biddingWebSocket.transformSend,transformReceived:biddingWebSocket.transformReceived};}}});RMSFrontEnd.factory('bidService',function($http,$q){return{getBiddingTemplates:function(cache){return $http.get('/umbraco/Surface/Utils/GetBiddingTemplates',{cache:cache||true}).then(function(response){if(response.status===200&&response.data){return response.data;}});},getItem:function(id){return $http.post('/umbraco/Surface/BidSurface/GetItem?itemId='+id,{}).then(function(response){if(response.status===200&&response.data){return response.data;}});},logUnderBid:function(itemId,amount){return $http.post('/umbraco/Surface/BidSurface/LogUnderBid',{itemId:itemId,amount:amount}).then(function(response){if(response.status===200&&response.data){return response.data;}});},postBid:function(itemId,amount){return $http.post('/umbraco/Surface/BidSurface/PlaceBid',{itemId:itemId,amount:amount}).then(function(response){if(response.status===200&&response.data){return response.data;}});},postMaxBid:function(itemId,amount){return $http.post('/umbraco/Surface/BidSurface/PlaceMaxBid',{itemId:itemId,amount:amount}).then(function(response){if(response.status===200&&response.data){return response.data;}});},roundIncrement:function(amount,code,symbol,cache){var deferred=$q.defer();var root=this;this.incrementTable(cache).then(function(data){var value=root.roundIncrement2(data,amount);var formatNumber=root.formatNumber(value,"",symbol);deferred.resolve({amount:value,amountFormatted:formatNumber});},function(error){deferred.reject(error);});return deferred.promise;},formatNumber:function(value,code,symbol){if(value){value=value.toString();var transformedInput=value.replace(/[^0-9]/g,'');var rgx=/(\d+)(\d{3})/;while(rgx.test(transformedInput)){transformedInput=transformedInput.replace(rgx,'$1'+','+'$2');}
var append=code===symbol?"":code;return(symbol+transformedInput+" "+append).trim();}
return value;},roundIncrement2:function(table,amount){var value=amount;while(value>0)
{if((value%this.findNextIncrement(table,amount))===0)
{return value;}
value--;}
return value;},incrementTable:function(cache){return $http.get('/umbraco/Surface/BidSurface/IncrementTable',{cache:cache||true}).then(function(response){if(response.status===200&&response.data){return response.data;}});},findNextBids:function(table,value,count){value=this.roundIncrement2(table,value);var arr=[];arr.push(value)
if(count>1){for(var i=0;i<count-1;i++){value=this.findNextIncrement(table,value)+value;arr.push(value)}}
return arr;},findNextIncrement:function(table,amount){if(angular.isArray(table)){for(var i=0;i<table.length;i++){var option=table[i];if(amount>=option.Threshold){return option.Increment;}}}
return 1;},autoExtendTime:function(cache){return $http.get('/umbraco/Surface/BidSurface/GetAutoExtendTime',{cache:cache||true}).then(function(response){if(response.status===200&&response.data){return response.data;}});}};});;;
'use strict';RMSFrontEnd.factory('dictionaryService',['$http',function($http){return{getDictionaryItems:function(names,cache){var queryString="?";for(var i=0;i<names.length;i++){queryString+="&names="+encodeURIComponent(names[i]);}
return $http.get('/api/Utils/GetDictionaryItems'+queryString,{cache:cache||true}).then(function(response){if(response.status===200&&response.data){return response.data;}});}};}]);;;
RMSFrontEnd.factory('currencyService',function(){return{convertToFloat:function(value){value=value||"0";return parseFloat(value.toString().replace(/[^\d^\.]/g,''));},formatNumber:function(number,decimals){number=this.convertToFloat(number)
decimals=decimals||0
if(decimals<1){return(number.toFixed(2).replace(/\d(?=(\d{3})+\.)/g,'$&,').replace(/\.\d+/g,'')).trim();}
return(number.toFixed(decimals).replace(/\d(?=(\d{3})+\.)/g,'$&,')).trim();},formatCurrency:function(number,symbol,code,decimals){symbol=symbol||"";number=number||0;code=code||"";decimals=decimals||0;if(symbol===code){code="";}
return(symbol+this.formatNumber(number,decimals)+" "+code).trim();},formatCurrencyRange:function(low,high,currencySymbol,currencyCode){low=low||0;high=high||0;currencyCode=currencyCode||"";if(currencyCode===currencySymbol){currencyCode="";}
if(low!==high&&low>0&&high>0){return(this.formatCurrency(low,currencySymbol)+" - "+this.formatCurrency(high,currencySymbol)+" "+currencyCode).trim();}else{if(low>0){return this.formatCurrency(low,currencySymbol,currencyCode);}
if(high>0){return this.formatCurrency(high,currencySymbol,currencyCode);}}
return"";}}});;;
RMSFrontEnd.factory('retryService',function(){var Retry=function(name,fun,maxRetries,delay){if(fun===undefined||fun===null)
throw new Error("No function set to retry!");name=name||"";maxRetries=maxRetries||5;delay=delay||5000;var retried=0;var maxTotalRetries=maxRetries*20;var totalRetried=0;var timeoutId=null;var onRetrying=function(count){};var onScheduleRetry=function(timeout){var message=name+" :Retrying in "+timeout+"ms.";console.log(message.trim())};var onFailure=function(count){var message=name+" :Reached total amount of retries "+count+".";console.log(message.trim())}
var onError=function(count,error){var errorMessage=name+" :Exception throw "+error.message;console.error(errorMessage.trim());}
var onTotalFailure=function(count){var message=name+" :Exceeded total max tries of "+count+".";console.error(message.trim());}
function retry(){try{timeoutId=null;onRetrying(retried);fun();retried++;totalRetried++;}catch(e){onError(retried,e);var timeout=delay*(retried+1);if(maxRetries>retried){retryIn(timeout)}else{onFailure(retried);}
retried++;totalRetried++;}}
function retryIn(timeout){if(timeoutId==null){timeoutId=setTimeout(retry,timeout);onScheduleRetry(timeout);}}
function waitAndRetry(){var timeout=delay*retried;retryIn(timeout);}
return{getRetries:function(){return retried;},completed:function(){retried=0;if(timeoutId){clearTimeout(timeoutId);timeoutId=null;}},restart:function(){if(totalRetried<maxTotalRetries){retried=0;retry();}else{onTotalFailure(maxTotalRetries);}},continue:function(){if(totalRetried<maxTotalRetries){var isRetrying=maxRetries>retried;if(isRetrying){waitAndRetry();}else{onFailure(retried)}
return isRetrying;}else{onTotalFailure(maxTotalRetries);}},onRetrying:function(fun){onRetrying=fun},onFailure:function(fun){onFailure=fun}}};return{retry:function(fun,maxRetries,delay,name){return new Retry(name||"",fun,maxRetries,delay);}}});;;
'use strict';RMSFrontEnd.factory('biddingListener',function($http){function Client(auctionId,type,host,token){var _this=this;var delay=5000;var timeout=1000;var heartBeatId=null;var heartBeatSentOn=null;var heartBeatReceivedOn=null;var registeredLots=[];var socket;var noop=function(){}
var commandKeys={authorization:"authorization=>",auctionState:"auction-state=>",lotChange:"lot-change=>",timeOffset:"timing-offset=>",timeSync:"time-sync=>",extendTime:"extend-time=>",bidStats:"bid-stats=>",bidStatsChanged:"bid-stats-changed=>",addLot:"add-lot=>",removeLot:"remove-lot=>",};var onSessionOpen=noop;var onSessionAccepted=noop;var onSessionClose=noop;var onSessionError=noop;var onSessionDataReceived=noop;var onSendError=noop;var onAuctionChanged=noop;var onLotChanged=noop;var onBidStatsChanged=noop;var onTimeOffset=noop;var onTimeSync=noop;var onAutoExtendTimeChanged=noop;this.connect=function(){if(socket){socket.onerror=null;socket.onopen=null;socket.onclose=null;socket.onmessage=null;socket.close(1003,"New connection");}
socket=new WebSocket(host+"/ws/"+type.toLowerCase()+"/listen/"+auctionId);var handler=function(){send(' ');heartBeatSentOn=new Date();setTimeout(function(){if(!heartBeatReceivedOn){heartBeatReceivedOn=new Date();}
var offset=heartBeatSentOn-heartBeatReceivedOn;if(offset>timeout){console.log("Heartbeat failed; nothing receive for at least "+offset+"ms.");onSessionClose("Heartbeat failed.",1001);_this.disconnect();}},timeout);heartBeatId=setTimeout(handler,delay);};socket.onerror=function(evt){onSessionError(evt.reason)};socket.onopen=function(){send(commandKeys.authorization,token);onSessionOpen();heartBeatSentOn=null;heartBeatReceivedOn=null;heartBeatId=setTimeout(handler,delay)};socket.onclose=function(evt){heartBeatSentOn=null;heartBeatReceivedOn=null;clearTimeout(heartBeatId);onSessionClose(evt.reason,evt.code);};socket.onmessage=function(event){var message=event.data.toString();heartBeatReceivedOn=new Date();if(message===" "){return;}
if(message==="OK"){onSessionAccepted();return;}
received(message);onSessionDataReceived(message);};};this.disconnect=function(){socket.close();};function parseMessage(key,message){if(!message.startsWith(key)){throw'Invalid key('+key+') for parsing message('+message+')';}
var json=message.replace(key,"");if(json===""){return"";}
return transformReceive(key,JSON.parse(json));}
function transformCurrency(obj){return{code:obj.c,symbol:obj.s}}
function transformAccess(obj){return{access:obj.a,accessList:transformAccessList(obj.l)}}
function transformAccessList(list){var list2=[];for(var index=0;index<list.length;++index){var obj=list[index];list2.push({name:obj.n,access:obj.a,message:obj.m})}
return list2;}
function transformAuction(obj){return{id:obj.id,name:obj.n,status:transformAuctionStatus(obj.s),currency:transformCurrency(obj.c),running:obj.r,startTime:obj.st,endTime:obj.et,metaData:obj.md}}
function transformSealedLot(obj){return{id:obj.id,name:obj.n,url:obj.u,status:transformLotStatus(obj.s),lotNumber:obj.l,lowEstimate:obj.le,highEstimate:obj.he,viewOnly:obj.v,hasAddendum:obj.ad,currency:transformCurrency(obj.c),startTime:obj.st,finishedTime:obj.ft,reserveStatus:transformReserveStatus(obj.r),startingBid:obj.sb}}
function transformTimedLot(obj){return{id:obj.id,name:obj.n,url:obj.u,status:transformLotStatus(obj.s),lotNumber:obj.l,currentBid:obj.b,lowEstimate:obj.le,highEstimate:obj.he,currentAsking:obj.a,viewOnly:obj.v,hasAddendum:obj.ad,reserveStatus:obj.r,currency:transformCurrency(obj.c),startTime:obj.st,finishedTime:obj.ft}}
function transformAuctionStatus(obj){switch(obj){case"a":return"Available";case"ac":return"Active";case"c":return"Closed";}
return obj;}
function transformLotStatus(obj){switch(obj){case"a":return"Available";case"ac":return"Active";case"s":return"Sold";case"ns":return"NotSold";case"w":return"Withdrawn";}
return obj;}
function transformReserveStatus(obj){switch(obj){case"n":return"NoReserve";case"u":return"UnderReserve";case"m":return"ReserveMet";}
return obj;}
function transformSealedBidStats(obj){return{lotId:obj.id,isHighBidder:obj.hb,userHighBid:obj.uhb,userAskingBid:obj.uab,ranking:transformRanking(obj.br)}}
function transformRanking(obj){return{rank:obj.r,reference:obj.re}}
function transformTimedBidStats(obj){return{lotId:obj.id,bidCount:obj.bc,isHighBidder:obj.hb,userBidCount:obj.ubc,userMaxBid:obj.umb}}
function transformReceive(key,obj){var newObj=obj;switch(key){case commandKeys.auctionState:newObj=transformAuction(obj);break;case commandKeys.lotChange:if(type==='Sealed'){newObj=transformSealedLot(obj);}
if(type==='Timed'){newObj=transformTimedLot(obj);}
break;case commandKeys.bidStats:if(type==='Sealed'){newObj=transformSealedBidStats(obj);}
if(type==='Timed'){newObj=transformTimedBidStats(obj);}
break;}
return newObj;}
function transformSend(key,obj){var newObj=obj;switch(key){case commandKeys.bid:newObj={a:obj.amount,id:obj.lotId}
break;}
return newObj;}
function received(message){if(message.startsWith(commandKeys.auctionState)){onAuctionChanged(parseMessage(commandKeys.auctionState,message));}
if(message.startsWith(commandKeys.lotChange)){onLotChanged(parseMessage(commandKeys.lotChange,message));}
if(message.startsWith(commandKeys.timeOffset)){onTimeOffset(parseMessage(commandKeys.timeOffset,message));}
if(message.startsWith(commandKeys.timeSync)){onTimeSync(parseMessage(commandKeys.timeSync,message));}
if(message.startsWith(commandKeys.extendTime)){onAutoExtendTimeChanged(parseMessage(commandKeys.extendTime,message));}
if(message.startsWith(commandKeys.bidStats)){onBidStatsChanged(parseMessage(commandKeys.bidStats,message));}}
function send(key,obj){if(socket&&socket.readyState===1){if(obj!==undefined){socket.send(key+JSON.stringify(transformSend(key,obj)));}else{socket.send(key);}}else{onSendError("No connection currently available.")}}
return{auctionId:auctionId,connect:function(){_this.connect()},disconnect:function(){_this.disconnect();},onSessionOpen:function(callback){onSessionOpen=callback||noop;},onSessionAccepted:function(callback){onSessionAccepted=callback||noop;},onSessionClose:function(callback){onSessionClose=callback||noop;},onSessionError:function(callback){onSessionError=callback||noop;},onSessionDataReceived:function(callback){onSessionDataReceived=callback||noop;},onSendError:function(callback){onSendError=callback||noop;},onAuctionChanged:function(callback){onAuctionChanged=callback||noop;},onLotChanged:function(callback){onLotChanged=callback||noop;},onTimeOffset:function(callback){onTimeOffset=callback||noop;},onTimeSync:function(callback){onTimeSync=callback||noop;},onAutoExtendTimeChanged:function(callback){onAutoExtendTimeChanged=callback},onBidStatsChanged:function(callback){onBidStatsChanged=callback||noop;},registerLot:function(lotId){send(commandKeys.addLot,{lotId:lotId});registeredLots.push(lotId);},unRegisterLot:function(lotId){send(commandKeys.removeLot,{lotId:lotId});var index=registeredLots.indexOf(lotId);registeredLots.splice(index,1)},registerLotsOnly:function(lotIds){var _this=this;var removing=[];registeredLots.forEach(function(id){if(lotIds.indexOf(id)===-1){removing.push(id);}});removing.forEach(function(id){_this.unRegisterLot(id);})
lotIds.forEach(function(id){if(registeredLots.indexOf(id)===-1){_this.registerLot(id);}})},sendTime:function(){send(commandKeys.timeOffset,new Date().toISOString());}};}
var createdClient=[];return{authenticate:function(id){return $http.post('/api/bidding/authenticate?auctionId='+id).then(function(response){if(response.status===200&&response.data){return response.data;}});},getClient:function(auctionId,lotIds,type,host,token){var newClient;createdClient.forEach(function(client){if(client.auctionId===auctionId){newClient=client;newClient.registerLotsOnly(lotIds);}});if(newClient)
return newClient;newClient=new Client(auctionId,type,host,token);newClient.onSessionAccepted(function(){newClient.registerLotsOnly(lotIds);})
newClient.connect();createdClient.push(newClient)
return newClient;},removeClient:function(auctionId){var foundClient;createdClient.forEach(function(client){if(client.auctionId===auctionId){foundClient=client;foundClient.disconnect();}});if(foundClient){createdClient.splice(createdClient.indexOf(foundClient,1))}}};});;;
RMSFrontEnd.factory('biddingSyncService',function(timeService,biddingListener,bidService,userService,currencyService,$http,$rootScope,registerToBidService){var _this=this;var loading="Loading...";_this.changes=[];_this.updates={sealed:{lots:[],stats:[]},timed:{lots:[],stats:[]}}
_this.templates={finished:loading,finishing:loading,underDay:loading,underHour:loading,underMinute:loading,notStarted:loading};_this.settings={UseLegacySystem:true};_this.auctionBid=[];_this.changed=function(){};function updateFromTimedBiddingLot(local,remote){var changed=false;var original=angular.copy(local);var currentDate=new Date();var offsetDate=currentDate.setMilliseconds(_this.offset+currentDate.getMilliseconds());var started=(offsetDate-new Date(remote.startTime))>0;var timeLeft=timeService.getTimeSpan(new Date(remote.finishedTime)-offsetDate)
var auctioned=(remote.status==="Sold"||remote.status==="NotSold");local.started=started;local.status=remote.status;if(local.started){local.auctioned=auctioned;local.sold=remote.status==="Sold";local.timeLeft=timeService.formatTimeLeft(timeLeft,auctioned,_this.autoExtendTime,_this.templates);if(started){if(remote.currentBid>0){local.askingBid="";local.currentBid=currencyService.formatCurrency(remote.currentBid,remote.currency.symbol,remote.currency.code,0);}else{local.askingBid=currencyService.formatCurrency(remote.currentAsking,remote.currency.symbol,remote.currency.code,0);local.currentBid="";}}}else{local.timeLeft="";}
changed=local.timeLeft!==original.timeLeft||local.auctioned!==original.auctioned||local.started!==original.started||local.currentBid!==original.currentBid||local.askingBid!==original.askingBid||local.Sold!==original.Sold;return changed;}
function updateFromSealedBiddingLot(local,remote){var changed=false;var original=angular.copy(local);var currentDate=new Date();var offsetDate=currentDate.setMilliseconds(_this.offset+currentDate.getMilliseconds());var started=(offsetDate-new Date(remote.startTime))>0;var timeLeft=timeService.getTimeSpan(new Date(remote.finishedTime)-offsetDate)
var auctioned=(remote.status==="Sold"||remote.status==="NotSold");local.started=started;local.status=remote.status;if(local.started){local.auctioned=auctioned;local.sold=remote.status==="Sold";local.timeLeft=timeService.formatTimeLeft(timeLeft,auctioned,_this.sealedAutoExtendTime,_this.templates);}else{local.timeLeft="";}
changed=local.timeLeft!==original.timeLeft||local.started!==original.started||local.auctioned!==original.auctioned||local.sold!==original.sold;return changed;}
function updateFromSealedBiddingStats(local,remote){if(local.biddingType!=="Sealed")
return false;var changed=false;var original=angular.copy(local);local.isHighBidder=remote.isHighBidder;local.rank=remote.rank
changed=local.isHighBidder!==original.isHighBidder||local.rank!==original.rank;return changed;}
function updateFromSealedBidding(local,remote){if(local.BiddingType!=="Sealed")
return false;var noMatch=true
var changed=false;var original=angular.copy(local);remote.ra=remote.ra||[];if(noMatch){local.isHighBidder=false;local.isOutBid=false;local.rank=""}
var currentDate=new Date();var offsetDate=currentDate.setMilliseconds(_this.offset+currentDate.getMilliseconds());var started=(offsetDate-new Date(remote.st+"Z"))>0;var timeLeft=timeService.getTimeSpan(new Date(remote.et+"Z")-offsetDate)
var auctioned=(remote.s===1||remote.s===2);local.started=started;if(local.started){local.auctioned=auctioned;local.sold=remote.s===1;local.timeLeft=timeService.formatTimeLeft(timeLeft,auctioned,_this.sealedAutoExtendTime,_this.templates);}else{local.timeLeft="";}
changed=local.timeLeft!==original.timeLeft||local.auctioned!==original.auctioned||local.started!==original.started||local.isHighBidder!==original.isHighBidder||local.isOutBid!==original.isOutBid||local.sold!==original.sold||local.rank!==original.rank;return changed;}
function updateFromTimedBidding(local,remote){if(local.biddingType!=="Timed")
return false;var changed=false;var original=angular.copy(local);var currentDate=new Date();var offsetDate=currentDate.setMilliseconds(_this.offset+currentDate.getMilliseconds());var started=(offsetDate-new Date(remote.st+"Z"))>0;var timeLeft=timeService.getTimeSpan(new Date(remote.et+"Z")-offsetDate)
var auctioned=(remote.s===1||remote.s===2);local.status=remote.status;if(started){local.auctioned=auctioned;local.sold=remote.s===1;local.timeLeft=timeService.formatTimeLeft(timeLeft,auctioned,_this.autoExtendTime,_this.templates);}
local.started=started;if(started){local.currentBid=remote.cb;}
changed=local.timeLeft!==original.timeLeft||local.auctioned!==original.auctioned||local.started!==original.started||local.isHighBidder!==original.isHighBidder||local.isOutBid!==original.isOutBid||local.currentBid!==original.currentBid||local.sold!==original.sold;return changed;}
function updateFromTimedBiddingStats(local,remote){if(local.biddingType!=="Timed")
return false;var changed=false;var original=angular.copy(local);local.isOutBid=remote.userBidCount>0&&!remote.isHighBidder;local.isHighBidder=remote.isHighBidder;changed=local.isHighBidder!==original.isHighBidder||local.isOutBid!==original.isOutBid;return changed;}
var applyChange=function(data,dataKey,lotKey,currentChanges,updater,apply){var key=data[dataKey]||dataKey;var hasChanges=false;apply=apply===undefined?true:apply;currentChanges[key]=data;angular.forEach(_this.items,function(lot){if(lot[lotKey]===key){hasChanges=updater(lot,data)||hasChanges;}});if(hasChanges&&apply){_this.changed();}
return hasChanges;};var sealedLotChangedCallback=function(lot,apply){return applyChange(lot,'id','biddingLotId',_this.updates.sealed.lots,updateFromSealedBiddingLot,apply)};var timedLotChangedCallback=function(lot,apply){return applyChange(lot,'id','biddingLotId',_this.updates.timed.lots,updateFromTimedBiddingLot,apply)};var sealedLotStatsChangedCallback=function(stats,apply){return applyChange(stats,'lotId','biddingLotId',_this.updates.sealed.stats,updateFromSealedBiddingStats,apply)};var timedLotStatsChangedCallback=function(stats,apply){return applyChange(stats,'lotId','biddingLotId',_this.updates.timed.stats,updateFromTimedBiddingStats,apply)};var groupBy=function(xs,key){return xs.reduce(function(rv,x){(rv[x[key]]=rv[x[key]]||[]).push(x);return rv;},{});};function attachListeners(lots,changed,canBid){$http.get('/api/bidding/settings/GetSettings',{cache:true}).then(function(response){if(response.status===200&&response.data){return response.data;}}).then(function(data){_this.autoExtendTime=data.timedAutoExtendInSeconds;_this.sealedAutoExtendTime=data.sealedAutoExtendInSeconds;var availableLots=[];angular.forEach(lots,function(lot){if(lot.canDisplayCurrentBid){availableLots.push(lot);}});var grouped=groupBy(availableLots,'auctionId')
angular.forEach(grouped,function(v,k){registerToBidService.getRegistrationStatus(k).then(function(data){if(data===undefined){_this.auctionBid[k]=false;}else{_this.auctionBid[k]=data.canBid;}});});attachWebSocketListeners(lots,changed,canBid);_this.settings=data;});}
function attachWebSocketListeners(lots,changed,canBid){_this.items=lots;_this.changed=changed;_this.canBid=canBid;var grouped=groupBy(lots,'auctionId');timeService.getTimeSpanTemplates().then(function(data){_this.templates=data;angular.forEach(grouped,function(v,k){var list=[];angular.forEach(v,function(lot){if(lot.canDisplayCurrentBid){list.push(lot.biddingLotId);}});if(list.length>0){var type=v[0].biddingType;if(type==="Sealed"||type==="Timed"){biddingListener.authenticate(k).then(function(service){var client=biddingListener.getClient(service.auctionId,list,type,service.host,service.token);client.onTimeSync(function(){client.sendTime();_this.timeSyncRequestedOn=new Date();});client.onAutoExtendTimeChanged(function(data){if(type==="Sealed"){_this.sealedAutoExtendTime=data;}
if(type==="Timed"){_this.autoExtendTime=data;}});client.onTimeOffset(function(offset){var requestedTimeMs=new Date()-_this.timeSyncRequestedOn;_this.offset=offset-requestedTimeMs;});if(type==='Sealed'){client.onLotChanged(sealedLotChangedCallback)
client.onBidStatsChanged(sealedLotStatsChangedCallback)}
if(type==='Timed'){client.onLotChanged(timedLotChangedCallback)
client.onBidStatsChanged(timedLotStatsChangedCallback)}});}}});});}
var fillInChanged=function(){if(fillInChanges(_this.items)){_this.changed();}};var fillInChanges=function(items){var hasChanges=false;for(var key in _this.updates.timed.lots){hasChanges=timedLotChangedCallback(_this.updates.timed.lots[key],false)||hasChanges;}
for(var key in _this.updates.timed.stats){hasChanges=timedLotStatsChangedCallback(_this.updates.timed.stats[key],false)||hasChanges;}
for(var key in _this.updates.sealed.lots){hasChanges=sealedLotChangedCallback(_this.updates.sealed.lots[key],false)||hasChanges;}
for(var key in _this.updates.sealed.stats){hasChanges=sealedLotStatsChangedCallback(_this.updates.sealed.stats[key],false)||hasChanges;}
angular.forEach(items,function(x,i1){for(var key in _this.changes){if(x.biddingLotId===key){hasChanges=updateFromSealedBidding(x,_this.changes[key])||hasChanges;hasChanges=updateFromTimedBidding(x,_this.changes[key])||hasChanges;}}});return hasChanges;};function refresh(amount){clearInterval(_this.refreshToken);fillInChanges(_this.items);_this.refreshToken=setInterval(fillInChanged,amount);}
function canBid(item){return item.canViewLotDetails&&!item.auctioned&&item.canDisplayCurrentBid&&(_this.auctionBid[item.auctionId]||false);}
function showBid(item,e){e.preventDefault();window.open(item.link+"bidding","_blank");}
function listenForAllResultChanges(items){angular.forEach(items,function(item){_this.connection.invoke("Register",item.id).catch(function(err){return console.error(err.toString());});});}
function unListenForAllResultChanges(items){if(_this.connection){angular.forEach(items,function(item){_this.connection.invoke("UnRegister",item.id).catch(function(err){return console.error(err.toString());});});}}
function registerResultsListener(itemsHolder,apply){if(_this.connection===undefined){_this.connection=new signalR.HubConnectionBuilder().withUrl("/signalr/lot").build();_this.connection.start().then(function(){listenForAllResultChanges(itemsHolder.items);}).catch(function(err){return console.error(err.toString());});_this.connection.on("ReceiveLotMessage",function(id,value,valueType,estimates){angular.forEach(itemsHolder.items,function(item){if(id===item.id){item.value=value;item.valueType=valueType;}});apply();});}else{listenForAllResultChanges(itemsHolder.items);}}
return{registerResultsListener:registerResultsListener,unListenForAllResultChanges:unListenForAllResultChanges,listenForAllResultChanges:listenForAllResultChanges,attachListeners:attachListeners,refresh:refresh,canBid:canBid,showBid:showBid}});;;
'use strict';RMSFrontEnd.factory('bidEntryService',function(){var _this=this;var onReceiveLotOpenedMessage=function(msg){}
var onReceiveLotFinishedMessage=function(msg){}
var onReceiveAuctionMessage=function(msg){}
var onReceiveLotsMessage=function(msg){}
var onReceiveLotProcessedMessage=function(msg){}
var onReconnecting=function(error){}
var onClose=function(error){}
var onReconnected=function(connectionId){}
async function connect(id,onSuccess,onError){onSuccess=onSuccess||function(connection){return console.log("Connected connection: "+connection.id);};onError=onError||function(connection,err){return console.error(err.toString());};_this.id=id;if(_this.connection===undefined){_this.connection=new signalR.HubConnectionBuilder().withUrl("/signalr/bid-entry").withAutomaticReconnect().build();_this.connection.onreconnecting(onReconnecting);_this.connection.onreconnected(onReconnected);_this.connection.onclose(onClose);_this.connection.on("ReceiveAuctionMessage",onReceiveAuctionMessage);_this.connection.on("ReceiveLotOpenedMessage",onReceiveLotOpenedMessage);_this.connection.on("ReceiveLotFinishedMessage",onReceiveLotFinishedMessage);_this.connection.on("ReceiveLotProcessedMessage",onReceiveLotProcessedMessage);_this.connection.on("ReceiveLotsMessage",onReceiveLotsMessage);}
await start(_this.connection,onSuccess,onError);}
async function start(connection,success,failed){try{await connection.start();success(connection);}catch(err){failed(connection,err);}}
return{connect:connect,register:function(){return _this.connection.invoke("Register",_this.id);},create:function(lotId,bidderNumber,amount,timestamp){return _this.connection.invoke("CreateBid",_this.id,lotId,bidderNumber,amount,timestamp);},update:function(id,bidderNumber,amount){return _this.connection.invoke("UpdateBid",id,bidderNumber,amount);},remove:function(id){return _this.connection.invoke("RemoveBid",id);},done:function(id){return _this.connection.invoke("Done",_this.id,id);},onReconnecting:function(callback){onReconnecting=callback||onReconnecting;},onReconnected:function(callback){onReconnected=callback||onReconnected;},onClose:function(callback){onClose=callback||onClose;},onReceiveAuction:function(callback){onReceiveAuctionMessage=callback||onReceiveAuctionMessage;},onReceiveLotOpened:function(callback){onReceiveLotOpenedMessage=callback||onReceiveLotOpenedMessage;},onReceiveLotFinished:function(callback){onReceiveLotFinishedMessage=callback||onReceiveLotFinishedMessage;},onReceiveLotProcessed:function(callback){onReceiveLotProcessedMessage=callback||onReceiveLotProcessedMessage;},onReceiveLots:function(callback){onReceiveLotsMessage=callback||onReceiveLotsMessage;}};});;;
