Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var app = {
  2.     lookup: {
  3.         action: 'address',
  4.         city: '',
  5.         cityLookupUrl: '',
  6.         streetLookupUrl: '',
  7.         schoolLookupUrl: '',
  8.         dormitoryLookupUrl: '',
  9.         resultJSON: ''
  10.     },
  11.     testimonial: {
  12.         containerWidth: 0,
  13.         canSee: 0,
  14.         length: 0,
  15.         width: 0,
  16.         index: 0
  17.     },
  18.     tmpl:{
  19.         loading: '<div class="result-item loading">'+
  20.                     '<p class="name">&nbsp;</p><p class="hours">&nbsp;</p>'+
  21.                     '<div class="details"><div class="description"><div class="restaurant-logo"></div><div class="txt"><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></div></div><div class="payment"><p>&nbsp;</p><span class="order"></span></div></div>'+
  22.                     '<div class="opinion"><div class="stars"><ul><li></li><li></li><li></li><li></li><li></li></ul></div></div>'+
  23.                 '</div>',
  24.         default: '<div id="result-${index}" class="{{if isActive}}result-item{{else}}result-item off{{/if}}" onclick="app.showDetails(${index});" onmouseenter="app.showMarker(${index});">'+
  25.                     '<p class="name"><span>${index}.</span><strong>${name}</strong></p>'+
  26.                     '<p class="hours">{{if hours}}{{if isActive}}<i class="fa fa-clock-o"></i> ${hours}{{else}}nieczynne{{/if}}{{/if}}</p>'+
  27.                     '<div class="opinion">'+
  28.                         '{{if opinionCount > 0 }}<ul class="stars">{{html app.printStars(opinionStars)}}</ul>{{/if}}'+
  29.                         '{{if opinionCount > 0 }}<a href="${link}">({{if opinionCount == 100}}ponad 100{{else}}${opinionCount}{{/if}} opinii)</a>{{else}}Brak oceny{{/if}}'+
  30.                     '</div>'+
  31.                     '<div class="details">'+
  32.                         '<div class="description">'+
  33.                             '<div class="restaurant-logo" style="background-image:url(${logo})"></div>'+
  34.                             '<div class="txt">'+
  35.                                 '<p><i class="fa fa-cutlery"></i> {{each category}}${$value}{{if $index < category.length - 1}}, {{/if}}{{/each}}</p>'+
  36.                                 '<p><i class="fa fa-map-marker"></i> Adres: ${address}</p>'+
  37.                                 //'<p><i class="fa fa-shopping-cart"></i> Min. wartość zamÄ‚Å‚wienia <strong>${minValue}</strong></p>'+
  38.                                 //'<p><i class="fa fa-car"></i> Koszt dostawy <strong>${deliveryCost}</strong></p>'+
  39.                             '</div>'+
  40.                         '</div>'+
  41.                         '<div class="payment">'+
  42.                             '<p><i class="fa fa-credit-card"></i> Online<i class="fa fa-money"></i> Gotówka</p>'+
  43.                             '<a href="http://maps.google.com/maps?q=${name}" target="_blank" class="go-map">Pokaż na mapie</a>'+
  44.                             '{{if discount}}<a href="{{if isActive}}${discountLink}{{else}}${link}{{/if}}" target="_blank" class="order discount"><span>Odbierz rabat</span> <span class="count">${discount}</span></a>'+
  45.                             '{{else}}<a href="{{if isActive && discountLink}}${discountLink}{{else}}${link}{{/if}}" target="_blank" class="order">Zamów <i class="fa fa-angle-right"></i></a>{{/if}}'+
  46.                         '</div>'+
  47.                     '</div>'+
  48.                 '</div>'
  49.     },
  50.     resultPlaces: [],
  51.     citiesToSearch: [],
  52.     init: function(param){
  53.         $('#cover').height(window.innerHeight);
  54.         $('#map').height(window.innerHeight);
  55.         app.citiesToSearch = param.citiesToSearch;
  56.         app.lookup = $.extend(app.lookup, param);
  57.         app.bindEvents();
  58.     },
  59.     bindEvents: function(){
  60.         window.onload = app.loaded;
  61.         window.onscroll = app.windowScroll;
  62.  
  63.         app.slider();
  64.  
  65.         $('#newsletter-form').submit(function(e){
  66.             e.preventDefault();
  67.             if(newsletterForm.errors.length) return false;
  68.             $(this).ajaxSubmit({
  69.                 success: function(responseText, statusText, xhr, $form){
  70.                     $('#newsletter-form').parent().addClass('off');
  71.                     $('.congratulations').addClass('on');
  72.                 }
  73.             });
  74.             return false;
  75.         });
  76.  
  77.         $('input[type=checkbox][name=tag]:not(.all)').click(app.updateChecked);
  78.         $('input.all').click(app.allCheckCat);
  79.  
  80.         $('input[type=checkbox].newsletter-check').click(app.updateCheckedNewsletter);
  81.  
  82.         $('.main-nav a, .mobile-nav a').click(function(e){
  83.             var href = $(this).attr('href');
  84.             if(href.slice(0,1) == '#'){
  85.                 e.preventDefault();
  86.                 var offsetTop = $(href).position().top;
  87.                 offsetTop = href == '#app' ? offsetTop - 110 : offsetTop;
  88.                 $('body,html').animate({ scrollTop: offsetTop }, 'slow');
  89.                 return false;
  90.             }
  91.         });
  92.        
  93.         $('#select-search .value').click(app.selectSearchOpen);
  94.         $('#select-search .value').blur(function(){
  95.             //$('#select-search').removeClass('on');
  96.         });
  97.  
  98.         $('*[data-error]').each(function(i,elem){
  99.             var errorMessage = $(elem).attr('data-error');
  100.             var html = '<span class="error">'+errorMessage+'</span>';
  101.             $(html).insertAfter($(elem));
  102.         });
  103.  
  104.         $('#autocomplete-city').autocomplete({
  105.             //serviceUrl: app.lookup.cityLookupUrl,
  106.             lookup: app.citiesToSearch,
  107.             lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
  108.                 return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
  109.             },
  110.             onSelect: function (suggestion) {
  111.                 app.lookup.city = suggestion.data;
  112.             },
  113.             onSearchComplete: function(){ $(this).removeClass('working'); },
  114.             autoSelectFirst: true,
  115.             maxHeight: 250
  116.             //appendTo: $('.search-engine'),
  117.         });
  118.  
  119.         $('#autocomplete-street').autocomplete({
  120.             serviceUrl: app.lookup.streetLookupUrl,
  121.             lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
  122.                 return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
  123.             },
  124.             onSearchStart: function(query){
  125.                 $(this).addClass('working');
  126.                 $(this).autocomplete('setOptions', {
  127.                     ajaxSettings: {
  128.                         type: 'POST',
  129.                         data: {
  130.                             'city': app.lookup.city,
  131.                             'action': app.lookup.action,
  132.                             'query': query.query,
  133.                             'data': query.data
  134.                         }
  135.                     }
  136.                 });
  137.             },
  138.             onSelect: function (suggestion) {
  139.                 $('#street-id').val(suggestion.data);
  140.             },
  141.             onSearchComplete: function(){ $(this).removeClass('working'); },
  142.             autoSelectFirst: true,
  143.             maxHeight: 250
  144.         });
  145.  
  146.         $('#autocomplete-school').autocomplete({
  147.             serviceUrl: app.lookup.schoolLookupUrl,
  148.             lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
  149.                 return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
  150.             },
  151.             onSearchStart: function(query){
  152.                 $(this).addClass('working');
  153.                 $(this).autocomplete('setOptions', {
  154.                     ajaxSettings: {
  155.                         type: 'POST',
  156.                         data: {
  157.                             'city': app.lookup.city,
  158.                             'action': app.lookup.action,
  159.                             'query': query.query,
  160.                             'data': query.data
  161.                         }
  162.                     }
  163.                 });
  164.             },
  165.             onSelect: function (suggestion) {
  166.                 $('#object-id').val(suggestion.data);
  167.             },
  168.             onSearchComplete: function(){ $(this).removeClass('working'); },
  169.             autoSelectFirst: true,
  170.             maxHeight: 250
  171.         });
  172.  
  173.         $('#autocomplete-dormitory').autocomplete({
  174.             serviceUrl: app.lookup.dormitoryLookupUrl,
  175.             lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
  176.                 return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
  177.             },
  178.             onSearchStart: function(query){
  179.                 $(this).addClass('working');
  180.                 $(this).autocomplete('setOptions', {
  181.                     ajaxSettings: {
  182.                         type: 'POST',
  183.                         data: {
  184.                             'city': app.lookup.city,
  185.                             'action': app.lookup.action,
  186.                             'query': query.query,
  187.                             'data': query.data
  188.                         }
  189.                     }
  190.                 });
  191.             },
  192.             onSelect: function (suggestion) {
  193.                 $('#object-id').val(suggestion.data);
  194.             },
  195.             onSearchComplete: function(){ $(this).removeClass('working'); },
  196.             autoSelectFirst: true,
  197.             maxHeight: 250
  198.         });
  199.     },
  200.     showDetails: function(id){
  201.         if(window.innerWidth > 768) gmap.showDetails(id);
  202.         //gmap.centerByMarker();
  203.     },
  204.     showMarker: function(id){
  205.         if(window.innerWidth > 768) gmap.showMarker(id);
  206.     },
  207.     printResults: function(places,loading){
  208.         var resultActiveObj = [];
  209.         var resultInactiveObj = [];
  210.  
  211.         $.each(places,function(i,place){
  212.             if(loading) $.tmpl(app.tmpl.loading, {}).appendTo('#results');
  213.             if(place.isActive) resultActiveObj.push(place);
  214.             else resultInactiveObj.push(place);
  215.         });
  216.  
  217.         var resultObj = $.merge(resultActiveObj,resultInactiveObj);
  218.         $.each(resultObj, function(i,obj){ obj.index = (i+1); });
  219.         $.tmpl(app.tmpl.default, resultObj).appendTo('#results');
  220.  
  221.         var firstInactive = false;
  222.         $.each(resultObj, function(i,obj){
  223.             if(window.innerWidth > 768) gmap.addMarker(obj);
  224.             //if(i == 0 && loading) app.showDetails(1);
  225.             if(!obj.isActive && !firstInactive){
  226.                 firstInactive = true;
  227.                 $('<h3 class="closed">Nieczynne:</h3>').insertBefore('.result-item:eq('+i+')');
  228.             }
  229.  
  230.             if(loading){
  231.                 setTimeout(function(){
  232.                     $('.result-item:not(.loading):eq('+i+')').insertBefore('.result-item.loading:eq(0)');
  233.                     $('.result-item:not(.loading):eq('+i+')').show();
  234.                     $('.result-item.loading:eq(0)').remove();
  235.                 },(i*150));
  236.             }else{
  237.                 $('.result-item:not(.loading):eq('+i+')').insertBefore('.result-item.loading:eq(0)');
  238.                 $('.result-item:not(.loading):eq('+i+')').show();
  239.             }
  240.         });
  241.     },
  242.     getResult: function(){
  243.         $.getJSON(app.lookup.resultJSON, function(data){
  244.             app.resultPlaces = data.places;
  245.             app.printResults(app.resultPlaces,true);
  246.         });
  247.     },
  248.     clearAllResult: function(){
  249.         $('#results').html('');
  250.         if(window.innerWidth > 768) gmap.clearAllMarkers();
  251.     },
  252.     sortByCat: function(arrCat){
  253.         var arrPlaces = [];
  254.  
  255.         $.each(app.resultPlaces,function(i,place){
  256.             for (var i = 0; i < place.category.length; i++) {
  257.                 var row;
  258.                 var category = app.replaceSpecialCharacters(place.category[i]).toLowerCase();
  259.                 for (var j = 0; j < arrCat.length; j++) {
  260.                     row = app.replaceSpecialCharacters(arrCat[j].toLowerCase());
  261.                     if(category.match(row)){
  262.                         arrPlaces.push(place);
  263.                         return;
  264.                     }
  265.                 };
  266.             };
  267.         });
  268.  
  269.         app.clearAllResult();
  270.         app.printResults(arrPlaces,false);
  271.     },
  272.     loaded: function(){
  273.         if($('.testimonial').length){
  274.             app.testimonial.containerWidth = $('.testimonials-container').width();
  275.             app.testimonial.length = $('.testimonial').length;
  276.             app.testimonial.width = $('.testimonial').outerWidth() + 30;
  277.             app.testimonial.canSee = Math.floor($('.testimonials-container').width()/app.testimonial.width);
  278.             app.testimonial.canSee = app.testimonial.canSee < 1 ? 1 : app.testimonial.canSee;
  279.         }
  280.  
  281.         if(window.innerWidth > 768){
  282.             if($('#gmap').length){
  283.                 gmap.init({ elem: 'gmap' });
  284.                 gmap.map.panBy(-300,0);
  285.             }
  286.  
  287.             if(app.lookup.userPosition) gmap.searchPlace(app.lookup.userPosition);
  288.         }
  289.  
  290.         if(app.lookup.resultJSON) app.getResult();
  291.     },
  292.     allCheckCat: function(){
  293.         var selectItem = [];
  294.         $('input[type=checkbox]').each(function(i,input){
  295.             $(input).prop('checked',true);
  296.             $(input).parent().addClass('on');
  297.             selectItem.push($(input).val());
  298.         });
  299.  
  300.         app.sortByCat(selectItem);
  301.     },
  302.     updateChecked: function(){
  303.         var selectItem = [];
  304.         var allCheckbox = $('input[type=checkbox]:not(.all)').length;
  305.         var allCheckedCheckbox = $('input[type=checkbox]:checked:not(.all)').length;
  306.  
  307.         if(allCheckbox == allCheckedCheckbox){
  308.             $('input.all').parent().addClass('on');
  309.         }else if(allCheckedCheckbox == 0){
  310.             app.allCheckCat();
  311.         }else{
  312.             $('input.all').parent().removeClass('on');
  313.         }
  314.  
  315.         $('input[type=checkbox]:not(.all)').each(function(i,input){
  316.             $(input).parent().removeClass('on');
  317.             if($(input).is(':checked')){
  318.                 $(input).parent().addClass('on');
  319.                 selectItem.push($(input).val());
  320.             }
  321.         });
  322.  
  323.         app.sortByCat(selectItem);
  324.     },
  325.     updateCheckedNewsletter: function(){
  326.         if($('input[type=checkbox].newsletter-check').is(':checked')){
  327.             $(this).parent().addClass('on');
  328.         }else{
  329.             $(this).parent().removeClass('on');
  330.         }
  331.     },
  332.     closeAddPlace: function(){
  333.         $('.slide').removeClass('on');
  334.         $('.slide').addClass('off');
  335.         //$('body.map').css('margin-bottom','-375px');
  336.     },
  337.     openAddPlace: function(){
  338.         if($('.slide').is('.on')){
  339.             app.closeAddPlace();
  340.         }else{
  341.             //$('body.map').css('margin-bottom','0');
  342.             $('.slide').removeClass('off');
  343.             $('.slide').addClass('on');
  344.         }  
  345.     },
  346.     selectSearchOpen: function(e){
  347.         e.preventDefault();
  348.         $('.autocomplete-suggestions').hide();
  349.         $('#select-search li').unbind('click');
  350.         if($('#select-search').is('.on')){
  351.             $('#select-search').removeClass('on');
  352.         }else{
  353.             $('#select-search').addClass('on');
  354.             $('#select-search li').bind('click',app.selectSearchChoose);
  355.         }
  356.         return false;
  357.     },
  358.     selectSearchChoose: function(e){
  359.         var value = $(e.target).attr('data-value');
  360.         var text = $(e.target).text();
  361.  
  362.         if (value == 'address') {
  363.             $('input[name="object-id"]').val('');
  364.             $('input[name="school"]').val('');
  365.             $('input[name="dormitory"]').val('');
  366.         } else if (value == 'school') {
  367.             $('input[name="street"]').val('');
  368.             $('input[name="street-id"]').val('');
  369.             $('input[name="dormitory"]').val('');
  370.         } else if (value == 'dormitory') {
  371.             $('input[name="street"]').val('');
  372.             $('input[name="street-id"]').val('');
  373.             $('input[name="school"]').val('');
  374.         }
  375.  
  376.         app.lookup.action = value;
  377.         $('#select-search').removeClass('on');
  378.         $('#select-search .value').text(text);
  379.         $('#select-search-value').val(value);
  380.         $('fieldset.on [required]').removeAttr('required');
  381.         $('fieldset.on').removeClass('on');
  382.         $('#search-'+value).addClass('on');
  383.         $('#search-'+value+' input:not([name=house])').attr('required','');
  384.         $('label.error').removeClass('error');
  385.         $('#select-search li').unbind('click');
  386.     },
  387.     printStars: function(count){
  388.         var stars = '';
  389.         for (var i = 0; i < 5; i++) {
  390.             if(i < count) stars += '<li class="on"></li>';
  391.             else stars += '<li></li>';
  392.         };
  393.         return stars;
  394.     },
  395.     testimonialNext: function(){
  396.         app.testimonial.index ++;
  397.         app.testimonial.index = app.testimonial.index >= (app.testimonial.length - app.testimonial.canSee + 1) ? 0 : app.testimonial.index;
  398.         app.testimonialGoTo();
  399.     },
  400.     testimonialPrev: function(){
  401.         app.testimonial.index --;
  402.         app.testimonial.index = app.testimonial.index < 0 ? (app.testimonial.length - app.testimonial.canSee) : app.testimonial.index;
  403.         app.testimonialGoTo();
  404.     },
  405.     testimonialGoTo: function(){
  406.         var offset = app.testimonial.index * -app.testimonial.width;
  407.  
  408.         $('.testimonial-slide').css({
  409.             '-webkit-transform': 'translate3d('+offset+'px, 0, 0)',
  410.             '-moz-transform': 'translate3d('+offset+'px, 0, 0)',
  411.             '-ms-transform': 'translate3d('+offset+'px, 0, 0)',
  412.             '-o-transform': 'translate3d('+offset+'px, 0, 0)',
  413.             'transform': 'translate3d('+offset+'px, 0, 0)'
  414.         });
  415.     },
  416.     scrollMore: function(){
  417.         $('body,html').animate({ scrollTop: window.innerHeight },'slow');
  418.     },
  419.     windowScroll: function(){
  420.         if($('.slide').is('.on') && $(document).scrollTop() >= $('#add-place').outerHeight()){
  421.             $('.slide').removeClass('on');
  422.             $('.slide').removeClass('off');
  423.             //$('body.map').css('margin-bottom','-375px');
  424.             $(document).scrollTop(0);
  425.         }
  426.  
  427.         if($(document).scrollTop()>0) $('.gotop').show();
  428.         else $('.gotop').hide();
  429.     },
  430.     replaceSpecialCharacters: function(input){
  431.         var a = ['ą','ć','ę','ł','ń','Ä‚Å‚','ś','Ĺş','Ĺź',' '];
  432.         var b = ['a','c','e','l','n','o','s','z','z','-'];
  433.  
  434.         var result = input;
  435.  
  436.         for (var i = 0; i < a.length; i++) {
  437.             result = result.replace(new RegExp(a[i], 'g'), b[i]);
  438.         };
  439.  
  440.         return result;
  441.     },
  442.     goTop: function(){
  443.         $('body,html').animate({ scrollTop: 0 }, 'slow');
  444.     },
  445.     showMobileMenu: function(){
  446.         $('.mobile-nav').toggleClass('on');
  447.     },
  448.     showMobileSearch: function(){
  449.         $('.search').toggleClass('on');
  450.     },
  451.     showHideAside: function(){
  452.         $('#search-result').toggleClass('off');
  453.         $('#search-result .content').scrollTop(0);
  454.         if($('#search-result').is('.off')){
  455.             gmap.map.panBy(300,0);
  456.         }else{
  457.             gmap.map.panBy(-300,0);
  458.         }
  459.     },
  460.     slider: function(){
  461.         app.currentSlide = 1;
  462.         app.sliderLength = $('.iphone ul.slider li').length;
  463.         app.sliderIntervalId = setInterval(function(){
  464.             $('.iphone ul.slider li img').hide();
  465.             $('.iphone ul.nav li.on').removeClass('on');
  466.             $('.iphone ul.nav li').eq(app.currentSlide).addClass('on');
  467.             $('.iphone ul.slider li img').eq(app.currentSlide).show();
  468.             app.currentSlide++;
  469.             if (app.currentSlide > app.sliderLength-1) {
  470.                 app.currentSlide = 0;
  471.             }
  472.         }, 2500);
  473.         $('.iphone ul.nav li').on('click', function(){
  474.             clearInterval(app.sliderIntervalId);
  475.             app.currentSlide = $(this).index();
  476.             $('.iphone ul.slider li img').hide();
  477.             $('.iphone ul.nav li.on').removeClass('on');
  478.             $('.iphone ul.nav li').eq(app.currentSlide).addClass('on');
  479.             $('.iphone ul.slider li img').eq(app.currentSlide).show();
  480.             app.sliderIntervalId = setInterval(function(){
  481.                 $('.iphone ul.slider li img').hide();
  482.                 $('.iphone ul.nav li.on').removeClass('on');
  483.                 $('.iphone ul.nav li').eq(app.currentSlide).addClass('on');
  484.                 $('.iphone ul.slider li img').eq(app.currentSlide).show();
  485.                 app.currentSlide++;
  486.                 if (app.currentSlide > app.sliderLength-1) {
  487.                     app.currentSlide = 0;
  488.                 }
  489.             }, 2500);
  490.         });
  491.     }
  492. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement