/* https://github.com/peledies/google-places */ (function($) { var namespace = 'googlePlaces'; $.googlePlaces = function(element, options) { var defaults = { placeId: 'ChIJ5c6eMQWJ44kR8ILAoBjDIjw' // placeId provided by google api documentation , render: ['reviews'] , min_rating: 0 , max_rows: 0 , map_plug_id: 'map-plug' , rotateTime: false , shorten_names: true , schema:{ displayElement: '#schema' , type: 'Store' , beforeText: 'Google Users Have Rated' , middleText: 'based on' , afterText: 'ratings and reviews' , image: null , priceRange: null } , address:{ displayElement: "#google-address" } , phone:{ displayElement: "#google-phone" } , staticMap:{ displayElement: "#google-static-map" , width: 512 , height: 512 , zoom: 17 , type: "roadmap" } , hours:{ displayElement: "#google-hours" } }; var plugin = this; plugin.settings = {} var $element = $(element), element = element; plugin.init = function() { plugin.settings = $.extend({}, defaults, options); plugin.settings.schema = $.extend({}, defaults.schema, options.schema); $element.html("
"); // create a plug for google to load data into initialize_place(function(place){ plugin.place_data = place; // Trigger event before render $element.trigger('beforeRender.' + namespace); if(plugin.settings.render.indexOf('rating') > -1){ renderRating(plugin.place_data.rating); } // render specified sections if(plugin.settings.render.indexOf('reviews') > -1){ renderReviews(plugin.place_data.reviews); if(!!plugin.settings.rotateTime) { initRotation(); } } if(plugin.settings.render.indexOf('address') > -1){ renderAddress( capture_element(plugin.settings.address.displayElement) , plugin.place_data.adr_address ); } if(plugin.settings.render.indexOf('phone') > -1){ renderPhone( capture_element(plugin.settings.phone.displayElement) , plugin.place_data.formatted_phone_number ); } if(plugin.settings.render.indexOf('staticMap') > -1){ renderStaticMap( capture_element(plugin.settings.staticMap.displayElement) , plugin.place_data.formatted_address ); } if(plugin.settings.render.indexOf('hours') > -1){ renderHours( capture_element(plugin.settings.hours.displayElement) , plugin.place_data.opening_hours ); } // render schema markup addSchemaMarkup( capture_element(plugin.settings.schema.displayElement) , plugin.place_data ); // Trigger event after render $element.trigger('afterRender.' + namespace); }); } var capture_element = function(element){ if(element instanceof jQuery){ return element; }else if(typeof element == 'string'){ try{ var ele = $(element); if( ele.length ){ return ele; }else{ throw 'Element [' + element + '] couldnt be found in the DOM. Skipping '+element+' markup generation.'; } }catch(e){ console.warn(e); } } } var initialize_place = function(c){ var map = new google.maps.Map(document.getElementById(plugin.settings.map_plug_id)); var request = { placeId: plugin.settings.placeId }; var service = new google.maps.places.PlacesService(map); service.getDetails(request, function(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { c(place); } }); } var sort_by_date = function(ray) { ray.sort(function(a, b){ var keyA = new Date(a.time), keyB = new Date(b.time); // Compare the 2 dates if(keyA < keyB) return -1; if(keyA > keyB) return 1; return 0; }); return ray; } var filter_minimum_rating = function(reviews){ for (var i = reviews.length -1; i >= 0; i--) { if(reviews[i].rating < plugin.settings.min_rating){ reviews.splice(i,1); } } return reviews; } var renderRating = function(rating){ var html = ""; var star = renderAverageStars(rating); html = "

"+star+"

"; $element.append(html); } var shorten_name = function(name) { if (name.split(" ").length > 1) { var xname = ""; xname = name.split(" "); return xname[0] + " " + xname[1][0] + "."; } } var renderReviews = function(reviews){ reviews = sort_by_date(reviews); reviews = filter_minimum_rating(reviews); var html = ""; var row_count = (plugin.settings.max_rows > 0)? plugin.settings.max_rows - 1 : reviews.length - 1; // make sure the row_count is not greater than available records row_count = (row_count > reviews.length-1)? reviews.length -1 : row_count; for (var i = row_count; i >= 0; i--) { var stars = renderStars(reviews[i].rating); var date = convertTime(reviews[i].time); if(plugin.settings.shorten_names == true) { var name = shorten_name(reviews[i].author_name); } else { var name = reviews[i].author_name + ", "; }; html = html+"
"+name+""+date+"
"+stars+"

"+reviews[i].text+"

" }; $element.append(html); } var renderHours = function(element, data){ if(element instanceof jQuery){ var html = ""; element.append(html); } } var renderStaticMap = function(element, data){ if(element instanceof jQuery){ var map = plugin.settings.staticMap; element.append( ""+ ""); } } var renderAddress = function(element, data){ if(element instanceof jQuery){ element.append(data); } } var renderPhone = function(element, data){ if(element instanceof jQuery){ element.append(data); } } var initRotation = function() { var $reviewEls = $element.children('.review-item'); var currentIdx = $reviewEls.length > 0 ? 0 : false; $reviewEls.hide(); if(currentIdx !== false) { $($reviewEls[currentIdx]).show(); setInterval(function(){ if(++currentIdx >= $reviewEls.length) { currentIdx = 0; } $reviewEls.hide(); $($reviewEls[currentIdx]).fadeIn('slow'); }, plugin.settings.rotateTime); } } var renderStars = function(rating){ var stars = "
"; return stars; } var renderAverageStars = function(rating){ var stars = "
"; return stars; } var convertTime = function(UNIX_timestamp){ var a = new Date(UNIX_timestamp * 1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var time = months[a.getMonth()] + ' ' + a.getDate() + ', ' + a.getFullYear(); return time; } var addSchemaMarkup = function(element, placeData) { if(element instanceof jQuery){ var schema = plugin.settings.schema; var schemaMarkup = ''; if(schema.image !== null) { schemaMarkup += generateSchemaItemMarkup('image', schema.image); } else { console.warn('Image is required for some schema types. Visit https://search.google.com/structured-data/testing-tool to test your schema output.'); } if(schema.priceRange !== null) { schemaMarkup += generateSchemaItemMarkup('priceRange', schema.priceRange); } schemaMarkup += generateSchemaItemMarkup('url', location.origin); schemaMarkup += generateSchemaItemMarkup('telephone', plugin.place_data.formatted_phone_number ); schemaMarkup += generateSchemaAddressMarkup(); schemaMarkup += generateSchemaRatingMarkup(placeData, schema); schemaMarkup += ''; element.append(schemaMarkup); } } var generateSchemaAddressMarkup = function() { var $address = $('
', { itemprop: "address" , itemscope: '' , itemtype: "http://schema.org/PostalAddress" }).css('display', 'none'); $address.append(plugin.place_data.adr_address); $address.children('.street-address').attr('itemprop', 'streetAddress'); $address.children('.locality').attr('itemprop', 'addressLocality'); $address.children('.region').attr('itemprop', 'addressRegion'); $address.children('.postal-code').attr('itemprop', 'postalCode'); $address.children('.country-name').attr('itemprop', 'addressCountry'); return $address[0].outerHTML; } var generateSchemaRatingMarkup = function(placeData, schema) { var reviews = placeData.reviews; var lastIndex = reviews.length - 1; var reviewPointTotal = 0; for (var i = lastIndex; i >= 0; i--) { reviewPointTotal += reviews[i].rating; }; var averageReview = reviewPointTotal / ( reviews.length ); return schema.beforeText + ' ' + placeData.name + ' ' + '' + '' + averageReview.toFixed(2) + '/5 ' + schema.middleText + ' ' + reviews.length + ' ' + schema.afterText + '' } var generateSchemaItemMarkup = function(name, value) { return '' } plugin.init(); } $.fn.googlePlaces = function(options) { return this.each(function() { if (undefined == $(this).data(namespace)) { var plugin = new $.googlePlaces(this, options); $(this).data(namespace, plugin); } }); } })(jQuery);

- plant based -

fresh and tasty

Vegan Soup Image

- FRESH & BIO -

MEAT IS A JOY

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Vegan Soup Image

since 2000

Vegan Soup Image

fresh dayly

Vegan Soup Image

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Vegan Soup Image

get in touch

- since 2000 -

Our Story

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

James HuddlestonJames Huddleston
19:26 14 Aug 24
If you're looking for a reliable and trustworthy HVAC or solar company, Comfortmax Energy Solutions is the way to go. From the knowledgeable sales team to the courteous technicians, they deliver an exceptional customer experience.
Landon GrwinskiLandon Grwinski
15:07 14 Aug 24
ComfortMax Energy Solutions is truly the best! I'm from Richmond, VA, but I had the pleasure of working with them on a job site in Massachusetts. Their exceptional service, expertise, and professionalism left a lasting impression. I wish I could bring them to VA - haha! But seriously, I highly recommend ComfortMax Energy Solutions to anyone in need of top-notch energy solutions.
Mylena FerreiraMylena Ferreira
12:51 14 Aug 24
I had the pleasure of working with Comfortmax Energy Solutions, and I couldn't be more impressed! Comfortmax Energy Solutions exceeded my expectations. Their technicians were knowledgeable, courteous, and ensured a seamless experience. The quality of their work and attention to detail are truly exceptional.I highly recommend Comfortmax Energy Solutions for any HVAC needs. Their commitment to excellence and customer satisfaction is genuine, and I look forward to a long-term partnership with them.
AmeliaAmelia
20:41 13 Aug 24
I had a fantastic experience with Comfortmax Energy Solutions. Marcelo was great at explaining all the rebate options for my HVAC system. The installation team was punctual and respectful. I’m thrilled with my new energy-efficient setup. Highly recommend!
Jonathan CheryJonathan Chery
02:49 20 Jun 24
I am writing this review to express my deep appreciation for ComfortMax. I hired them to install a mini split system using the MassSave program and I must say, their flexibility, communication, and overall process were nothing short of exceptional. They handled everything from start to finish with utmost professionalism and efficiency. They never hesitated to communicate with me about the next steps. I felt well-informed and included in the process due to their open and clear communication. That said, I highly recommend ComfortMax. I was not disappointed moving forward with them.
Adithya SharmaAdithya Sharma
18:46 13 Jun 24
I'm so impressed with the service I received from ComfortMax!
Mark MMark M
14:21 09 Jun 24
I can't say enough good things about ComfortMax! Highly Recommended!
Dry it quickDry it quick
00:49 08 Jun 24
ComfortMax is truly a top-notch HVAC and Solar services provider! From their friendly customer service to their expert technicians, I couldn't be more satisfied with the service I received. Highly recommend them!
Tiago MatuzinhoTiago Matuzinho
23:01 07 Jun 24
They were quick to respond to provided an realistic quote, and completed the job in a time. Super recommended !
David Feliciano Jr.David Feliciano Jr.
15:37 08 May 24
I couldn’t be happier with Comfortmax Energy Solutions! Their customer service and product knowledge exceeded my expectations. Unlike other companies, they made me feel comfortable and were never pushy. I highly recommend them to anyone in need of solar services.
Jonathan MadronaJonathan Madrona
01:00 08 May 24
I recently had the pleasure of experiencing the outstanding services provided by Comfortmax Energy Solutions. They were tasked with handling my HVAC work and also offered me the opportunity to transition to solar energy. I must say, I am thoroughly impressed with their professionalism, expertise, and commitment to customer satisfaction.
monalisa macedomonalisa macedo
20:11 01 May 24
Services: Installation, Install ACPositive: Professionalism, Punctuality, Quality, Responsiveness, ValueThe entire team were great.Marcelo helped us through the options and saved us money by letting us know that our existing HVAC unit was already provisioned to accept an A/C connection. The indoor coil just needed a few modifications that they could make in their shop, and then we could connect right into it with a brand new outdoor unit they had in stock.Installation was quick, clean, and professional.Highly recommend.
Depilar Hair RemovalDepilar Hair Removal
16:09 30 Apr 24
Thank you ComfortMax for all the work you did.For some years my company did not have an efficient air conditioning and heating system, and now we finally have a super effective system, bringing much more comfort to our customers.The price is amazing for the quality of the service.And what's more, I got a 10k rebate at the end of the service. I LOVED it and I recommend ComfortMax to everyone.
js_loader