PageSourceSearch

https://solbet-12.com/common/js/angular-custom-common.js?_v=1788401071

js solbet-12.com collected 2026-10-08 11:51:41 UTC 113,873 bytes, 2,973 lines download raw bytes

1var app = angular.module('casinoApp', [
2  'ngRoute',
3  'RouteData',
4  'ngMessages',
5  'ngDialog',
6  'ngSweetAlert',
7  'pascalprecht.translate',
8  'ngCookies',
9  'ngCurrencySymbol',
10  'ui.bootstrap.pagination',
11  'customDirectives',
12  'internationalPhoneNumber',
13  'slick',
14  'timer',
15  'ngIdle',
16  'ngSanitize'
17]);
18
19//ngIdle
20
21app.config(['IdleProvider', function(IdleProvider) {
22  IdleProvider.idle(1800);
23  IdleProvider.timeout(5);
24}]);
25
26app.run(function(Idle){
27  // start watching when the app runs. also starts the Keepalive service by default.
28  Idle.watch();
29});
30
31//ngIdle end
32
33app.config(['$routeProvider', 'RouteDataProvider', '$translateProvider', '$locationProvider', function ($routeProvider, RouteDataProvider, $translateProvider, $locationProvider) {
34
35  RouteDataProvider.applyConfig({
36    bodyClass: 'bg-main',
37    title: '',
38    description: '',
39    keyword: ''
40  });
41  RouteDataProvider.hookToRootScope(true);
42
43  // Translation
44  $translateProvider.useStaticFilesLoader({
45    prefix: '/api/translate/translate.php?language=',
46    suffix: ''
47  });
48
49  //default load when user already selected language from dropdown
50  var jsCookieLang = document.cookie;
51  var arrayLang = ["ko_KR", "en_US", "zh_CN"];
52
53  var i;
54  for (i = 0; i < arrayLang.length; i++) {
55    if (jsCookieLang.search(arrayLang[i]) > 0) {
56      var ActiveLang = arrayLang[i];
57    }
58  }
59
60  if (!ActiveLang) {
61    //DEFAULT LANGUAGE FOR FRESH VISIT
62    ActiveLang = "ko_KR";
63  }
64
65  $translateProvider.preferredLanguage(ActiveLang);
66  if (ActiveLang == "ko_KR") {
67    $translateProvider.useLocalStorage(angular.lowercase(ActiveLang.substring(3, 5)));
68  } else {
69    $translateProvider.useLocalStorage(ActiveLang.substring(0, 2));
70  }
71
72  $translateProvider.useLocalStorage();
73  $translateProvider.useSanitizeValueStrategy('escaped');
74
75
76  $routeProvider
77    .when('/',
78      {
79        RouteData: {
80          bodyClass: 'bg-main',
81          title: '',
82          description: '',
83          keyword: 'Online Gambling Site, Trusted Gambling Site'
84        },
85        templateUrl: 'pages/main.php',
86        controller: '',
87        activetab: 'main'
88      })
89    /*.when('/mobile-app',
90      {
91        RouteData: {
92          bodyClass: 'bg-main',
93          title: '',
94          description: '',
95          keyword: 'Online Gambling Site, Trusted Gambling Site'
96        },
97        templateUrl: 'pages/mobile.php',
98        controller: '',
99        activetab: 'mobile'
100      })*/
101    .when('/sports-betting-online',
102      {
103        RouteData: {
104          bodyClass: 'bg-sports',
105          title: '',
106          description: '',
107          keyword: 'Football gambling site, Trusted football gambling site, bola88, trusted football bookie, online casino bookie, online bookies, sbobet Indonesia'
108        },
109        templateUrl: 'pages/sports.php',
110        controller: '',
111        activetab: 'sports'
112      })
113    .when('/live-casino',
114      {
115        RouteData: {
116          bodyClass: 'bg-casino',
117          title: '',
118          description: '',
119          keyword: 'Live Casino Indonesia, Live casino games, Trusted domino site, Casino App'
120        },
121        templateUrl: 'pages/casino.php',
122        controller: '',
123        activetab: 'casino'
124      })
125    /*.when('/online-poker',
126      {
127        RouteData: {
128          bodyClass: 'bg-poker',
129          title: '',
130          description: '',
131          keyword: 'Trusted Online Poker Agent, IDN Poker Online, Trusted Poker Site'
132        },
133        templateUrl: 'pages/poker.php',
134        controller: '',
135        activetab: 'poker'
136      })*/
137    .when('/online-slot-games',
138      {
139        RouteData: {
140          bodyClass: 'bg-slots',
141          title: '',
142          description: '',
143          keyword: ''
144        },
145        templateUrl: 'pages/slots.php',
146        controller: 'SlotController',
147        activetab: 'slots'
148      })
149    .when('/slots-view',
150      {
151        RouteData: {
152          bodyClass: 'bg-slots',
153          title: '',
154          description: '',
155          keyword: ''
156        },
157        templateUrl: 'pages/slots-view.php',
158        controller: 'SlotController',
159        activetab: 'slots'
160      })
161    .when('/fish-game',
162      {
163        RouteData: {
164          bodyClass: '',
165          title: '',
166          description: '',
167          keyword: ''
168        },
169        templateUrl: 'pages/fish-game.php',
170        controller: '',
171        activetab: 'fish-game'
172      })
173    .when('/casino-bonus-promotion',
174      {
175        RouteData: {
176          bodyClass: 'bg-promotion',
177          title: '',
178          description: '',
179          keyword: ''
180        },
181        templateUrl: 'pages/promotion.php',
182        controller: '',
183        activetab: 'promotion'
184      })
185    .when('/view-sports',
186      {
187        RouteData: {
188          bodyClass: 'bg-sports-view',
189          title: '',
190          description: '',
191          keyword: ''
192        },
193        templateUrl: 'pages/view-sports.php',
194        controller: '',
195        activetab: 'sports'
196      })
197    /*.when('/lottery',
198      {
199        RouteData: {
200          bodyClass: 'bg-lottery',
201          title: '',
202          description: '',
203          keyword: ''
204        },
205        templateUrl: 'pages/lottery.php',
206        controller: '',
207        activetab: 'lottery'
208      })*/
209    .when('/arcade',
210      {
211        RouteData: {
212          bodyClass: 'bg-fungame',
213          title: '',
214          description: '',
215          keyword: ''
216        },
217        templateUrl: 'pages/arcade.php',
218        controller: '',
219        activetab: 'arcade'
220      })
221    .otherwise({
222      redirectTo: '/',
223      RouteData: {
224        bodyClass: 'bg-main',
225        title: '',
226        description: '',
227        keyword: ''
228      },
229      templateUrl: '../pages/main.php',
230      controller: ''
231    });
232  $locationProvider.html5Mode(true);
233}]);
234
235app.config(['ngDialogProvider', function (ngDialogProvider) {
236  ngDialogProvider.setDefaults({
237    closeByEscape: false,
238    showClose: true,
239    ariaAuto: false,
240    ariaRole: false,
241    setOpenOnePerName: true
242  });
243}]);
244
245app.service('loggedInStatus', function ($rootScope) {
246  return {
247    setLoggedInStatus: function () {
248      $rootScope.loggedIn = true;
249      $rootScope.loggedOut = false;
250    },
251    setLoggedOutStatus: function () {
252      $rootScope.loggedIn = false;
253      $rootScope.loggedOut = true;
254    }
255  };
256});
257
258app.config(function ($provide) {
259  $provide.decorator('inputDirective', function ($delegate, $log) {
260    $log.debug('Hijacking input directive');
261    var directive = $delegate[0];
262    angular.extend(directive.link, {
263      post: function (scope, element, attr, ctrls) {
264        element.on('compositionupdate', function (event) {
265          element.triggerHandler('compositionend');
266        })
267      }
268    });
269    return $delegate;
270  });
271});
272
273app.service('AmountService', function () {
274  return {
275    sumAmount: function (amount, amountSum) {
276      //console.log(amountSum);
277      if (amount == "NaN" || amount == "") {
278        return parseFloat(amountSum);
279      }
280      amount = parseFloat(amount) + parseFloat(amountSum);
281      return amount;
282    },
283    resetAmount: function () {
284      return 0;
285    }
286  };
287});
288
289app.filter('htmlToPlaintext', function () {
290  return function (text) {
291    /*REMOVE HTML TAGS*/
292    var contents = String(text).replace(/<[^>]+>/gm, '');
293    /*REMOVE NBSP*/
294    contents = String(contents).replace(/&nbsp;/g, " ");
295    return text ? contents : '';
296  };
297});
298
299app.filter('customCurrency', ["$filter", function ($filter) {
300  return function (amount, currencySymbol) {
301    //console.log(amount);
302    var number = $filter('number');
303    if (String(amount).charAt(0) === "-") {
304      return number(amount).replace("-", "-" + currencySymbol);
305    }
306    if (amount == undefined) {
307      return "Loading";
308    } else {
309      return number(amount) + " " + currencySymbol;
310    }
311  };
312}]);
313
314app.filter('userDateTimeTimeZone', function ($filter) {
315  return function (input, format, offset) {
316    if (input == null) {
317      return "";
318    }
319    var timeFromUTC = moment.utc(input);
320    var tzName = jstz.determine().name();
321    var _date = moment(timeFromUTC, tzName).format("YYYY-MM-DD HH:mm:ss Z");
322    return _date.toString();
323  }
324});
325
326app.filter('userDateTime', function ($filter) {
327  return function (input, format, offset) {
328    if (input == null) {
329      return "";
330    }
331    var timeFromUTC = moment.utc(input);
332    var tzName = jstz.determine().name();
333    var _date = moment.tz(timeFromUTC, tzName).format("YYYY-MM-DD HH:mm");
334    return _date.toString();
335  }
336});
337
338app.filter('userDate', function ($filter) {
339  return function (input, format, offset) {
340    if (input == null) {
341      return "";
342    }
343    var timeFromUTC = moment.utc(input);
344    var tzName = jstz.determine().name();
345    var _date = moment.tz(timeFromUTC, tzName).format("YYYY-MM-DD");
346    return _date.toString();
347  }
348});
349
350app.filter('nl2br', ['$sce', function ($sce) {
351  return function (text) {
352    return text ? $sce.trustAsHtml(text.replace(/\n/g, '<br/>')) : '';
353  };
354}]);
355
356app.filter("trustUrl", ['$sce', function ($sce) {
357  return function (recordingUrl) {
358    return $sce.trustAsResourceUrl(recordingUrl);
359  };
360}]);
361
362app.directive("addAmountList", function () {
363  return {
364    link: function (scope, element, attrs) {
365      scope.data = scope[attrs["addAmountList"]];
366    },
367    restrict: "A",
368    template: "<button type='button' class='btn btn-drkgray btn-option' ng-repeat='item in data' ng-click='addAmount(item.price)'>{{item.price | number}} {{item.currency}}</button>"
369  }
370});
371
372var SPECIAL_CHAR = /^[a-zA-Z0-9\!\@\#\$\%\^\\\&\*\(\)\-\_\=\+]*$/;
373//Password Special Character Filter
374app.directive('specialCharC', function () {
375  return {
376    require: 'ngModel',
377    link: function (scope, elm, attrs, ctrl) {
378      ctrl.$validators.specialCharC = function(modelValue, viewValue) {
379        ctrl.$setValidity('haveSpecialChar', SPECIAL_CHAR.test(viewValue));
380
381        if (ctrl.$isEmpty(modelValue)) {
382          // consider empty models to be valid
383          return true;
384        }
385
386        if (SPECIAL_CHAR.test(viewValue)) {
387          // it is valid
388          return true;
389        }
390
391        // it is invalid
392        return false;
393      };
394    }
395  }
396});
397
398app.directive('useFormError',['$log',function($log){
399  return {
400    restrict:'A',
401    require :['?ngModel','^form'],
402    scope   :{
403      useFormError      :'@',
404      useErrorExpression:"=",
405      useErrorInput     :"=?",
406    },
407    link    :function(scope,elem,attrs,ctrls){
408      //We expect that the directive will be applied either on the ng-model, ng-form or another element as an attribute
409      var validityObject=scope.useErrorInput || ctrls[0] || ctrls[1];
410      if(validityObject && angular.isFunction(validityObject.$setValidity)){
411        if(!angular.isDefined(scope.useFormError))
412          $log.error('You must define a key for the form input "'+attrs.useErrorInput+'"');
413        //We watch the changes of expression
414        scope.$watch('useErrorExpression',function(newVal){
415          $log.debug('Key: '+attrs.useFormError+'. Expression: '+attrs.useErrorExpression+' is '+newVal);
416          if(newVal)
417            validityObject.$setValidity(scope.useFormError,false);
418          else
419            validityObject.$setValidity(scope.useFormError,true);
420        });
421      }else
422        $log.error('Form input "'+attrs.useErrorInput+'" not defined for the key: "'+scope.useFormError+'"');
423    }
424  };
425}]);
426
427//Matched Password Filter
428app.directive('validPasswordC', function () {
429  return {
430    require: 'ngModel',
431    link: function (scope, elm, attrs, ctrl) {
432      var original;
433      ctrl.$formatters.unshift(function (modelValue) {
434        original = modelValue;
435        return modelValue;
436      });
437      ctrl.$parsers.push(function (viewValue) {
438        var noMatch = viewValue != scope.signUp.MemberPwd.$viewValue;
439        ctrl.$setValidity('noMatch', !noMatch);
440        return viewValue;
441      });
442    }
443  }
444});
445
446app.directive('validPasswordC2', function () {
447  return {
448    require: 'ngModel',
449    link: function (scope, elm, attrs, ctrl) {
450      var original;
451      ctrl.$formatters.unshift(function (modelValue) {
452        original = modelValue;
453        return modelValue;
454      });
455      ctrl.$parsers.push(function (viewValue) {
456        var noMatch = viewValue != scope.changePwdForm.newPassword.$viewValue;
457        ctrl.$setValidity('noMatch', !noMatch);
458        return viewValue;
459      });
460    }
461  }
462});
463
464app.directive('userNameDuplicated', function (CsrfToken,$http,$window,$filter) {
465  return {
466    require: 'ngModel',
467    link: function (scope, elm, attrs, ctrl) {
468      var original;
469      ctrl.$formatters.unshift(function (modelValue) {
470        original = modelValue;
471        return modelValue;
472      });
473
474      ctrl.$parsers.push(function (viewValue) {
475        if (viewValue != undefined) {
476          if (viewValue.length >= 4) {
477            var url = "/api/player/CheckDuplicateName";
478            var param = {
479              MemberID: viewValue
480            }
481            CsrfToken.HttpRequest('POST',url,param).success(function (data) {
482              if (data.result == 0) {
483                if(data.csrf){
484                  var title =$filter('translate')('Afterclearingcacheandcookies');
485                  var sub = $filter('translate')('Please refresh your browser');
486                  swal({
487                    title: title,
488                    text: sub,
489                    className: "csrf-swal",
490                    icon: "error",
491                    showCancelButton: false,
492                    confirmButtonClass: "#7cd1f9",
493                    confirmButtonText: "OK",
494                    closeOnConfirm: false
495                  }).then(function(confirm){
496                    if (confirm) {
497                      $window.location.href = "/#/";
498                      $window.location.reload();
499                    }
500                  });
501                }
502                else {
503                  ctrl.$setValidity('duplicated', false);
504                }
505              } else {
506                ctrl.$setValidity('duplicated', true);
507              }
508              ctrl.$setValidity('minlength', true);
509            });
510            return viewValue;
511          } else {
512            ctrl.$setValidity('minlength', false);
513            return viewValue;
514          }
515        } else {
516          ctrl.$setValidity('minlength', false);
517          return viewValue;
518        }
519      })
520    }
521  };
522});
523
524app.directive('referrerCheck', function (CsrfToken,$filter,$http) {
525  return {
526    require: 'ngModel',
527    link: function (scope, elm, attrs, ctrl) {
528      var original;
529      ctrl.$formatters.unshift(function (modelValue) {
530        original = modelValue;
531        return modelValue;
532      });
533
534      ctrl.$parsers.push(function (viewValue) {
535        if (viewValue != "") {
536          if (viewValue.length >= 4) {
537            var url = "/api/player/CheckDuplicateName";
538            var param = {
539              MemberID: viewValue
540            }
541            CsrfToken.HttpRequest('POST',url,param).success(function (data) {
542              if (data.result == 0) {
543                if(data.csrf){
544                  var title =$filter('translate')('Afterclearingcacheandcookies');
545                  var sub = $filter('translate')('Please refresh your browser');
546                  swal({
547                    title: title,
548                    text: sub,
549                    className: "csrf-swal",
550                    icon: "error",
551                    showCancelButton: false,
552                    confirmButtonClass: "#7cd1f9",
553                    confirmButtonText: "OK",
554                    closeOnConfirm: false
555                  })
556                }
557                else {
558                  ctrl.$setValidity('duplicated', true);
559                }
560              } else {
561                ctrl.$setValidity('duplicated', false);
562              }
563            });
564            return viewValue;
565          } else {
566            ctrl.$setValidity('duplicated', false);
567            return viewValue;
568          }
569        } else {
570          ctrl.$setValidity('duplicated', true);
571          ctrl.$setPristine();
572          return viewValue;
573        }
574      })
575    }
576  };
577});
578
579app.directive('format', ['$filter', function ($filter) {
580  return {
581    require: '?ngModel',
582    link: function (scope, elem, attrs, ctrl) {
583      if (!ctrl) return;
584
585      ctrl.$formatters.unshift(function (a) {
586        if (attrs.format == "numberDecimal" || attrs.format == "number") {
587          return $filter("number")(ctrl.$modelValue)
588        }
589      });
590      ctrl.$parsers.unshift(function (viewValue) {
591        if (viewValue == "NaN") return 0;
592        if (attrs.format == "numberDecimal") {
593          var plainNumber = viewValue.replace(/[^\d|\-+|\d\.\d|\d\.+]/g, '');
594          if (viewValue.slice(-1) != ".") {
595            elem.val($filter("number")(plainNumber));
596          }
597        } else if (attrs.format == "number") {
598          var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
599          elem.val($filter("number")(plainNumber));
600        }
601        return plainNumber;
602      });
603    }
604  };
605}]);
606
607app.controller("NavController", function ($route, $scope, $rootScope, $location) {
608  $scope.isActive = function (viewLocation) {
609    return viewLocation === $location.path();
610  };
611  $scope.$route = $route;
612});
613
614app.controller('CommonController', function (Idle,CsrfToken,$scope, $rootScope, $timeout, $window, $http, loggedInStatus, $interval, ngDialog, $cookies, $sce, SweetAlert, ccCurrencySymbol, $translate, $location, $filter) {
615
616
617  $scope.whatsAppLink = function() {
618    $window.open('https://wa.me/' +  $scope.messengerContact4);
619  };
620
621
622  $scope.$on('IdleStart', function() {
623    // the user appears to have gone idle
624    if($rootScope.loggedIn){
625      $rootScope.logout();
626    }
627  });
628
629  $scope.isTokenExpired = false;
630
631  let debounce;
632  $('html body').click(function (e) {
633    if ($rootScope.checkLogoutStatus) {
634      return e.preventDefault();
635    }
636    if ($rootScope.loggedIn && !$scope.isTokenExpired) {
637      clearTimeout(debounce);
638      debounce = setTimeout(
639        function () {
640          $rootScope.CheckMemberToken()
641        }, 1000
642      );
643    }
644  });
645
646  $rootScope.CheckMemberToken = function (){
647    var url = '/api/player/CheckMemberToken';
648    $http.get(url).success(function (data){
649      if(data.result == 201){
650        $scope.isTokenExpired = true;
651        swal($filter('translate')(data.message), "", "error").then(function (confirm){
652          if(confirm){
653            $rootScope.logoutToken();
654          }
655        });
656      }
657    });
658  }
659
660  $rootScope.logoutToken = function () {
661    $http.get("/api/player/Logout").success(function (data) {
662      if (data.result == 1) {
663        if (bowser.msie && bowser.version <= 8) {
664          alert("로그아웃 되었습니다");
665        } else {
666          $translate([data.message, ""]).then(function (translations) {
667            SweetAlert.swal(translations[data.message], "", "success");
668          });
669        }
670        loggedInStatus.setLoggedOutStatus();
671        $window.location.reload();
672      } else {
673        loggedInStatus.setLoggedOutStatus();
674        $window.location.reload();
675      }
676    });
677  }
678
679  $rootScope.getAgentProductCasinoGameList = {};
680  $rootScope.userCurrency = "KRW";
681  $rootScope.cc_currency_symbol = ccCurrencySymbol;
682  $rootScope.agentGspList = [];
683
684  $rootScope.announceList = {};
685  $rootScope.realTimeTransactionList = [];
686  $rootScope.readTitle = "";
687  $rootScope.readDate = "";
688  $rootScope.readContents = "";
689  $rootScope.totalBalance = "Loading";
690  $scope.getNotice = false;
691  $scope.isProcessing = false;
692
693  $rootScope.techContactNumber = "";
694  $rootScope.bankContactNumber = "";
695
696  $scope.dialogIsOpen = false;
697
698  $scope.$on('ngDialog.templateLoading', function () {
699    $scope.dialogIsOpen = true;
700  });
701
702  $scope.$on('ngDialog.closing', function () {
703    $scope.dialogIsOpen = false;
704  });
705
706  $scope.ShowDirectMessageDetail = function (DirectMessage) {
707    $rootScope.DMHideNew[DirectMessage.DMStatusIDX] = true;
708    $rootScope.showDirectMessageValues = DirectMessage;
709
710    $http.get("/api/operation/GetDirectMessageDetail?code=" + DirectMessage.DMStatusIDX)
711      .success(function (data) {
712        // $rootScope.UnreadDM = data.list.UnreadDM;
713        $scope.resetDirectMessageCounter();
714        $rootScope.DMReadDate[DirectMessage.DMStatusIDX] = data.list.DMReadDate;
715
716      }).error(function (data, result) {
717      console.error('Repos error', result, data);
718    })
719  };
720
721  $scope.resetDirectMessageCounter = function () {
722    $http.get('/api/operation/GetDirectMessageList')
723      .then(function (response) {
724        const { data } = response;
725        if (data.list !== undefined) {
726          $rootScope.UnreadDM = data.UnreadDM;
727        }
728      })
729      .catch(function (error) {
730        console.error('Repos error', error);
731      });
732  };
733
734  $scope.trustAsHtml = function (html) {
735    return $sce.trustAsHtml(html);
736  };
737
738  // PC 사이즈 변경시 모바일 전환여부 팝업
739/*
740  var appWindow = angular.element($window);
741  $scope.viewSwitch = true;
742
743  appWindow.bind('resize', function () {
744    var width = appWindow[0].innerWidth;
745    if (width < 1024 && $scope.viewSwitch) {
746      $scope.displayViewSwitch();
747      $scope.viewSwitch = false;
748    }
749  });
750*/
751
752  $scope.hideBanner = function() {
753    if($location.path() == '/view-sports') {
754      return true;
755    }
756    return false;
757  };
758
759  $rootScope.getBalance = function (reload) {
760    if (reload) {
761      $("#preloader").show();
762    }
763    if (!$scope.isProcessing) {
764      $scope.isProcessing = true;
765      var url = "/api/finance/CheckMemberBalanceAsync";
766      //ASYNC CHECK MEMBER BALANCE
767      CsrfToken.HttpRequest('GET',url,'').success(function (data) {
768        angular.forEach($rootScope.agentGspList, function (val) {
769          if (data.list[val.gspNo] != undefined) {
770            val.amount = data.list[val.gspNo].Balance;
771          } else {
772            val.amount = 0;
773          }
774          //console.log(val.amount);
775        });
776        $rootScope.totalBalance = data.list['All'].Balance;
777
778        $scope.isProcessing = false;
779        $('#preloader').hide();
780      })
781    }
782  };
783
784
785  $rootScope.checkUnreadComment = function (type, announceNo) {
786    $scope.countUnread = 0;
787    var url = "/api/operation/GetBoardComment?type=" + type + "&&code=" + announceNo;
788    $http({
789      url: url,
790      data: $.param({
791        "type": type,
792        "code": announceNo,
793      }), // pass in data as strings
794      headers: {
795        'Content-Type': 'application/x-www-form-urlencoded'
796      } // set the headers so angular passing info as form data (not request payload)
797    }).success(function (data) {
798
799      angular.forEach(data.content, function (value, key) {
800        if (value.WriteStatus == "N") {
801          $scope.countUnread++;
802        }
803      });
804
805      if ($scope.countUnread > 0) {
806        $('.board-' + announceNo).removeClass("hidden");
807      } else {
808        $('.board-' + announceNo).addClass("hidden");
809      }
810      $scope.countUnread = 0;
811    })
812
813  }
814
815  $rootScope.readBoardContent = function (type, announceNo, comment) {
816    if (comment == undefined) {
817      comment = false;
818    }
819    $rootScope.readCommentDate = "";
820    $rootScope.readComment = "";
821    $rootScope.readBoardCode = "";
822    $rootScope.readCount = "";
823    $rootScope.readTitle = "";
824    $rootScope.readDate = "";
825    $rootScope.readContents = "";
826
827    var url = "/api/operation/GetBoardDescription";
828    var param = {
829      "type": type,
830      "code": announceNo,
831      "comment": comment
832    }
833    CsrfToken.HttpRequest('POST',url,param).success(function (data) {
834      if(data.csrf){
835        var title = $filter('translate')('Afterclearingcacheandcookies');
836        var sub = $filter('translate')('Please refresh your browser')
837        swal({
838          title: title,
839          text: sub,
840          className: "csrf-swal",
841          icon: "error",
842          showCancelButton: false,
843          confirmButtonClass: "#7cd1f9",
844          confirmButtonText: "OK",
845          closeOnConfirm: false
846        })
847      }
848      else {
849        $rootScope.readBoardCode = data.content.BoardCode;
850        $rootScope.readCount = data.content.ViewCount;
851        $rootScope.readTitle = data.content.Subject;
852        $rootScope.readDate = data.content.WriteDate;
853        $rootScope.readContents = $sce.trustAsHtml(data.content.Contents.replace(/color\s*:\s*rgb\(0,\s*0,\s*0\);?/gi, ''));
854        if (comment) {
855          $rootScope.readCommentDate = data.content['comment'][0].WriteDate;
856          $rootScope.readComment = data.content['comment'];
857        }
858      }
859    }).error(function (data, status) {
860      console.error('Repos error', status, data);
861    })["finally"](function () {
862      $rootScope.isRead = true;
863    });
864  };
865
866  $rootScope.displayNotice = function() {
867    angular.forEach($rootScope.announceList, function (val) {
868      if (val.PopUp == 'y' && !$scope.getNotice) {
869        $rootScope.anouncementPopup = val;
870        $scope.getNotice = true;
871        if (!$cookies.get('notToday')) {
872          var url = "/api/operation/GetBoardDescription";
873          var param ={
874            "type": $rootScope.anouncementPopup.Type,
875            "code": $rootScope.anouncementPopup.BoardCode,
876          }
877          CsrfToken.HttpRequest('POST',url,param).success(function (data) {
878            $rootScope.readTitle = data.content.Subject;
879            $rootScope.readContents = $sce.trustAsHtml(data.content.Contents.replace(/color\s*:\s*rgb\(0,\s*0,\s*0\);?/gi, ''));
880
881            ngDialog.open({
882              template: 'popup/notice.php',
883              controller: 'NoticeController',
884              className: 'ngdialog-theme-default ngdialog-notice',
885              showClose: true,
886              closeByEscape: false,
887              scope: $scope,
888              data: {
889                id: $rootScope.anouncementPopup.BoardCode
890              }
891            });
892          })
893        }
894      }
895    })
896  };
897
898  function getNotTodayCookieBO(listArr) {
899    // Get popups that are in cookie list
900    var cookiesArr = listArr.map(function(list) {
901      if($cookies.get('notToday-' + list.BoardCode) || list.PopUp == 'n') { return list.BoardCode }
902    });
903
904    // Filter to remove empty elements from array
905    return cookiesArr.filter(Boolean);
906  }
907
908  $rootScope.displayNoticeTodayBO = function(listArr) {
909    if(!listArr) { return }
910    // Check if all popups are in the cookie
911    if(getNotTodayCookieBO(listArr).length === listArr.length) { return }
912    ngDialog.open({
913      controller: "MultiplePopupController",
914      template: 'popup/notice.php',
915      className: 'ngdialog-theme-default ngdialog-notice',
916      showClose: false,
917      closeByEscape: false,
918      closeByDocument: false,
919      data: {
920        lists: listArr
921      },
922      preCloseCallback: function () {
923        window.scrollTo(0, 0);
924      }
925    });
926  };
927
928  $scope.handleLiveButton = function(gamebutton) {
929    /*
930    if (gamebutton.gspNo == '1058' || gamebutton.gspNo == '1118') {
931      $rootScope.casinoInfo(gamebutton.gspNo, gamebutton.category, gamebutton.gameId, gamebutton.gspName, gamebutton.gameTheme);
932    } else {
933      $scope.playGame(gamebutton.gspNo, 'live', gamebutton.gameId, gamebutton.gameTheme);
934    }
935    */
936    if (gamebutton.category === 'Live Casino') {
937      $rootScope.casinoInfo(gamebutton.gspNo, gamebutton.category, gamebutton.gameId, gamebutton.gspName, gamebutton.gameTheme);
938    } else {
939      $scope.playGame(gamebutton.gspNo, 'live', gamebutton.gameId, gamebutton.gameTheme);
940    }
941  }
942
943  $rootScope.casinoInfo = function (gspNo, category, gameId, gspName, theme) {
944    let title = $filter('translate')('Our Sol Casino prohibits the following games and betting methods.');
945    let sub = $filter('translate')('Both-way betting, stock market, pantan (shoot betting), first-person games from all game companies, table multi-batting');
946
947    swal({
948      icon: "warning",
949      title: title,
950      text: sub,
951      className: '.evo-class',
952      buttons: {
953        ok: 'OK',
954      },
955    }).then((value) => {
956      if (value === 'ok') {
957        return $scope.playGame(gspNo, 'live', gameId, theme);
958      }
959    });
960  }
961
962  $scope.trustAsHtml = $sce.trustAsHtml;
963  $scope.playGame = function (gspNo, productType, gameId, theme, gameName) {
964    if (gspNo == 9999 && productType == 'live' || gspNo == 1038) {
965      return $scope.comingSoon();
966    }
967
968    if ($rootScope.loggedIn) {
969      /*
970      if(gspNo == 1073) {
971        return $scope.comingSoon();
972      }
973      */
974      $rootScope.isOdds = false;
975      var url = "";
976      var size = "";
977      if (productType == "sports") {
978        if (gspNo == 1031) {
979          url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
980          $rootScope.sportIURL = $sce.trustAsResourceUrl(url);
981        } else if (gspNo == 1059) {
982          $rootScope.isOdds = true;
983          url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
984          $rootScope.sportIURL = $sce.trustAsResourceUrl(url);
985        } else if (gspNo == 1060) {
986          ngDialog.close();
987          if (theme == "e-sports") {
988            $scope.sportsTheme =  theme ;
989            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId +"&gameType=" + theme;
990          } else {
991            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
992          }
993          $scope.sportsTheme = theme;
994          $rootScope.sportIURL = $sce.trustAsResourceUrl(url);
995          $rootScope.setActiveSportsGsp(gspNo);
996        } else {
997          url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
998          $rootScope.sportIURL = $sce.trustAsResourceUrl(url);
999        }
1000      } else {
1001        if (productType == 'live' && gameId == 'Desktop') {
1002          url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1003          size = "width=1024, height=592, scrollbars=no, resizable=no ,toolbar=no,titlebar=no";
1004          var popupWindow = window.open(url, 'live', size);
1005        }
1006        if (productType == "live" || productType == "playCheck" || productType == "fun" || productType == "Ltlottery") {
1007          if (gspNo == 1012) {
1008            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1009            size = "width=1024, height=592";
1010          } else if (gspNo == 1022 || gspNo == 1039) {
1011            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1012            size = "width=1240, height=775";
1013          } else if (gspNo == 1009 || gspNo == 1019) {
1014            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1015            size = "width=1024, height=580";
1016          } else if (gspNo == 1023) {
1017            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1018            size = "width=1300, height=775";
1019          } else if (gspNo == 1026) {
1020            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1021            size = "width=1262, height=711";
1022          }  else if (gspNo == 1058) {
1023            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId + "&gameType=" + theme;
1024            size = "width=1024, height=768";
1025          } else if (gspNo == 1035 || gspNo == 1040 || gspNo == 1049 || gspNo == 1097 || gspNo == 1209) {
1026            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1027            size = "width=1240, height=775";
1028          } else if (gspNo == 1005 || gspNo == 1036 || gspNo == 1080 || gspNo == 1086 || gspNo == 1064 || gspNo == 1088  || gspNo == 1017 || gspNo == 1055 || gspNo == 1112) {
1029            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1030            size = "width=1024, height=768";
1031          } else if (gspNo == 1020) {
1032            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1033            size = "width=1280, height=1400";
1034          } else if (gspNo == 1118) {
1035            gameId = '';
1036            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId + "&accLevel=" + 'slive';
1037            size = "width=1366, height=768";
1038          } else if (gspNo == 1153) {
1039            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1040            size = "width=1366, height=795";
1041          } else if (gspNo == 1052) {
1042            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId + "&gameType=" + theme;
1043            size = "width=1360, height=768";
1044          } else if (gspNo == 1060) {
1045            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1046            size = "width=1024, height=592, scrollbars=yes";
1047          } else if (gspNo == 1096) {
1048            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1049            size = "width=1269, height=898";
1050          } else {
1051            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1052            size = "width=1024, height=768";
1053          }
1054
1055        } else if (productType == "slot" || productType == "game" || productType == "minigame") {
1056          if (gspNo == 1005 || gspNo == 1004 || gspNo == 1011 || gspNo == 1038 || gspNo == 1036) {
1057            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1058            size = "width=1024, height=592";
1059          } else if (gspNo == 1032) {
1060            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1061            size = "width=1300, height=840";
1062          } else if (gspNo == 1012) {
1063            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1064            size = "width=1300, height=800";
1065          } else if (gspNo == 1034) {
1066            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1067            size = "width=1200, height=800";
1068          } else if (gspNo == 1073) {
1069            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1070            size = "width=840, height=1150";
1071          } else if (gspNo == 1098) {
1072            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId + "&GameName=" + gameName;
1073            size = "width=1024, height=592";
1074          } else if (gspNo == 1150) {
1075            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1076            size = "width=1070, height=605";
1077          }  else if (gspNo == 1052) {
1078            theme = 5;
1079            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameType=" + theme + "&gameId=" + gameId;
1080            size = "width=1360, height=768";
1081          } else if (gspNo == 1138) {
1082            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1083            size = "width=1366, height=824";
1084          } else if (gspNo == 1140) {
1085            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1086            size = "width=1375, height=824";
1087          } else if (gspNo == 1146) {
1088            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1089            size = "width=1497, height=903";
1090          } else if (gspNo == 1176) {
1091            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1092            size = "width=1328, height=801";
1093          } else if (gspNo == 1184) {
1094            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1095            size = "width=1206, height=746";
1096          } else {
1097            url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType + "&gameId=" + gameId;
1098            size = "width=1024, height=768";
1099          }
1100        } else if (productType == "etc") {
1101          url = "/api/player/PlayGame?gspNo=" + gspNo + "&productType=" + productType;
1102          size = "width=1024, height=682";
1103        }
1104        var target = "";
1105        if (productType == 'live') {
1106          target = gspNo + productType;
1107        } else if (productType == 'slot') {
1108          target = productType;
1109        } else if (productType == 'playCheck' && gspNo == 1005) {
1110          // console.log(productType == 'playCheck' && gspNo == 1005);
1111          target = gspNo + "playCheck";
1112        } else {
1113          // console.log(productType == 'playCheck' && gspNo == 1005);
1114          target = gspNo + Math.random();
1115        }
1116        // console.log('url ::', gspNo + ' | ' + url);
1117
1118        //Center Popup
1119        if((navigator.userAgent.indexOf("MSIE") != -1 ) || (!!document.documentMode == true )) //IF IE > 10
1120        {
1121          var popupWindow = window.open(url, target, size).focus();
1122        }
1123        var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
1124        var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
1125
1126        var width = size.slice(6,10);
1127        var height = size.slice(19,22);
1128
1129        if(gspNo == 1020){
1130          width = "1280";
1131          height="1400"
1132        }
1133        if(gspNo == 1073){
1134          width = "840";
1135          height="1150"
1136        }
1137        if (gspNo == 1125) {
1138          width = "500";
1139          height = "890"
1140        }
1141        if (gspNo == 1044) {
1142          width = "1288";
1143          height = "826"
1144        }
1145        if (gspNo == 1060) {
1146          width = "1274";
1147          height = "948"
1148        }
1149        if (gspNo == 1096) {
1150          width = "1269";
1151          height = "898"
1152        }
1153        if (gspNo == 1091) {
1154          width = "1400";
1155          height = "826"
1156        }
1157        if (gspNo == 1106) {
1158          width = "1578";
1159          height = "826"
1160        }
1161        if (gspNo == 1169) {
1162          width = "1267";
1163          height = "779"
1164        }
1165        if (gspNo == 1176) {
1166          width = "1217";
1167          height = "749"
1168        }
1169        if (gspNo == 1138) {
1170          width = "1157";
1171          height = "721"
1172        }
1173        if (gspNo == 1124 || gspNo == 1132 || gspNo == 1008 || gspNo == 1099 || gspNo == 1155 || gspNo == 1160 || gspNo == 1162) {
1174          width = "1239";
1175          height = "763"
1176        }
1177        if (gspNo == 1080) {
1178          width = "1135";
1179          height = "702"
1180        }
1181        if (gspNo == 1161) {
1182          width = "1135";
1183          height = "868"
1184        }
1185        if (gspNo == 1147) {
1186          width = "1024";
1187          height = "705"
1188        }
1189
1190        var x = ((screen.width/2) - (width/2)) + dualScreenLeft ;
1191        var y = ((screen.height/2) -(height/2))+ dualScreenTop ;
1192        var total_size="width="+width+",height="+height+",left="+x+",top="+y;
1193
1194        if(gspNo == 1004 || gspNo == 1006 || gspNo == 1027 || gspNo == 1022 || gspNo == 1025 || gspNo == 1026 || gspNo == 1028|| gspNo == 1029|| gspNo == 1032 || gspNo == 1135){
1195          $.colorbox({iframe:true,href:url, width:"80%", height:"80%", overlayClose: false});
1196          ngDialog.close();
1197          return;
1198        }
1199
1200        var popupWindow = window.open(url, target, total_size);
1201        popupWindow.focus();
1202
1203        if (gspNo == 1150 || gspNo == 1153) {
1204          var pollTimer = window.setInterval(function () {
1205            if (popupWindow.closed !== false) { // !== is required for compatibility with Opera
1206              window.clearInterval(pollTimer);
1207              CallCloseSession();
1208            }
1209          }, 200);
1210        }
1211
1212        function CallCloseSession() {
1213          window.setTimeout(function () {
1214            if (popupWindow.closed) {
1215              var closeUrl = url.concat("&isClose=true");
1216              $http.get(closeUrl).success(function (data) {
1217                SendCloseSession(data.MemberId, data.SessionId, data.GameCode)
1218              });
1219            }
1220          }, 1);
1221        }
1222      }
1223    } else {
1224      $scope.IsVisible = true;
1225      $scope.displayLogin();
1226    }
1227
1228  };
1229
1230  function SendCloseSession(memberId, sessionId, gspCode) {
1231
1232    var url = isDevelopUrl() ? "https://dev.aplus-api.com/api/close/session" :  "http://v2.aplus-api.com/api/close/session";
1233    var param = "?memberId=" + memberId + "&sessionId=" + sessionId + "&gspCode=" + gspCode;
1234    url = url.concat(param);
1235    $http.get(url).success(function (data) {
1236      console.log(data)
1237    });
1238
1239  }
1240
1241  function isDevelopUrl() {
1242    var server = window.location.hostname;
1243    var pattern = /[a-z0-9]+\.dev-front\.io/;
1244
1245    return pattern.test(server);
1246  }
1247
1248  $scope.aff_user='';
1249  $rootScope.MemberLevel = "";
1250  $rootScope.isloading = true;
1251  $rootScope.counterChecker = 0;
1252  $rootScope.checkSession = function () {
1253    $rootScope.counterChecker++;
1254    if($rootScope.counterChecker <= 1){
1255      $rootScope.isloading = false;
1256    }
1257    $http.get("/api/player/GetNewMemberInfo")
1258      .success(function (data) {
1259        if (data.result != 1) {
1260          if (data.result == 207) {
1261            $http.get("/api/player/Logout").success(function (data) {
1262              if (data.result == 1) {
1263                if (bowser.msie && bowser.version <= 8) {
1264                  alert(data.message);
1265                } else {
1266                  $translate([data.message, ""]).then(function (translations) {
1267                    SweetAlert.swal(translations[data.message], '', "success");
1268                  });
1269                }
1270                loggedInStatus.setLoggedOutStatus();
1271                $window.location.reload();
1272              } else {
1273                loggedInStatus.setLoggedOutStatus();
1274                $window.location.reload();
1275              }
1276            });
1277          }
1278        } else if (data.result == 1 && data.bonus.MemberLevel == "3") {
1279          $http.get("/api/player/Logout")
1280            .success(function (data) {
1281              if (data.result == 1) {
1282                if (bowser.msie && bowser.version <= 8) {
1283                  alert(data.message);
1284                } else {
1285                  $translate([data.message, ""]).then(function (translations) {
1286                    SweetAlert.swal(data.message, "", "success");
1287                  });
1288                }
1289                loggedInStatus.setLoggedOutStatus();
1290                $timeout(function () {
1291                  $window.location.reload();
1292                }, 2000);
1293              } else {
1294                loggedInStatus.setLoggedOutStatus();
1295                $window.location.reload();
1296              }
1297            });
1298        } else {
1299          if (data.alert) {
1300            if (bowser.msie && bowser.version <= 8) {
1301              alert(data.message);
1302            } else {
1303              $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
1304                SweetAlert.swal(translations.PleaseTryAgain, translations[data.message], "success");
1305              });
1306            }
1307          }
1308        }
1309        $scope.aff_user = data.bonus.AffUser;
1310        $rootScope.UnreadDM = data.bonus.UnreadDM;
1311        $rootScope.MemberLevel = data.bonus.MemberLevel;
1312        $rootScope.BonusGameEnable = data.bonus.BonusGameEnable;
1313        $scope.withdrawStatus = data.bonus.WithdrawPWStatus;
1314        $rootScope.agentPaymentList = data.PaymentList;
1315        // $scope.getPromotionFromCommon = $rootScope.GetPromotionHistoryCommon();
1316        $rootScope.withdrawStatus =  data.bonus.WithdrawPWStatus;
1317        $rootScope.MemberRank = data.bonus.MemberLevel;
1318
1319        if ($rootScope.agentGspList == undefined) {
1320          $scope.getBalance();
1321        }
1322
1323        if ($rootScope.agentGspCount != data.GameList.count) {
1324          $rootScope.agentGspList = data.GameList.data;
1325          $rootScope.agentGspCount = data.GameList.count;
1326        }
1327
1328        if($rootScope.counterChecker <= 1){
1329          if($rootScope.UnreadDM > 0){
1330            $scope.displayCustomer(7);
1331          }
1332        }
1333
1334        $rootScope.isloading = true;
1335        $scope.getBalance();
1336        /*$scope.displayWithdrawPW();*/
1337
1338      }).error(function (data, result) {
1339      console.error('Repos error', result, data);
1340    })["finally"](function () {
1341      $scope.isProcessing = false;
1342    });
1343  };
1344
1345
1346  $scope.stopAlert = false;
1347  $scope.DMPlayAlert = function () {
1348    $scope.audio = new Audio('/common/audio/ko_KR.mp3');
1349    $scope.playAudioPromise = function () {
1350      var promise = $scope.audio.play();
1351      if (promise !== undefined) {
1352        promise.then(function () {
1353          // Autoplay started!
1354        }).catch(function (error) {
1355          // Autoplay was prevented.
1356        });
1357      }
1358    };
1359    //PLAY AUDIO EVERY MINUTE UNLESS STOP
1360    setInterval(function () {
1361      if ($scope.stopAlert == false) {
1362        $scope.audio = new Audio('/common/audio/ko_KR.mp3');
1363        $scope.audio.play();
1364      }
1365    }, 60000)
1366  };
1367
1368  $scope.DMStopAlert = function () {
1369    if (!$scope.audio) {
1370      return;
1371    }
1372    $scope.stopAlert = true;
1373    $scope.audio.pause();
1374  };
1375
1376  $scope.setLang = function (langKey) { //selected language
1377    $scope.currentLang = langKey;
1378    $cookies.get("selectedLanguage");
1379    var now = new Date(), exp = new Date(now.getFullYear() + 100, now.getMonth(), now.getDate());
1380    $cookies.put("selectedLanguage", langKey, {expires: exp});
1381    $translate.use(langKey);
1382    $rootScope.languageSelected =langKey;
1383
1384    //SET LANGUAGE TEXT
1385    $scope.SetLanguageText($scope.currentLang);
1386  };
1387
1388  $scope.SetLanguageText = function (currentLang) {
1389    if (currentLang == "en_US") {
1390      $scope.currentLangValue = "English";
1391    } else if (currentLang == "ko_KR") {
1392      $scope.currentLangValue = "한국어";
1393    } else if (currentLang == "id_ID") {
1394      $scope.currentLangValue = "Indonesian";
1395    } else if (currentLang == "zh_CN") {
1396      $scope.currentLangValue = "中文";
1397    } else {
1398      $scope.currentLangValue = "English";
1399    }
1400  };
1401
1402  $scope.multiplePopup = [
1403    { id: 'mp-01', image: 'popup-01', url: ''},
1404    { id: 'mp-02', image: 'popup-02', url: ''},
1405    { id: 'mp-03', image: 'popup-03', url: 'https://t.me/sola114'},
1406    { id: 'mp-04', image: 'popup-04', url: 'https://t.me/sola114'},
1407    { id: 'mp-05', image: 'popup-05', url: ''},
1408  ];
1409
1410  $scope.multiplePopup2 = [
1411    { id: 'mp-11', image: 'popup-11', url: 'https://t.me/sola114'},
1412    { id: 'mp-12', image: 'popup-12', url: ''},
1413    { id: 'mp-13', image: 'popup-13', url: ''},
1414  ];
1415
1416  function getNotTodayCookie(listArr) {
1417    var cookiesArr = listArr.map(function(list) {
1418      if($cookies.get('notToday-' + list.id)) { return list.id }
1419    });
1420    return cookiesArr.filter(function(x) { return x});
1421  }
1422
1423  $scope.displayMultiplePopups = function(listArr) {
1424    if(!listArr || !listArr.length) { return }
1425    if(getNotTodayCookie(listArr).length === listArr.length) { return }
1426
1427    ngDialog.open({
1428      template: 'popup/multiple-popup.html',
1429      controller: 'MultiplePopupController',
1430      className: 'ngdialog-theme-default ngdialog-mulitple-popup',
1431      showClose: false,
1432      closeByEscape: false,
1433      closeByDocument: false,
1434      scope: $scope,
1435      data: {
1436        lists: listArr
1437      },
1438      preCloseCallback: function () {
1439        window.scrollTo(0, 0);
1440      }
1441    });
1442  };
1443
1444  $rootScope.init = function (isLogin) {
1445    var savedLang = $cookies.get("selectedLanguage") || 'ko_KR';
1446    $scope.setLang(savedLang);
1447    $scope.displayMultiplePopups($scope.multiplePopup2);
1448    $scope.displayMultiplePopups($scope.multiplePopup);
1449    if ($rootScope.loggedIn) {
1450      setTimeout(function () {
1451        $scope.displayNoticeTodayBO();
1452      }, 3000)
1453    }
1454
1455    $scope.isTooltipHide = $cookies.get("isToolTipHide");
1456  };
1457
1458  $scope.formatDate = function (date) {
1459    if (date) {
1460      var date = date.split("-").join("/");
1461      var dateOut = new Date(date);
1462      return dateOut;
1463    }
1464  };
1465
1466  $rootScope.goToMobile = function () {
1467    $window.location.href = '/mobile'
1468  };
1469
1470  $rootScope.redirectUrl = function (url) {
1471    if (!url) {
1472      return $scope.displayLogin();
1473    }
1474
1475    $location.path(url)
1476  };
1477
1478  $scope.slotFromMain = function(gspNo,category){
1479    $rootScope.activeSlot = gspNo;
1480    $scope.activeGameTab = category;
1481    $location.url('/slots-view');
1482    $rootScope.loadSlot($rootScope.activeSlot);
1483  }
1484
1485  $scope.prepareRedirect = function (url, needLogin, name) {
1486    if (!url) {
1487      return $scope.comingSoon();
1488    }
1489
1490    if(url == 'terms') {
1491      return $scope.displayTerms();
1492    }
1493
1494    if (needLogin && !$rootScope.loggedIn) {
1495      return $scope.displayLogin();
1496    }
1497
1498    if (name == 'sports') {
1499      $rootScope.setActiveSportsGsp(1183);
1500      return
1501    }
1502
1503    if (name == 'wallet') {
1504      return $scope.displayWallet(url);
1505    }
1506
1507    if (name == 'customer') {
1508      $scope.displayCustomer(url);
1509      // $scope.setTab(url);
1510      return
1511    }
1512
1513    if(url == 'mobile') {
1514      return window.location.href='/mobile/#/'
1515    }
1516
1517    if (url == 'referral') {
1518      var link = $scope.currentLang == 'en_US' ? 'https://www.youtube.com/watch?v=0cbkxLv-TWo':'https://youtu.be/08nBo1QiGRA';
1519      $window.open(link, '_blank');
1520      return true;
1521    }
1522
1523    if (url == 'livechat') {
1524      return LC_API.open_chat_window();
1525    }
1526    if (url == 'affiliates') {
1527      return $scope.displayPartnership();
1528    }
1529
1530
1531    $location.path(url);
1532  };
1533
1534  $rootScope.closeDialog = function () {
1535    ngDialog.close();
1536  };
1537  $scope.displayViewSwitch = function () {
1538    ngDialog.open({
1539      template: 'popup/view-switch.php',
1540      className: 'ngdialog-theme-default ngdialog-view-switch',
1541      closeByEscape: false,
1542      closeByDocument: false
1543    })
1544  };
1545
1546
1547  $scope.displayForgot = function () {
1548    ngDialog.open({
1549      template: 'popup/forgot-password.php',
1550      controller: 'ForgotPasswordController',
1551      className: 'ngdialog-theme-default ngdialog-forgot',
1552      scope: $scope
1553    });
1554  };
1555
1556  $scope.displayLogin = function (displayP) {
1557    if (!$rootScope.loggedIn) {
1558      if(displayP == "Y"){
1559        $scope.IsVisible = false;
1560      }else{
1561        $scope.IsVisible = true;
1562      }
1563      ngDialog.open({
1564        template: 'popup/login.php',
1565        controller: 'LoginController',
1566        className: 'ngdialog-theme-default ngdialog-login',
1567        scope: $scope
1568      });
1569    }
1570  };
1571
1572  $scope.CallAngularLogin = function(){
1573    if($rootScope.loggedIn){
1574      return;
1575    }
1576
1577    $scope.displayLogin();
1578  }
1579
1580  $scope.displaySignUp = function () {
1581    ngDialog.close();
1582    if ($scope.NewMember == "Y") {
1583      ngDialog.open({
1584        template: 'popup/signup.php',
1585        controller: 'SignUpController',
1586        className: 'ngdialog-theme-default ngdialog-signup',
1587        scope: $scope,
1588        closeByEscape: false,
1589        closeByDocument: false
1590      });
1591    } else {
1592      SweetAlert.swal(
1593        $filter('translate')('For membership registration, please contact the customer center.'),
1594        $filter('translate')('Thank you.'),
1595        "info"
1596      );
1597    }
1598  };
1599
1600  $scope.displayWallet = function (tabIndex) {
1601    $scope.isLoadingPopup = true;
1602    if (!$rootScope.loggedIn) {
1603      return $scope.displayLogin();
1604    }
1605
1606    if ($scope.isLoadingPopup == true) {
1607      $('.sublink-list__item,.footer-links__list__item,.balance-button-container--lg button').addClass('disable-event');
1608      $scope.selectWalletTab = tabIndex;
1609      ngDialog.open({
1610        template: 'popup/wallet.php',
1611        controller: 'WalletController',
1612        className: 'ngdialog-theme-default ngdialog-main-default',
1613        closeByDocument: false,
1614        scope: $scope,
1615        preCloseCallback: function () {
1616          $('.sublink-list__item,.footer-links__list__item,.balance-button-container--lg button').removeClass('disable-event');
1617        }
1618      });
1619    }
1620  };
1621
1622  $scope.displayCustomer = function (tabIndex) {
1623    $scope.selectCustomerTab = tabIndex;
1624    if (!$rootScope.loggedIn) {
1625      return $scope.displayLogin();
1626    }
1627    $('.sublink-list__item,.footer-links__list__item,.balance-button-container--lg button').addClass('disable-event');
1628    ngDialog.open({
1629      template: 'popup/customer.php',
1630      controller: 'CustomerController',
1631      className: 'ngdialog-theme-default ngdialog-main-default',
1632      closeByDocument: false,
1633      scope: $scope,
1634      preCloseCallback:function () {
1635        $('.sublink-list__item, .footer-links__list__item, .balance-button-container--lg button').removeClass('disable-event');
1636      }
1637    });
1638  };
1639
1640  $scope.displayTerms = function (tabIndex) {
1641    $scope.selectCustomerTab = tabIndex;
1642    ngDialog.open({
1643      template: 'popup/terms.php',
1644      controller: '',
1645      className: 'ngdialog-theme-default ngdialog-main-default',
1646      closeByDocument: false,
1647      scope: $scope
1648    });
1649  };
1650
1651  $scope.displayRules = function (tabIndex) {
1652    $scope.pageName = 'popup/rules/rules-' + $rootScope.currentLang + '.php';
1653    $scope.selectRulesTab = tabIndex;
1654    ngDialog.open({
1655      template: $scope.pageName,
1656      controller: 'RulesController',
1657      className: 'ngdialog-theme-default ngdialog-rules',
1658      scope: $scope
1659    });
1660  };
1661  $scope.displayPartnership = function (tabIndex) {
1662    if (!$rootScope.loggedIn && tabIndex !== 1) {
1663      return $scope.displayLogin();
1664    }
1665    ngDialog.open({
1666      template: 'popup/partnership.php',
1667      controller: 'CustomerController',
1668      className: 'ngdialog-theme-default ngdialog-main-default notice-rules',
1669      closeByDocument: false,
1670      scope: $scope,
1671
1672    });
1673  };
1674
1675  $rootScope.comingSoon = function () {
1676    var message = '';
1677    if (bowser.msie && bowser.version <= 8) {
1678      alert(message);
1679    } else {
1680      $translate([message, "ComingSoon"]).then(function (translations) {
1681        SweetAlert.swal(translations.ComingSoon, translations[message], "info");
1682      });
1683    }
1684  };
1685
1686  $rootScope.maintenance = function () {
1687    var message = '';
1688    if (bowser.msie && bowser.version <= 8) {
1689      alert(message);
1690    } else {
1691      $translate([message, "SystemMaintenance"]).then(function (translations) {
1692        SweetAlert.swal(translations.SystemMaintenance, translations[message], "warning");
1693      });
1694    }
1695  };
1696
1697
1698  /*  $scope.getMovie = true;
1699    if (!$cookies.get('notTodayVideo')) {
1700      $scope.movieOpen = ngDialog.open({
1701        template: 'popup/promotion-notice.php',
1702        controller: 'MovieController',
1703        className: 'ngdialog-theme-default ngdialog-movie movieOverlay popup1 popup',
1704        showClose: true,
1705        closeByEscape: false,
1706        closeByDocument: false,
1707        scope: $scope
1708      });
1709    }*/
1710
1711  /*if (!$cookies.get('notTodayVideo3')) {
1712    $scope.movieOpen = ngDialog.open({
1713      template: 'popup/newpopup-2.php',
1714      controller: 'MovieController2',
1715      className: 'ngdialog-theme-default ngdialog-notice ngdialog-new-notice',
1716      showClose: true,
1717      closeByEscape: false,
1718      closeByDocument: false,
1719      scope: $scope
1720    });
1721  }*/
1722
1723  $rootScope.contactCC = function () {
1724    var message = 'AccessDenied';
1725    if (bowser.msie && bowser.version <= 8) {
1726      alert(message);
1727    } else {
1728      $translate([message, "ContactCustomerCenter"]).then(function (translations) {
1729        SweetAlert.swal(translations.ContactCustomerCenter, translations[message], "info");
1730      });
1731    }
1732  };
1733
1734  $rootScope.setSlot = function (gspNo) {
1735    $rootScope.triggerLoadSlot = gspNo;
1736  };
1737
1738  $rootScope.loadCounter = function () {
1739    $http.get("/api/marketing/getJackpot")
1740      .success(function (data) {
1741        $('.jackpot-odometer').jOdometer({
1742          increment: data.increment,
1743          counterStart: data.counterStart,
1744          counterEnd: false,
1745          numbersImage: 'common/images/jackpot/odometer.svg',
1746          spaceNumbers: 0,
1747          formatNumber: true,
1748          widthNumber: 32,
1749          heightNumber: 80
1750        });
1751      }).error(function (data, status) {
1752      console.error('Repos error', status, data);
1753    });
1754  };
1755
1756  $rootScope.loadIDNCounter = function () {
1757    $http.get("/api/marketing/GetPokerJackpot")
1758      .success(function (data) {
1759        $('.jackpot-odometer').jOdometer({
1760          increment: 13.13,
1761          counterStart: data.total_jackpot + "." + (Math.floor(Math.random() * 9) + 1) + '' + (Math.floor(Math.random() * 9) + 1),
1762          counterEnd: false,
1763          numbersImage: 'common/images/odometer.png',
1764          spaceNumbers: 1,
1765          formatNumber: true,
1766          widthNumber: 38,
1767          heightNumber: 60
1768        });
1769      }).error(function (data, status) {
1770      console.error('Repos error', status, data);
1771    });
1772  };
1773
1774  $scope.redirectShowPromotionDialog = function (activeMenuNo) {
1775    $rootScope.activeMenuNoFromHome = activeMenuNo;
1776    $location.path('/casino-bonus-promotion');
1777  }
1778
1779  $rootScope.setActiveSportsGsp = function (gspNo) {
1780    if (gspNo == "" || gspNo == undefined || gspNo == 9999) {
1781      $rootScope.comingSoon();
1782      return;
1783    }
1784
1785     if ($rootScope.loggedIn != true && gspNo) {
1786       $scope.displayLogin();
1787       return;
1788     }
1789
1790    $('html,body').animate({scrollTop: 0}, 0);
1791
1792    $rootScope.activeSportsGsp = gspNo;
1793    $location.path('/view-sports');
1794  };
1795
1796//redirect if undefined
1797  if ($rootScope.activeSportsGsp == undefined && $location.path() == '/view-sports') {
1798    // $location.path('/sports-betting-online');
1799    $rootScope.activeSportsGsp = '1183';
1800  }
1801
1802
1803  $scope.displayFAQ = function () {
1804    var url = "../popup/FAQ/FAQ.php?lang=" + $rootScope.currentLang;
1805    var size = "width=1000px, height=760px,scrollbars=no, resizable=no ,toolbar=no,titlebar=no";
1806    window.open(url, 'FAQ', size);
1807  }
1808
1809  $scope.combinedMaintenance = function (agentGsp) {
1810    if (agentGsp.amount == 'MAINTENANCE') {
1811      return agentGsp.gspName + " - MAINTENANCE";
1812    } else {
1813      return $filter('translate')(agentGsp.gspName);
1814    }
1815  };
1816
1817  $scope.combinedMaintenanceByCurrency = function (agentGsp) {
1818    if (agentGsp.Maintenance == 'Y') {
1819      return false;
1820    } else {
1821      return true;
1822    }
1823  };
1824
1825  $scope.maintenanceFilter = function (agentGsp) {
1826    if (agentGsp.amount == 'MAINTENANCE') {
1827      return false;
1828    } else {
1829      return true;
1830    }
1831  };
1832
1833  $scope.closeDM = function () {
1834    if ($rootScope.loggedIn) {
1835      if ($rootScope.UnreadDM > 0) {
1836        SweetAlert.swal($filter('translate')('Please check all the messages'), $filter('translate')('You can use the site after checking all messages'), "error");
1837      } else {
1838        ngDialog.close();
1839        $rootScope.counterChecker = 0;
1840      }
1841    } else {
1842      ngDialog.close();
1843    }
1844  }
1845
1846  // $http.get("/api/system/gamelist/gamebuttons.json?v1")
1847  //   .success(function (data) {
1848  //     $scope.gameButtons = data;
1849  //   });
1850
1851  $scope.translateWalletCategory = function (agentGsp) {
1852    return $filter('translate')(agentGsp.category);
1853  };
1854
1855  $rootScope.GetPromotionHistoryCommon = function () {
1856    var url = "/api/player/GetPromotionHistory";
1857    $http({
1858      method: 'GET',
1859      url: url,
1860      headers: {
1861        'Content-Type': 'application/x-www-form-urlencoded'
1862      } // set the headers so angular passing info as form data (not request payload)
1863    }).success(function (data) {
1864      $scope.getPromotionFromCommon = data.promotion;
1865    })["finally"](function () {
1866    });
1867  }
1868
1869  $scope.ValidateLength = function(event){
1870    var MemberPhone = event.target.value
1871    MemberPhone = MemberPhone.replace(/[^0-9\.]+/g, "");
1872    if(MemberPhone.length<11 || MemberPhone.length>12){
1873      $(".field-phone").addClass("has-errors");
1874    }else{
1875      $(".field-phone").removeClass("has-errors");
1876    }
1877  }
1878
1879  $scope.filterVip = function(vip)
1880  {
1881    if(vip.promotionID !=  23){
1882      return true; // this will be listed in the results
1883    }
1884    else if(vip.promotionID ==  23) {
1885      if ($rootScope.loggedIn) {
1886        if ($rootScope.MemberLevel == 5 || $rootScope.MemberLevel == 6 || $rootScope.MemberLevel == 7 || $rootScope.MemberLevel == 8) {
1887          return true; // otherwise it won't be within the results
1888        }
1889        return false;
1890      }
1891    }
1892
1893  };
1894
1895  $scope.displayWithdrawPW = function () {
1896    if ($rootScope.withdrawStatus == "N") {
1897      ngDialog.open({
1898        template: 'popup/withdraw-pw.php',
1899        controller: '',
1900        className: 'ngdialog-theme-default withdrawPassword',
1901        showClose: false,
1902        closeByEscape: false,
1903        closeByDocument: false,
1904        scope: $scope
1905      });
1906    }
1907  }
1908
1909  $rootScope.setActiveInside = function (setTab) {
1910    $rootScope.isActiveInside = setTab;
1911  };
1912});
1913
1914app.controller('GspHeaderController', function($rootScope, $scope, $cookies, $http, $location, ngDialog) {
1915  // $rootScope.setActiveSportsGsp = function (gspNo, productType, gameId, theme) {
1916  //   window.scrollTo(0, 0);
1917  //   $http.get("/api/system/gamelist/gamebuttons.json")
1918  //     .success(function (data) {
1919  //       $rootScope.gameButtons = data;
1920  //     });
1921  //
1922  //   if (gspNo == "" || gspNo == undefined || gspNo == 9999) {
1923  //     $rootScope.comingSoon();
1924  //     return;
1925  //   }
1926  //   if ($rootScope.loggedIn != true) {
1927  //     $scope.displayLogin();
1928  //     return;
1929  //   }
1930  //   $rootScope.activeSportsGsp = gspNo;
1931  //   ngDialog.close();
1932  //   $location.url('/view-sports');
1933  // }
1934
1935  $rootScope.sportsGamesData = [
1936    {
1937      'gspNo': '1044',
1938      'gspName': '10Bet Sports',
1939      'category': 'sports',
1940      'gspNameSubText': '',
1941      'gspClass': 'sports-button-3',
1942      'title': '10Bet',
1943      'description': '10bet is an online gambling company founded in 2003 and offers live & pre-match of sportsbook.',
1944    },
1945    {
1946      'gspNo': '1060',
1947      'gspName': 'Pinnacle Sports',
1948      'category': 'sports',
1949      'gspNameSubText': '',
1950      'gspClass': 'sports-button-3',
1951      'title': 'Pinnacle',
1952      'description': 'Pinnacle has a reputation for offering the best betting product worldwide - Pinnacle Solution partners have unique access to this product and the benefits it offers.',
1953    },
1954    {
1955      'gspNo': '1096',
1956      'gspName': 'SBO Bet Sports',
1957      'category': 'sports',
1958      'gspNameSubText': '',
1959      'gspClass': 'sports-button-3',
1960      'title': 'SBO Bet',
1961      'description': 'SBOBET Sports offers over 1500 sporting events every week, with extensive coverage of all major football leagues and international sporting events.',
1962    },
1963    {
1964      'gspNo': '1091',
1965      'gspName': 'IBC Sports',
1966      'category': 'sports',
1967      'gspNameSubText': '',
1968      'gspClass': 'sports-button-3',
1969      'title': 'IBC',
1970      'description': 'IBC provides several gaming options such as Sportsbook, Live Casino, Slots and Number games to cater to all of our different customers\' needs.',
1971    },
1972    {
1973      'gspNo': '1106',
1974      'gspName': 'Betconstruct Sports',
1975      'category': 'sports',
1976      'gspNameSubText': '',
1977      'gspClass': 'sports-button-3',
1978      'title': 'Betconstruct',
1979      'description': 'BetConstruct is a global award-winning technology and services provider for online and land-based gaming industry.',
1980    },
1981  ];
1982
1983  $rootScope.casinoGamesData = [
1984    {
1985      'gspNo': '1058',
1986      'gspName': 'Evolution',
1987      'category': 'live',
1988      'gspNameSubText': '',
1989      'gspClass': 'sports-button-3',
1990      'title': 'Evolution',
1991      'description': 'Evolution offers operators an unrivalled portfolio of both time-honoured and unique casino games and live game shows that meet the needs of multiple international markets.',
1992      'gameId': 'baccarat',
1993      'theme': '2'
1994    },
1995    {
1996      'gspNo': '1012',
1997      'gspName': 'Choice Gaming',
1998      'category': 'live',
1999      'gspNameSubText': '',
2000      'gspClass': 'sports-button-3',
2001      'title': 'Choice Gaming',
2002      'description': 'Choice Gaming offers a wide range of products, including baccarat and roulette, which are popular among players around the world.',
2003    },
2004    {
2005      'gspNo': '1194',
2006      'gspName': 'Microgaming Live',
2007      'category': 'live',
2008      'gspNameSubText': '',
2009      'gspClass': 'sports-button-3',
2010      'title': 'Microgaming',
2011      'description': 'Microgaming has been setting the industry standard for quality, innovation and entertainment since 1994.',
2012    },
2013    {
2014      'gspNo': '1195',
2015      'gspName': 'Microgaming Grand Live',
2016      'category': 'live',
2017      'gspNameSubText': '',
2018      'gspClass': 'sports-button-3',
2019      'title': 'Microgaming Grand Live',
2020      'description': 'Microgaming has been setting the industry standard for quality, innovation and entertainment since 1994.',
2021    },
2022    {
2023      'gspNo': '1198',
2024      'gspName': 'Playtech',
2025      'category': 'live',
2026      'gspNameSubText': '',
2027      'gspClass': 'sports-button-3',
2028      'title': 'Playtech',
2029      'description': 'Playtech is the world\'s largest online gaming software supplier founded in 1999, traded on the London Stock Exchange Main Market in 2006.',
2030      'gameId': 'bal'
2031    },
2032    {
2033      'gspNo': '1027',
2034      'gspName': 'Gameplay',
2035      'category': 'live',
2036      'gspNameSubText': '',
2037      'gspClass': 'sports-button-3',
2038      'title': 'Gameplay',
2039      'description': 'Gameplay Interactive has been providing white label and turnkey solutions since 2013.',
2040    },
2041    {
2042      'gspNo': '1118',
2043      'gspName': 'Pragmatic Play',
2044      'category': 'live',
2045      'gspNameSubText': '',
2046      'gspClass': 'sports-button-3',
2047      'title': 'Pragmatic Play',
2048      'description': 'Pragmatic Play is a leading content provider to the iGaming and Betting Industry, offering a multi-product portfolio that is innovative, regulated and mobile-focused.',
2049      'gameId': '',
2050      'theme': 'slive'
2051    },
2052    {
2053      'gspNo': '1147',
2054      'gspName': 'Sexy Gaming',
2055      'category': 'live',
2056      'gspNameSubText': '',
2057      'gspClass': 'sports-button-3',
2058      'title': 'Sexy Gaming',
2059      'description': 'AE was a company specializing in video streaming technology for large clients. With the sophisticated expertises and excellent services the company offered.',
2060    },
2061  ];
2062});
2063
2064
2065app.controller('RulesController', function ($scope, $rootScope) {
2066  $scope.isSet = function (checkTab) {
2067    return $rootScope.selectRulesTab == checkTab;
2068  };
2069  $scope.setTab = function (setTab) {
2070    $rootScope.selectRulesTab = setTab;
2071  };
2072});
2073
2074app.controller('ForgotPasswordController', function ($scope, $rootScope, $http, SweetAlert, $translate, ngDialog) {
2075  /*SECURITY QUESTIONS*/
2076  $scope.getSecurityQuestion = [
2077    {'SecurtiyNo': 0, 'SecurityQuestion': "Mother's Name?"},
2078    {'SecurtiyNo': 1, 'SecurityQuestion': "Pet's Name?"},
2079    {'SecurtiyNo': 2, 'SecurityQuestion': "Favorite Food?"},
2080    {'SecurtiyNo': 3, 'SecurityQuestion': "Favorite Color?"},
2081    {'SecurtiyNo': 4, 'SecurityQuestion': "Favorite Actor?"},
2082    {'SecurtiyNo': 5, 'SecurityQuestion': "Favorite Athlete?"},
2083  ];
2084
2085  $scope.isProcessing = false;
2086  $scope.forgotPwd = {};
2087  $rootScope.getTempPwd = "";
2088  $rootScope.getMemId = "";
2089
2090  $scope.processForm = function () {
2091    $scope.isProcessing = true;
2092    var url = "/api/player/ForgotPassword";
2093    $http({
2094      method: 'POST',
2095      url: url,
2096      data: $.param($scope.forgotPwd),
2097      headers: {
2098        'Content-Type': 'application/x-www-form-urlencoded'
2099      } // set the headers so angular passing info as form data (not request payload)
2100    }).success(function (data) {
2101      if (data.result == 1) {
2102        $rootScope.getTempPwd = data.tempPwd;
2103        $rootScope.getMemId = data.MemberID;
2104        ngDialog.open({
2105          template: 'popup/change-forgot-password.php',
2106          className: 'ngdialog-theme-default ngdialog-forgot',
2107          closeByEscape: false,
2108          closeByDocument: false,
2109          scope: $scope
2110        });
2111      } else {
2112        if (data.alert) {
2113          if (bowser.msie && bowser.version <= 8) {
2114            alert(data.message);
2115          } else {
2116            $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
2117              SweetAlert.swal(translations[data.message], translations.PleaseTryAgain, "error");
2118            });
2119          }
2120        }
2121      }
2122    }).error(function (data, status) {
2123      console.error('Repos error', status, data);
2124    })["finally"](function () {
2125      $scope.isProcessing = false;
2126    });
2127  };
2128});
2129
2130app.controller("ChangeForgotPasswordController", function ($scope, $rootScope, $http, SweetAlert, ngDialog, $window, $translate) {
2131  $scope.ChangeforgotPwd = {};
2132  $scope.isProcessing = false;
2133
2134  $scope.ChangeforgotPwd.TempPwd = $rootScope.getTempPwd;
2135  $scope.ChangeforgotPwd.MemberID = $rootScope.getMemId;
2136
2137  $scope.processForm = function () {
2138    $scope.isProcessing = true;
2139    var url = "/api/player/ChangeForgotPassword";
2140    $http({
2141      method: 'POST',
2142      url: url,
2143      data: $.param($scope.ChangeforgotPwd), // pass in data as strings
2144      headers: {
2145        'Content-Type': 'application/x-www-form-urlencoded'
2146      } // set the headers so angular passing info as form data (not request payload)
2147    }).success(function (data) {
2148      if (data.result == 1) {
2149        if (bowser.msie && bowser.version <= 8) {
2150          alert(data.message);
2151        } else {
2152          $translate([data.message]).then(function (translations) {
2153            SweetAlert.swal(translations[data.message], "", "success");
2154          });
2155          ngDialog.close();
2156        }
2157        $window.location.href = "/";
2158        $window.location.reload();
2159      } else {
2160        if (data.alert) {
2161          if (bowser.msie && bowser.version <= 8) {
2162            alert(data.message);
2163          } else {
2164            $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
2165              SweetAlert.swal(translations[data.message], translations.PleaseTryAgain, "error");
2166            });
2167          }
2168        }
2169      }
2170    }).error(function (data, status) {
2171      console.error('Repos error', status, data);
2172    })["finally"](function () {
2173      $scope.isProcessing = false;
2174    });
2175  };
2176});
2177
2178app.directive('phoneNumberDuplicated', function ($http) {
2179  return {
2180    require: 'ngModel',
2181    link: function (scope, elm, attrs, ctrl) {
2182      var original;
2183      ctrl.$formatters.unshift(function (modelValue) {
2184        original = modelValue;
2185        return modelValue;
2186      });
2187
2188      ctrl.$parsers.push(function (viewValue) {
2189        if (viewValue != undefined) {
2190          if (viewValue.length >= 4) {
2191            var url = "/api/player/CheckDuplicatePhone";
2192            $http({
2193              method: 'POST',
2194              url: url,
2195              data: $.param({
2196                MemberPhone: viewValue
2197              }),
2198              headers: {
2199                'Content-Type': 'application/x-www-form-urlencoded'
2200              }
2201            }).success(function (data) {
2202              if (data.result == 0) {
2203                ctrl.$setValidity('duplicated', false);
2204              } else {
2205                ctrl.$setValidity('duplicated', true);
2206              }
2207              ctrl.$setValidity('minlength', true);
2208            });
2209            return viewValue;
2210          } else {
2211            ctrl.$setValidity('minlength', false);
2212            return viewValue;
2213          }
2214        } else {
2215          ctrl.$setValidity('minlength', false);
2216          return viewValue;
2217        }
2218      })
2219    }
2220  };
2221});
2222
2223app.controller("LoginController", function (CsrfToken,$filter,$scope, $http, $window, SweetAlert, loggedInStatus, $translate) {
2224  $scope.loginForm = {};
2225
2226  $scope.isProcessing = false;
2227  $scope.processForm = function () {
2228    if (!$scope.isProcessing) {
2229      $scope.isProcessing = true;
2230      $("#preloader").show();
2231      var url = "/api/player/Login";
2232      CsrfToken.HttpRequest('POST',url,$scope.loginForm)
2233        .success(function (data) {
2234          if (data.result == 1) {
2235            $window.location.href = "/#/";
2236            $window.location.reload();
2237          } else if (data.result == 213) {
2238            if (bowser.msie && bowser.version <= 8) {
2239              alert(data.message);
2240            } else {
2241              SweetAlert.swal(data.message, "승인을 기다려주시거나 지금채팅하기를 통해 고객지원팀에 문의 하여 주시기 바랍니다", "error");
2242            }
2243          } else if (data.result == 203) {
2244            if (bowser.msie && bowser.version <= 8) {
2245              alert(data.message);
2246            } else {
2247              $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
2248                SweetAlert.swal(translations[data.message], translations.PleaseTryAgain, "error");
2249              });
2250            }
2251          } else {
2252            if (bowser.msie && bowser.version <= 8) {
2253              alert(data.message);
2254            } else {
2255              if(data.csrf){
2256                swal({
2257                  title: "캐시 및 쿠키 삭제 후",
2258                  text: "브라우저를 새로고침해 주세요",
2259                  className: "csrf-swal",
2260                  icon: "error",
2261                  showCancelButton: false,
2262                  confirmButtonClass: "#7cd1f9",
2263                  confirmButtonText: "OK",
2264                  closeOnConfirm: false
2265                }).then(function(confirm) {
2266                  if (confirm) {
2267                    $window.location.href = "/#/";
2268                    $window.location.reload();
2269                  }
2270                });
2271              } else {
2272                $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
2273                  SweetAlert.swal(translations[data.message], translations.PleaseTryAgain, "error");
2274                });
2275              }
2276            }
2277          }
2278        }).error(function (data, status) {
2279        console.error('Repos error', status, data);
2280      })["finally"](function () {
2281        $scope.isProcessing = false;
2282        $("#preloader").hide();
2283      });
2284    }
2285  };
2286
2287// caret on category
2288  $scope.showGameList = function (index) {
2289    $(".category.caret-" + index + " .caret").toggleClass("caret-up");
2290  }
2291
2292// open game list on login
2293  $('.dropdown-toggle').on('click', function (event) {
2294    $(this).parent().toggleClass('open');
2295  });
2296
2297// close game list
2298  $('body').on('click', function (e) {
2299    if (!$('.dropdown').is(e.target)
2300      && $('.dropdown').has(e.target).length === 0
2301      && $('.open').has(e.target).length === 0
2302    ) {
2303      $('.dropdown').removeClass('open');
2304    }
2305  });
2306
2307// caret on login
2308  $('.dropdown-toggle').click(function () {
2309    $('.dropdown-toggle .caret').toggleClass("caret-up");
2310  });
2311
2312
2313  $scope.walletCategory = [
2314    {"category": "Live Casino", "target": "live-login", "img": "live"},
2315    {"category": "Fun Game", "target": "fun-login", "img": "fun"},
2316    {"category": "Slot Games", "target": "slots-login", "img": "slots"},
2317    {"category": "Sports", "target": "sports-login", "img": "sports"},
2318
2319    /*{"category": "Fish Game", "target": "fish-login", "img": "fish"},*/
2320    /*{"category": "Poker", "target": "poker-login", "img": "poker"},*/
2321    /*{"category": "Lottery", "target": "lottery-login", "img": "lottery"},*/
2322
2323  ];
2324});
2325
2326app.controller("LogoutController", function ($scope, $rootScope, $http, $window, SweetAlert, loggedInStatus, $timeout) {
2327  $scope.isProcessing = false;
2328  $rootScope.logout = function () {
2329    $scope.isProcessing = true;
2330    $http.get("/api/player/Logout")
2331      .success(function (data) {
2332        if (data.result == 1) {
2333          if (bowser.msie && bowser.version <= 8) {
2334            alert(data.message);
2335          } else {
2336            SweetAlert.swal("로그아웃 되었습니다", "", "success");
2337          }
2338          /*DELAY RELOAD AFTER LOGGING OUT*/
2339          $timeout(function () {
2340            loggedInStatus.setLoggedOutStatus();
2341            $window.location.href = "/#/";
2342            $window.location.reload();
2343          }, 1000)
2344        } else {
2345          if (data.alert) {
2346            if (bowser.msie && bowser.version <= 8) {
2347              alert(data.message);
2348            } else {
2349              SweetAlert.swal("로그아웃 되었습니다", "", "error");
2350            }
2351          }
2352        }
2353      }).error(function (data, result) {
2354      console.error('Repos error', result, data);
2355    })["finally"](function () {
2356      $scope.isProcessing = false;
2357    });
2358  }
2359});
2360
2361app.controller('NoticeController', function ($rootScope, $scope, $cookies, $http, $window, SweetAlert, $translate, ngDialog, $sce) {
2362  $rootScope.writeQuestion = {};
2363
2364  $scope.notToday = function () {
2365    var expireDate = new Date();
2366    expireDate.setDate(expireDate.getDate() + 1);
2367    $cookies.put('notToday', 'true', {'expires': expireDate});
2368    $scope.closeThisDialog();
2369  };
2370
2371  $scope.newEventNotToday = function () {
2372    var expireDate = new Date();
2373    expireDate.setDate(expireDate.getDate() + 1);
2374    $cookies.put('newEventNotToday', 'true', {'expires': expireDate});
2375    $scope.closeThisDialog();
2376  };
2377
2378
2379  $rootScope.processForm = function () {
2380    $rootScope.isProcessing = true;
2381    var url = "/api/operation/GetWriteBoard";
2382    $http({
2383      method: 'POST',
2384      url: url,
2385      data: $.param($rootScope.writeQuestion), // pass in data as strings
2386      headers: {
2387        'Content-Type': 'application/x-www-form-urlencoded'
2388      } // set the headers so angular passing info as form data (not request payload)
2389    }).success(function (data) {
2390      if (data.result == 1) {
2391        if (bowser.msie && bowser.version <= 8) {
2392          alert(data.message);
2393        } else {
2394          $translate([data.message]).then(function (translations) {
2395            SweetAlert.swal(translations[data.message], "", "success");
2396          });
2397        }
2398      } else {
2399        if (data.alert) {
2400          if (bowser.msie && bowser.version <= 8) {
2401            alert(data.message);
2402          } else {
2403            $translate([data.message, "PleaseTryAgain"]).then(function (translations) {
2404              SweetAlert.swal(translations.PleaseTryAgain, translations[data.message], "success");
2405            });
2406          }
2407        }
2408      }
2409    }).error(function (data, result) {
2410      console.error('Repos error', result, data);
2411    })["finally"](function () {
2412      $rootScope.isProcessing = false;
2413    });
2414  }
2415});
2416
2417
2418app.controller('PromotionController', function ($rootScope, $scope, ngDialog) {
2419  $scope.promotions = [
2420    {
2421      'promotionID': '1',
2422      'promotionTitle': '신규회원 적응 이벤트',
2423      'promotionDesc': '가입 후 첫 입금일부터 30일간 매일매일 한번 더 기회가 주어진다! \n' +
2424        '🎯 구간 루징 금액에 따라 다음날 쿠폰 지급! (오링쿱 별도지급!!) \n' +
2425        '루징 50,000원 이상  20,000원 쿠폰 \n' +
2426        '루징 100,000원 이상  30,000원 쿠폰 \n' +
2427        '루징 200,000원 이상  50,000원 쿠폰 \n' +
2428        '루징 500,000원 이상  100,000원 쿠폰 \n' +
2429        '※주의※ \n' +
2430        '☞가입후 첫 입금일로부터 30일입니다. \n' +
2431        '☞입금보다 출금이 더 많을경우 지급 불가입니다. \n' +
2432        '☞총합 루징이 아닌 가장 많은 1회 입금액 기준으로 지급됩니다. ex)일 입금 총 30만 중 20만 오링시 5만 쿠폰지급 \n' +
2433        '☞해당 쿠폰을 지급 받을 경우 롤링 3배 최대 3배까지 출금이 가능합니다. \n' +
2434        '☞쿠폰 악용자로 판단될 경우 지급 불가입니다. \n' +
2435        '☞이벤트 내용 및 지급조건은 변경될 수 있습니다. \n' +
2436        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2437        '텔레그램: sola114 \n' +
2438        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2439      'promoImage': 'promo-banner-1'
2440    },
2441    {
2442      'promotionID': '2',
2443      'promotionTitle': '솔카지노 국군장병 특별 이벤트!',
2444      'promotionDesc': '대한민국 국군장병 회원님들을 위한 \n' +
2445        '솔카지노 특별 프로모션 이벤트! \n' +
2446        '\n' +
2447        '1. 국군장병 추천 이벤트 \n' +
2448        '기존 지인 추천이벤트에 추천한 전우 입금 시 상위 추천인 대원분께 \n' +
2449        '최대 10만원 쿠폰 지급! \n' +
2450        '\n' +
2451        '2. 휴가자 떡값 이벤트 \n' +
2452        '휴가증 인증 + 업소방문 인증 완료 시 \n' +
2453        '인증된 회원분들 대상으로 업소비용 지원 이벤트 진행! \n' +
2454        '※ 최대 20만원까지 지원 가능 \n' +
2455        '※ 전역 전까지 1회만 참여 가능합니다. \n' +
2456        '\n' +
2457        '3. 전역자 이벤트 \n' +
2458        '솔카지노를 꾸준하게 이용해주신 장병여러분께 소정의 전역축하금을 지원해드립니다 \n' +
2459        '\n' +
2460        '▪️ 100만원 이상 입금 → 5만원 쿠폰 \n' +
2461        '▪️ 300만원 이상 입금 → 10만원 쿠폰 \n' +
2462        '▪️ 500만원 이상 입금 → 15만원 쿠폰 \n' +
2463        '▪️ 1,000만원 이상 입금 → 30만원 쿠폰 \n' +
2464        '▪️ 5,000만원 이상 → 1:1 고객센터 문의 \n' +
2465        '\n' +
2466        '※전역일 기준 1주일 이내 신청 가능 \n' +
2467        '\n' +
2468        '⚠️ 참여 제한 안내 \n' +
2469        '기존 전역자 / 예비군 / 사회복무요원 / 상근예비역 / 산업기능요원 회원님들은 \n' +
2470        '이벤트 참여가 불가능합니다. \n' +
2471        '\n' +
2472        '⚠️주의사항 \n' +
2473        '이벤트 악용 시 해당 이벤트는 참여가 불가합니다 \n' +
2474        '\n' +
2475        '자세한 사항은 고객센터로 문의 부탁드립니다. \n' +
2476        '감사합니다. \n',
2477      'promoImage': 'promo-banner-2'
2478    },
2479    {
2480      'promotionID': '3',
2481      'promotionTitle': '[월요일] 주간 루징 이벤트',
2482      'promotionDesc': '▶️신청대상 : 전 회원 대상 \n' +
2483        '▶️신청방법 : 자동 지급 \n' +
2484        '월요일 시작 일요일 종료 기준으로 총합 하여 그 다음 주 월요일날 지급 됩니다. \n' +
2485        '루징액의 5% 최대 100만원 까지 지급 가능합니다. \n' +
2486        '2025년 7월 28일 지급분부터 🪙텔레채널참여 https://t.me/soleventchannel 후 채널친구 @solcaChannel 추가시 최대 200만 가능 💖 \n' +
2487        '#쿠폰 지급규정# \n' +
2488        '-50만원 이상 = 5% (1만원 단위 지급) \n' +
2489        '-25만원 초과 ~ 50만원 미만 = 10,000원 \n' +
2490        '-15만원 초과 ~ 25만원 미만 = 5,000원 \n' +
2491        '※주의※ \n' +
2492        '☞해당 이벤트는 한 주간 3일 이상 입금 있는 회원들만 참여 가능합니다. \n' +
2493        '☞한 주간의 입금 - 출금의 차액을 정산하여 지급되십니다. \n' +
2494        '☞한주간 입금-출금 차액의 10%이상 보유중이실경우 오링으로 간주되지 않아 지급이 불가한점 유의부탁드립니다. \n' +
2495        '☞해당 쿠폰을 지급 받을 경우 롤링 3배 최대 5배까지 출금이 가능합니다. \n' +
2496        '☞이벤트 규정은 상황에 따라 변경될 수 있습니다. \n' +
2497        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2498        '모든 게임사 룰렛은 이용금지 게임입니다 \n' +
2499        '텔레그램: sola114 \n' +
2500        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2501      'promoImage': 'promo-banner-3'
2502    },
2503    {
2504      'promotionID': '4',
2505      'promotionTitle': '[화요일] 연속입금 이벤트 안내!',
2506      'promotionDesc': '<div class="promo-desc-img"><img src="/common/images/promotion/consecutive_DepositEvent.png" alt=""></div>\n' +
2507        '▶️신청대상 : 전 회원 대상 \n' +
2508        '▶️신청방법 : 화요일부터 신청가능(고객센터에 직접 문의) \n' +
2509        '매주 월요일부터 일요일 기준 \n' +
2510        '연속 입금액 기준에 따라 1만-100만 쿠폰 지급 받으실수 있습니다. \n' +
2511        '※주의※ \n' +
2512        '☞지난주 월요일부터 일요일까지 연속 입금액 기준입니다. \n' +
2513        '☞가장 높은 구간 기준으로 1회 지급입니다. \n' +
2514        '☞연속으로 입금 하신데 까지의 횟수로 지급되십니다 ex) 20만 구간 5회차 3만 지급 \n' +
2515        '☞지난주 입금액 대비 롤링 200% 이하는 지금 불가 \n' +
2516        '☞해당 쿠폰은 매주 화요일 조건 확인 후 새벽 일괄지급 됩니다 \n' +
2517        '☞해당 쿠폰을 지급 받을 경우 롤링 3배 최대 3배까지 출금이 가능합니다. \n' +
2518        '☞쿠폰 악용자로 판단될 경우 지급 불가입니다. \n' +
2519        '☞이벤트 내용 및 규정은 변경될 수 있습니다. \n' +
2520        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2521        '텔레그램: sola114 \n' +
2522        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2523      'promoImage': 'promo-banner-4'
2524    },
2525    {
2526      'promotionID': '5',
2527      'promotionTitle': '[수요일] 출석 이벤트',
2528      'promotionDesc': '▶대상자 - 텔레채널 구독자 t.me/soleventchannel \n' +
2529        '▶참여조건 \n' +
2530        '매주 월요일부터 일요일 기준으로 3일, 5일, 7일 출석 해주시는 회원님 대상 \n' +
2531        '출석 일수에 따라 3일, 5일, 7일 = 1만, 2만, 3만 쿠폰으로 7일 출석시 최대 3만원 쿠폰을 받으실 수 있습니다 \n' +
2532        '주의사항 \n' +
2533        '1) 월요일부터 일요일까지 하루에 10만원 이상 입금 하신 회원분들 대상 \n' +
2534        '2) 출석은 월요일부터 일요일 기준이며 3일이상 입금  이용하시는 회원분들 대상으로 쿠폰은 그 다음 주 수요일날 일괄적으로 채널 참여자분들에 한해 지급 됩니다. \n' +
2535        '3) 신규 회원분들은 가입 첫 날 첫 충전 이벤트 이용시 출석에 포함되지 않습니다.(신규 첫 이벤트 없이 입금해야 인정) \n' +
2536        '4) 악용자로 판단시 참여불가 합니다. \n' +
2537        '솔카지노 이벤트 채널 - t.me/soleventchannel \n' +
2538        '궁금한점이 있으면 언제든지 고객센터로 문의부탁드립니다 \n' +
2539        '텔레그램: sola114 \n' +
2540        '텔레그램 친구추가 링크 : https://t.me/sola114 \n' +
2541        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2542      'promoImage': 'promo-banner-5'
2543    },
2544    {
2545      'promotionID': '6',
2546      'promotionTitle': '[목요일] 텔레그램 채널 프리스핀 이벤트',
2547      'promotionDesc': '▶대상자 - 텔레채널 구독자 t.me/soleventchannel \n' +
2548        '▶참여조건 \n' +
2549        '당일 10만원 이상 입금 및 롤링 200% 완료 후 아래의 커뮤니티에 후기 작성 인증시 (글내용 3줄이상 & 당일배팅내역사진 첨부) \n' +
2550        '빠른티비 - quick-tv.com \n' +
2551        '언더독 -  underdogcasino1.com \n' +
2552        '카인사 -  카인사.com \n' +
2553        '▶ 출금 조건 - 롤링 3배 최대 3배까지 출금 가능! (초과 되는 금액은 자동 회수 처리 됩니다) \n' +
2554        '▶ 지급쿠폰 - 프리스핀 2만원 쿠폰 \n' +
2555        '▶ 쿠폰사용법 - 자주 묻는 질문 클릭 후 "솔카지노 쿠폰 규정 안내" 를 클릭하셔서 참고해주시기 바랍니다. \n' +
2556        '▶ 주의 사항 -  지정 게임사 지정 게임만 이용해주셔야 합니다 - 텔레공지 참조 \n' +
2557        '프리스핀 이벤트 게임이 아닌 다른 게임을 이용하실 경우 당첨금은 전액 회수처리 됩니다. \n' +
2558        '솔카지노 이벤트 채널 - t.me/soleventchannel \n' +
2559        '궁금한점이 있으면 언제든지 고객센터로 문의부탁드립니다 \n' +
2560        '텔레그램: sola114 \n' +
2561        '텔레그램 친구추가 링크 : https://t.me/sola114 \n' +
2562        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2563      'promoImage': 'promo-banner-6'
2564    },
2565    {
2566      'promotionID': '7',
2567      'promotionTitle': '[금요일] 롤링왕 토너먼트 이벤트',
2568      'promotionDesc': '▶️신청대상 : 텔레채널 회원 대상 t.me/soleventchannel \n' +
2569        '▶️신청방법 : 전 회원 자동신청 \n' +
2570        '회원님들을 위한 내가 롤링왕 토너먼트 이벤트를 진행하게 되었습니다 \n' +
2571        '모든 회원 참여가 가능하시니 많은 참여 부탁드립니다 !! \n' +
2572        '총 상금 5억 ! 주간 최대 상금 천만원 ! \n' +
2573        '▶️운영내용 \n' +
2574        '솔카지노를 이용하는 모든 회원들 대상으로 바카라와 슬롯 각각 롤링을 가장 많이 한 회원 순으로 \n' +
2575        '상금을 지급합니다 토너먼트는 바카라 및 슬롯으로 진행 되며 바카라의 경우 라이트닝, 펀토 방코등의 베팅과 타이베팅은 롤링에 포함되지 않습니다. \n' +
2576        '롤링은 베팅/입금액 비례 퍼센트 비율로 순위가 매겨지는점 꼭 참고 부탁드립니다. \n' +
2577        '▶️금액별 상금안내 \n' +
2578        '☞1등 500만원 \n' +
2579        '☞2등 300만원 \n' +
2580        '☞3등 100만원 \n' +
2581        '☞4등  60만원 \n' +
2582        '☞5등  40만원 \n' +
2583        '실입금 기준 \n' +
2584        '☞3천만원~  100% 지급 \n' +
2585        '☞2천만원~2,999만원  80% 지급 \n' +
2586        '☞1천만원~1,999만원  60% 지급 \n' +
2587        '☞500만원~999만원  40% 지급 \n' +
2588        '☞100만원~499만원  20% 지급 \n' +
2589        '☞50만원~99만원  10% 지급 \n' +
2590        '예) 상금 100만원 당첨 됐을 경우 실입금 3천만원이면 100만원 모두 수령 가능, 실입금이 50만원일 경우 \n' +
2591        '상금 100만원의 10%인 10만원만 지급 됩니다. \n' +
2592        '* 한 주 입금 50만원 이하는 참여가 되지 않습니다 \n' +
2593        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2594        '텔레그램: sola114 \n' +
2595        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2596      'promoImage': 'promo-banner-7'
2597    },
2598    {
2599      'promotionID': '8',
2600      'promotionTitle': '[토요일] 입금 플러스 이벤트!!',
2601      'promotionDesc': '항상 저희 솔카지노 믿고 이용해 주셔서 감사합니다. \n' +
2602        '저희 솔카지노에서 토요일 이벤트를 진행하게 되어 공지 드리며 자세한 내용은 아래를 참고 부탁 드립니다! \n' +
2603        '이벤트 기간 : 매주 토요일 ~ 차후 안내시까지 \n' +
2604        '이벤트 대상자 : 모든 회원님들! \n' +
2605        '1. 토요일 입플 이벤트! \n' +
2606        '매주 토요일 첫입금 입플 이벤트 요청시 15%의 추가 포인트를 받아 이용하실 수 있습니다! (요청이 없으시면 지급이 어려우시니 꼭 문의 부탁 드려요!) \n' +
2607        '- 당일 출금이 있으시면 요청이 불가능합니다. \n' +
2608        '- 이벤트에 참여해주시면 지급된 포인트 포함하여 롤링 3배가 필요합니다. \n' +
2609        '- 입플 이벤트만 참여 해주셔서 입플 악용자로 확인될 경우 롤링 5배 해주셔야 합니다. \n' +
2610        '- 지급되는 포인트는 최대 10만원 입니다. \n' +
2611        '- 최소 참여금액은 입금액 5만원 부터 입니다 \n' +
2612        '기타 궁금한 사항은 라이브 채팅 및 텔레그램 고객센터로 문의 부탁 드립니다. \n' +
2613        '텔레그램:  sola114 (뒤에 영문등이 있는곳은 사칭입니다) \n' +
2614        '앞으로도 더욱 노력하는 솔카지노 운영진이 되겠습니다. \n',
2615      'promoImage': 'promo-banner-8'
2616    },
2617    {
2618      'promotionID': '9',
2619      'promotionTitle': '[채널 이벤트] 실시간 오링쿠폰 이벤트',
2620      'promotionDesc': '⏱실시간 오링쿠폰/채널입장 https://t.me/soleventchannel 후 @solcaChannel 채널친구 추가시 참여가능합니다! \n' +
2621        '✨당일 이용 금액 입플없이 순수 입금액으로만 루징 후 요청시 5% 오링쿠폰 총 3번까지 지급 (모든입플 및 프로모션 함께 사용시 지급불가) \n' +
2622        '📌롤링3배 최대 5배 (당일 총합 최대 50만) \n' +
2623        '⛔주의사항 \n' +
2624        '1️⃣ 당일 출금이 있으면 참여 불가입니다. \n' +
2625        '2️⃣ 오링쿱 받은 후 출금시 당일 이벤트 종료입니다. \n' +
2626        '3️⃣ 오링쿱 받은 후 미출금일경우 다음 입금 이용후 오링시 2차 지급이 가능합니다. (총합 루징기준이 아닙니다. 오링쿱 지급시 리셋) \n' +
2627        '4️⃣ 돌발이벤트 참여시 해당 이벤트 참여는 불가합니다 \n' +
2628        '✔️ @solcaChannel 텔레로 문의주셔야 지급 가능합니다. https://t.me/solcaChannel 📌 \n',
2629      'promoImage': 'promo-banner-9'
2630    },
2631    {
2632      'promotionID': '10',
2633      'promotionTitle': '[채널 이벤트] 텔레그램 채널 입플 이벤트',
2634      'promotionDesc': '▶대상자 - 텔레채널 구독자 t.me/soleventchannel \n' +
2635        '이벤트 1. 입플 이벤트 \n' +
2636        '▶참여조건 \n' +
2637        '5+3 \n' +
2638        '10+5 \n' +
2639        '20+7 \n' +
2640        '50+12 \n' +
2641        '100+20 \n' +
2642        '각 구간별 1회씩 출금 나올때까지 입플 참여 가능! \n' +
2643        '▶ 출금 조건 - 입금액 + 쿠폰 금액 롤링 5배이후 출금 가능 \n' +
2644        '이벤트 2. 잭팟 스토리 공유 이벤트 \n' +
2645        '▶참여조건 \n' +
2646        '이벤트 시간내에 500배 이상 슬롯 잭팟 당첨된 회원 \n' +
2647        '고객센터에 당첨내역 캡쳐 후 쿠폰 신청 (최소 베팅 200원 이상 가능 1일 1회만 가능) \n' +
2648        '500배 이상 2만 \n' +
2649        '3000배 이상 3만 \n' +
2650        '5000배 이상 5만 \n' +
2651        '10000배 이상 10만 \n' +
2652        '▶ 출금 조건 - 롤링 3배 최대 3배까지 출금 가능! (초과 되는 금액은 자동 회수 처리 됩니다) \n' +
2653        '*입플 및 쿠폰으로 당첨시 참여 불가 \n' +
2654        '솔카지노 이벤트 채널 - t.me/soleventchannel \n' +
2655        '궁금한점이 있으면 언제든지 고객센터로 문의부탁드립니다 \n' +
2656        '텔레그램: sola114 \n' +
2657        '텔레그램 친구추가 링크 : https://t.me/sola114 \n' +
2658        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2659      'promoImage': 'promo-banner-10'
2660    },
2661    {
2662      'promotionID': '11',
2663      'promotionTitle': '[매일 이벤트] 일일 오링쿠폰 이벤트',
2664      'promotionDesc': '안녕하세요 솔카지노 입니다. \n' +
2665        '금일부터 더욱 업그레이드 되는 일일 오링쿠폰 이벤트 안내드립니다. \n' +
2666        '이벤트 내용은 아래와 같습니다. \n' +
2667        '▶️솔카지노 오링 쿠폰 이벤트◀️ \n' +
2668        '▶️신청대상 : 일반 회원 대상 \n' +
2669        '▶️신청방법 : 일반 회원 자동신청 \n' +
2670        '매일 오링 쿠폰은 매일 자정에 회원님의 당일 입금 - 출금의 차액을 정산해서 새벽 2시 이전까지 지급해 드리고 있으며 쿠폰 금액은 다음과 같습니다 \n' +
2671        '-50만원 이상 = 5% 50만원 \n' +
2672        '-25만원 이상 ~ 50만원 미만 = 10,000원 \n' +
2673        '-10만원 이상 ~ 25만원 미만 = 5,000원 \n' +
2674        '-5만원 이상 ~ 10만원 미만 = 2,000원 \n' +
2675        '※주의※ \n' +
2676        '☞매일 오링 쿠폰은 롤링 3배 이상, 최대 10배까지 출금 가능합니다 \n' +
2677        '☞오링쿠폰 30만이상부터는 5만원 단위로 지급됩니다. (예: 33만원 지급일경우 30만지급) \n' +
2678        '☞정산 당시 입금 - 출금 차액의 10%이상 보유하고 있을 경우 지급 불가 \n' +
2679        '예) 당일 입금 100만, 출금 40만 따라서, 차액 60만원의 10% 6만원, 정산 당시 보유금액 6만원 이상 보유시, 오링쿠폰 대상자에서 제외 \n' +
2680        '▶️ 쿠폰사용법 \n' +
2681        '자주 묻는 질문문 클릭 후 "솔카지노 쿠폰 규정 안내" 를 클릭하셔서 참고해주시기 바랍니다. \n' +
2682        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2683        '텔레그램: sola114 \n' +
2684        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2685      'promoImage': 'promo-banner-11'
2686    },
2687    {
2688      'promotionID': '12',
2689      'promotionTitle': '[매일 이벤트] 지인추천 이벤트',
2690      'promotionDesc': '▶️지인 추천이벤트가 변경되어 공지 드립니다. \n' +
2691        '\n' +
2692        '▶️대상자 : 추천인 추천 대상자 \n' +
2693        '▶️참여 방법 : 고객센터로 문의 후 절차에 따라 가입된 회원의 추천인 \n' +
2694        '\n' +
2695        '지인 추천 신규 쿠폰 (추천인 가입자 둘다 지급) \n' +
2696        '전 주차 가입자의 루징 금액의 20%를 추천인에게 지급 \n' +
2697        '전 주차 가입자의 루징 금액의 10%를 가입자에게 지급 \n' +
2698        '최대 100만원까지 지급 \n' +
2699        '\n' +
2700        '<주의사항> \n' +
2701        '1) 악성 유저 추천, 중복 가입 유저 추천, 같은 ip 접속 적발 , 같은 패턴의 베팅 유형 , 확인결과 실지인이 아닐경우 에는 해당 회원 뿐 아니라 추천한 모든 회원에 대해서도 지급 불가합니다. \n' +
2702        '이벤트를 악용하여 불이익을 당하는 부분이 없도록 모든 회원님들은 해당 부분을 숙지 후 지인 추천 해주시길 바랍니다. \n' +
2703        '\n' +
2704        '2) 지인분만 추천 후 회원의 계정에 실입금 으로 이용하지 않고 지인분 추천으로 인해 들어오는 쿠폰만으로 사용할 시에도 추천한 지인이 실입금 후 이용하여 쿠폰 지급 대상자 일지라도 회원분께는 쿠폰 지급이 불가합니다. (최근 일주일 이용 50만원 이상 필수,기존건 불포함) \n' +
2705        '\n' +
2706        '3) 가입시 추천인 란에 추천인 작성 후 가입하신분에 한해서만 지인으로 인정되며 만약 지인분께서 추천인을 적지 않으신 상태로 가입하실경우 지인으로 인정되지 않습니다. \n' +
2707        '\n' +
2708        '<신청 양식> \n' +
2709        '1:1 라이브 채팅 및 텔레그램 고객센터로 지인분 성함, 핸드폰 번호 이 두 가지를 작성 하여 말씀주시면 저희 고객센터에서 확인 후 대상자 이실 경우 지급 드립니다. \n' +
2710        '\n' +
2711        '▶️ 출금 조건 \n' +
2712        '쿠폰마다 상이하며 쿠폰명 확인 후 이용 부탁 드립니다. \n' +
2713        '\n' +
2714        '▶️ 주의 사항 \n' +
2715        '추천하신분이 문제가 있을 경우 해당 추천인 에게도 피해가 갈 수 있으니 신중하게 추천 부탁드립니다. \n' +
2716        '\n' +
2717        '※ 반드시 신청을 해주셔야 확인 후 쿠폰지급을 해드립니다. \n' +
2718        '\n' +
2719        '※ 매주 토요일에 라이브챗 또는 텔레그램 고객센터로 문의 주시면 확인 후 지급해드립니다. \n' +
2720        '\n' +
2721        '※ [지인추천]단독 롤링3배/최대3배 까지 입니다. \n' +
2722        '\n' +
2723        '※ 8월 20일부터 시작하여 이날부터 추천한 회원들에게만 해당됩니다. 이전 가입은 해당되지 않습니다. \n' +
2724        '\n' +
2725        '※ 기존에 정상적으로 이용하고 있으나 이벤트 참여를 위해 탈퇴 및 가입은 이벤트에서 배제되오니 이점 유의하시기 바랍니다. \n' +
2726        '\n' +
2727        '텔레그램: sola114 \n' +
2728        '텔레그램 친구추가 링크 : 고객센터 솔레어(솔) \n' +
2729        '앞으로도 더욱 노력하는 솔 스튜디오 운영진이 되겠습니다. \n',
2730      'promoImage': 'promo-banner-12'
2731    },
2732    {
2733      'promotionID': '13',
2734      'promotionTitle': '[매일 이벤트] 콤프 이벤트',
2735      'promotionDesc': '(카지노 이용시) 콤프 0.2% ~ 0.4% 지급 \n' +
2736        '전 회원분들에게 0.2% 콤프를 지급 합니다. \n' +
2737        '심사를 거쳐 최대 0.4%까지 상향 됩니다. \n' +
2738        '(슬롯 이용시) 콤프 1% 지급 \n' +
2739        '슬롯 배팅은 1% 일일 최대 100만원까지 콤프를 지급합니다. \n' +
2740        '※콤프 대상 목록※ \n' +
2741        '모든 슬롯류 게임 및 바카라, 블랙잭등 일반 카지노 게임 \n' +
2742        '라이트닝류 게임 및 라이브쇼 게임, 1인칭 게임 식보등의 경우 콤프 지급이 되지 않습니다. \n' +
2743        '※주의※ \n' +
2744        '- 해당 이벤트는 블랙, 신규, 이용기간 및 입금액 등 심사가 완료된 회원들에게만 지급 가능합니다. \n' +
2745        '- 슬롯 프리스핀 구매시 해당 금액에 대한 콤프는 적용되지 않습니다. \n' +
2746        '- 해당 콤프는 당일 입금이 있어야지만 익일 새벽에 쿠폰으로 지급 됩니다. \n' +
2747        '- 당일 입금이 없는 경우 컴프는 익일 지급이 불가합니다. \n' +
2748        '- 해당 쿠폰은 바로 출금 가능 합니다 최소 롤링 없습니다. \n' +
2749        '- 해당 쿠폰은 당일 입금내역이 있으셔야지만 지급됩니다. \n' +
2750        '- 해당 쿠폰은 최대 10배까지만 출금이 가능합니다. \n' +
2751        '- 해당 쿠폰은 당일 배팅내역에 따라 다음날 06시전까지 일괄 지급되십니다. \n' +
2752        '→ 이때 입금액이랑 같이 사용하며 입금액이 더 클 경우 최대 출금 제한 없습니다. \n' +
2753        '- 해당 이벤트 요율 계산시 타이 및 쿠폰사용 금액은 제외 되어 지급 됩니다. \n' +
2754        '- 롤링 회원은 콤프 지급 불가합니다. \n',
2755      'promoImage': 'promo-banner-13'
2756    },
2757    {
2758      'promotionID': '14',
2759      'promotionTitle': '[매일 이벤트] 슬롯 보너스 이벤트',
2760      'promotionDesc': '회원님들의 많은 성원에 힘입어 슬롯을 이용하시는 회원님들을 위한 이벤트를 진행하게 되었습니다! \n' +
2761        '대상자 : 모든 슬롯이용 회원 \n' +
2762        '이벤트 내용 : 입금 신청시 슬롯 보너스 이벤트를 선택 해주시면 첫,매충 보너스 포인트 및 다양한 이벤트에 참여 가능합니다! \n' +
2763        '첫충시 15% 추가 포인트 (최대 50만) \n' +
2764        '매충시 10% 추가 포인트 (최대 50만) \n' +
2765        '오링쿠폰 지급 \n' +
2766        '컴프쿠폰 지급 \n' +
2767        '주간루징 쿠폰 지급 \n' +
2768        '*주의 사항 (추가 포인트 지급시) \n' +
2769        '- 롤링 300% 이후 출금 가능합니다. \n' +
2770        '- 당일출금 완료시 추가포인트 지급이 되지 않으며 필수 롤링또한 없습니다. \n' +
2771        '- 머신슬롯 이외의 모든게임이 금지됩니다. \n' +
2772        '**슬롯 악용으로 인하여 악용자로 분류될 경우 아래와 같이 제제 대상으로 지정될 수 있으니 참고 부탁 드립니다. \n' +
2773        '1. 롤링 500% \n' +
2774        '2. 입금액별 최소 베팅 설정 \n' +
2775        '- 악용자의 경우 전적으로 사이트측에서 회원님들의 입금액 및 베팅 패턴 확인 후 선정됩니다. 양심적으로 게임 즐기시는 회원님들의 경우 걱정하지 않아 주셔도 됩니다. \n' +
2776        '입금액 ~10만 최소 베팅 없음 \n' +
2777        '입금액 ~50만 2천 이상 베팅 \n' +
2778        '입금액 ~200만 1만 이상 베팅 \n' +
2779        '입금액 ~500만 3만 이상 베팅 \n' +
2780        '기타 궁금한 사항은 라이브 채팅 및 텔레그램 고객센터로 문의 부탁 드립니다. \n' +
2781        '텔레그램: sola114 \n' +
2782        '앞으로도 더욱 노력하는 솔카지노 운영진이 되겠습니다. \n',
2783      'promoImage': 'promo-banner-14'
2784    },
2785    {
2786      'promotionID': '15',
2787      'promotionTitle': '[매일 이벤트] 바로 출금 가능한 후기 쿠픈!!!',
2788      'promotionDesc': '바로 출금 가능한 후기 쿠폰 안내 드립니다!! 안녕하세요 솔카지노 회원 여러분,  변경된 후기 이벤트 안내 드립니다!! \n' +
2789        '▶️신청대상 : 전 회원 대상 (당일 10만원이상 입금 & 롤링 200%) \n' +
2790        '▶️신청방법 : 후기 작성 후 후기글 캡쳐 그리고 해당 링크 복사하여  저희 텔레그램 고객센터(@sola114)로 보내주시면 됩니다. \n' +
2791        '▶️참여방법 : 후기를 각종 커뮤니티에 작성 (글내용에 3줄이상&당일배팅내역사진) \n' +
2792        '모든 커뮤니티 가능(솔커뮤니티제외) 후기만 작성하시면 매일 매일 최대 1만원(각각 5천원 바로 출금 가능) 지급 단,솔커뮤니티 커피이벤트와 중복 1건/1건 참여가능 1건/2건 참여불가능 모든 후기 관련 이벤트는 최대 2건까지 참여가능합니다. \n' +
2793        '⛔주의⛔ \n' +
2794        '☑️후기커뮤1 복사->후기커뮤2 붙여넣기 로 참여시 쿠폰지급불가합니다. \n' +
2795        '☑️하루 총 2건만 참여 가능합니다. \n' +
2796        '☑️해당 쿠폰은 바로 출금 가능한 쿠폰입니다. \n' +
2797        '더 궁금하신 사항 및 불편하신 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2798        '텔레그램: sola114 \n' +
2799        '텔레그램 친구추가 링크 : https://t.me/sola114 \n' +
2800        '앞으로도 더욱 노력하는 솔카지노 운영진이 되겠습니다. \n' +
2801        '☑️해당 쿠폰은 최대출금 10배 까지 가능한 쿠폰입니다. \n' +
2802        '☑️해당 쿠폰을 악용 목적으로 이용하는 회원은 강력한 제재 대상입니다. \n' +
2803        '☑️지급 전 게시물 확인 후 지급 해드리고 있습니다.  ※ 이용내역 사진첨부 및 3줄이상 작성 ※ \n' +
2804        '☑️후기의 내용 및 제목의 경우 복사 붙여넣기를 할경우 확인시 추가지급이 어려울수 있으니 커뮤니티 마다 변경 작성부탁드리겠습니다. \n' +
2805        '↳조건에 맞지 않는 후기일시 지급이 되지 않는 점 참고 바랍니다. \n' +
2806        '기타 궁금한 사항 및 불편한 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2807        '텔레그램: sola114 \n' +
2808        '앞으로도 더욱 노력하는 솔 카지노 운영진이 되겠습니다 \n',
2809      'promoImage': 'promo-banner-15'
2810    },
2811    {
2812      'promotionID': '16',
2813      'promotionTitle': '[주간 이벤트] 스포츠 주간 루징 이벤트',
2814      'promotionDesc': '스포츠 이용 회원들 대상으로 스포츠 주간 루징 쿠폰을 지급합니다! \n' +
2815        '기간 : 매주 월요일~일요일까지 스포츠 루징 금액의 합산 (오직 스포츠만 계산합니다) \n' +
2816        '이벤트 내용 : 기간동안 루징 합산 금액의 5%를 쿠폰으로 지급! (스포츠만 사용 가능) \n' +
2817        '루징액의 5% 최대 50만원 까지 지급 가능합니다. \n' +
2818        '-50만원 이상 = 5% (최대 50만) \n' +
2819        '-25만원 이상 ~ 50만원 미만 = 10,000원 \n' +
2820        '-15만원 이상 ~ 25만원 미만 = 5,000원 \n' +
2821        '* 스포츠 주간 루징 쿠폰은 롤링 2배 이후 최대 5배까지 출금 가능합니다. \n' +
2822        '* 스포츠 주간 루징 쿠폰은 일주일에 최소 3일간 스포츠 이용이 있으셔야 참여가 가능합니다. \n' +
2823        '에볼루션 주식시장은 금지게임입니다. \n' +
2824        '기타 궁금한 사항은 라이브 채팅 및 텔레그램 고객센터로 문의 부탁 드립니다. \n' +
2825        '텔레그램: sola114 \n' +
2826        '앞으로도 더욱 노력하는 솔카지노 운영진이 되겠습니다. \n',
2827      'promoImage': 'promo-banner-16'
2828    },
2829    {
2830      'promotionID': '17',
2831      'promotionTitle': 'BT1 스포츠 전용 이벤트 안내',
2832      'promotionDesc': '스포츠 첫입금 / 컴프 / 고배당 / 올낙첨 / 한폴낙 \n' +
2833        '스포츠 채널 전용 이벤트 오픈 \n' +
2834        '스포츠 입플 이벤트 \n' +
2835        '첫번째 옵션 \n' +
2836        '3+3 (3폴 1.9배당) \n' +
2837        '5+3 (3폴 1.9배당) \n' +
2838        '롤링 200프로 \n' +
2839        '10+5, \n' +
2840        '20+7 \n' +
2841        '50+15 \n' +
2842        '100+20 \n' +
2843        '롤링 150프로 \n' +
2844        '3폴더 배당 1.5 이상부터 참여가능 \n' +
2845        '스포츠 컴프 이벤트 \n' +
2846        '❗️참여 조건 \n' +
2847        '・3폴더 이상 조합 \n' +
2848        '・하루 총 베팅액 100만원 이상 \n' +
2849        '💵이벤트 보상 \n' +
2850        '・ 총 베팅액의 1% 최대 100만 지급 \n' +
2851        '고배당 이벤트 \n' +
2852        '❗️참여 조건 \n' +
2853        '・3폴더 이상 조합 \n' +
2854        '・총 배당 10배당 이상 \n' +
2855        '・베팅금 5만원 이상 \n' +
2856        '💵이벤트 보상 \n' +
2857        '・적중 시 5만원 쿠폰 지급 \n' +
2858        '올미당 이벤트 \n' +
2859        '❗️참여 조건 \n' +
2860        '・경기당 1.5배당 이상 \n' +
2861        '・전부 미적중 시 \n' +
2862        '💵이벤트 보상 \n' +
2863        '・3폴더: 베팅액의 50% 쿠폰 지급 \n' +
2864        '・4폴더: 베팅액의 70% 쿠폰 지급 \n' +
2865        '・5폴더 이상 : 베팅액의 100% 쿠폰 지급 \n' +
2866        '최대 50만 까지 \n' +
2867        '한폴낙 이벤트 \n' +
2868        '❗️참여 조건 \n' +
2869        '・경기당 1.5배당 이상 \n' +
2870        '・1폴더만 미적중 시 \n' +
2871        '💵이벤트 보상 \n' +
2872        '・5폴더 중 1폴더 미적중 → 베팅액의 20% 쿠폰 지급 \n' +
2873        '・7폴더 중 1폴더 미적중 → 베팅액의 40% 쿠폰 지급 \n' +
2874        '・10폴더 중 1폴더 미적중 → 베팅액의 100% 쿠폰 지급 \n' +
2875        '최대 50만 까지 \n' +
2876        '🌈 이벤트 참여 방법 \n' +
2877        '이벤트 조건을 충족하셨다면, \n' +
2878        '👉 베팅 내역 캡처 후 채널 이벤트 담당자에게 문의해주세요! \n' +
2879        '※ 지급 쿠폰은 스포츠 전용이며, BT1스포츠에서만 사용 가능합니다. \n',
2880      'promoImage': 'promo-banner-17'
2881    },
2882    {
2883      'promotionID': '18',
2884      'promotionTitle': '생일 축하 이벤트',
2885      'promotionDesc': '▶대상자 - 솔카지노를 기존에 이용하고 계시는 회원분께서 \n' +
2886        '고객센터로 신분증 앞자리 또는 그에 준하는 공식 신분증으로 확인, 증명 시, \n' +
2887        '2만원 쿠폰을 지급해드립니다 \n' +
2888        '(입, 출금 내역이 있으며 사측 판단으로 최근 활동에 문제가 없는 회원에게 지급 해드립니다. ) \n' +
2889        '▶출금조건 - 롤링 3배 5배 까지 출금가능 (초과금액은 회수처리 후에 출금처리 됩니다) \n' +
2890        '▶쿠폰사용법 - 자주묻는 질문 클릭 후 "솔카지노 쿠폰 규정 안내" 를 클릭하셔서 참고해주시기 바랍니다. \n' +
2891        '더 궁금하신 사항 및 불편하신 사항은 고객센터로 문의 주시기 바랍니다 \n' +
2892        '텔레그램: sola114 \n' +
2893        '텔레그램 친구추가 링크 : https://t.me/sola114 \n' +
2894        '앞으로도 더욱 노력하는 솔카지노 운영진이 되겠습니다. \n',
2895      'promoImage': 'promo-banner-18'
2896    }
2897  ];
2898
2899  $rootScope.displayPromotion = function (promoID, language) {
2900    // console.log(promoID)
2901    if(!promoID) {
2902      return $rootScope.comingSoon();
2903    }
2904    $('.add_disableEvent').addClass('disable-event');
2905    ngDialog.open({
2906      template: 'popup/promotion.php',
2907      controller: '',
2908      className: 'ngdialog-theme-default ngdialog-promotion',
2909      scope: $scope,
2910      preCloseCallback:function(){
2911        $('.add_disableEvent').removeClass('disable-event');
2912      },
2913      data: {
2914        id: promoID
2915      }
2916    });
2917  };
2918});
2919
2920
2921app.controller('MovieController2', function ($rootScope, $scope, $http, $cookies) {
2922  $scope.notTodayVideo2 = function () {
2923    var expireDate = new Date();
2924    expireDate.setDate(expireDate.getDate() + 1);
2925    $cookies.put('notTodayVideo2', 'true', {'expires': expireDate});
2926    $scope.closeThisDialog();
2927  };
2928
2929  $scope.notTodayVideo3 = function () {
2930    var expireDate = new Date();
2931    expireDate.setDate(expireDate.getDate() + 1);
2932    $cookies.put('notTodayVideo3', 'true', {'expires': expireDate});
2933    $scope.closeThisDialog();
2934  };
2935});
2936
2937app.controller("TransactionPasswordController", function ($scope, $http, SweetAlert, ngDialog) {
2938  $scope.transpwForm = {};
2939  $scope.isProcessing = false;
2940  $scope.processForm = function () {
2941    if (!$scope.isProcessing) {
2942      $scope.isProcessing = true;
2943      var url = "/api/player/UpdateTransactionPW";
2944      $http({
2945        method: 'POST',
2946        url: url,
2947        data: $.param($scope.transpwForm), // pass in data as strings
2948        headers: {
2949          'Content-Type': 'application/x-www-form-urlencoded'
2950        } // set the headers so angular passing info as form data (not request payload)
2951      }).success(function (data) {
2952        if (data.result == 1) {
2953          if (bowser.msie && bowser.version <= 8) {
2954            alert(data.message);
2955          } else {
2956            SweetAlert.swal(data.message, data.message1, "success");
2957          }
2958          ngDialog.close();
2959        } else {
2960          if (bowser.msie && bowser.version <= 8) {
2961            alert(data.message);
2962          } else {
2963            SweetAlert.swal(data.message, "다시 시도해보세요", "error");
2964          }
2965        }
2966      }).error(function (data, status) {
2967        console.error('Repos error', status, data);
2968      })["finally"](function () {
2969        $scope.isProcessing = false;
2970      });
2971    }
2972  };
2973});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.