/** * Observe how the user enters content into the comment form in order to determine whether it's a bot or not. * * Note that no actual input is being saved here, only counts and timings between events. */ ( function() { // Passive event listeners are guaranteed to never call e.preventDefault(), // but they're not supported in all browsers. Use this feature detection // to determine whether they're available for use. var supportsPassive = false; try { var opts = Object.defineProperty( {}, 'passive', { get : function() { supportsPassive = true; } } ); window.addEventListener( 'testPassive', null, opts ); window.removeEventListener( 'testPassive', null, opts ); } catch ( e ) {} function init() { var input_begin = ''; var keydowns = {}; var lastKeyup = null; var lastKeydown = null; var keypresses = []; var modifierKeys = []; var correctionKeys = []; var lastMouseup = null; var lastMousedown = null; var mouseclicks = []; var mousemoveTimer = null; var lastMousemoveX = null; var lastMousemoveY = null; var mousemoveStart = null; var mousemoves = []; var touchmoveCountTimer = null; var touchmoveCount = 0; var lastTouchEnd = null; var lastTouchStart = null; var touchEvents = []; var scrollCountTimer = null; var scrollCount = 0; var correctionKeyCodes = [ 'Backspace', 'Delete', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', 'PageUp', 'PageDown' ]; var modifierKeyCodes = [ 'Shift', 'CapsLock' ]; var forms = document.querySelectorAll( 'form[method=post]' ); for ( var i = 0; i < forms.length; i++ ) { var form = forms[i]; var formAction = form.getAttribute( 'action' ); // Ignore forms that POST directly to other domains; these could be things like payment forms. if ( formAction ) { // Check that the form is posting to an external URL, not a path. if ( formAction.indexOf( 'http://' ) == 0 || formAction.indexOf( 'https://' ) == 0 ) { if ( formAction.indexOf( 'http://' + window.location.hostname + '/' ) != 0 && formAction.indexOf( 'https://' + window.location.hostname + '/' ) != 0 ) { continue; } } } form.addEventListener( 'submit', function () { var ak_bkp = prepare_timestamp_array_for_request( keypresses ); var ak_bmc = prepare_timestamp_array_for_request( mouseclicks ); var ak_bte = prepare_timestamp_array_for_request( touchEvents ); var ak_bmm = prepare_timestamp_array_for_request( mousemoves ); var input_fields = { // When did the user begin entering any input? 'bib': input_begin, // When was the form submitted? 'bfs': Date.now(), // How many keypresses did they make? 'bkpc': keypresses.length, // How quickly did they press a sample of keys, and how long between them? 'bkp': ak_bkp, // How quickly did they click the mouse, and how long between clicks? 'bmc': ak_bmc, // How many mouseclicks did they make? 'bmcc': mouseclicks.length, // When did they press modifier keys (like Shift or Capslock)? 'bmk': modifierKeys.join( ';' ), // When did they correct themselves? e.g., press Backspace, or use the arrow keys to move the cursor back 'bck': correctionKeys.join( ';' ), // How many times did they move the mouse? 'bmmc': mousemoves.length, // How many times did they move around using a touchscreen? 'btmc': touchmoveCount, // How many times did they scroll? 'bsc': scrollCount, // How quickly did they perform touch events, and how long between them? 'bte': ak_bte, // How many touch events were there? 'btec' : touchEvents.length, // How quickly did they move the mouse, and how long between moves? 'bmm' : ak_bmm }; var akismet_field_prefix = 'ak_'; if ( this.getElementsByClassName ) { // Check to see if we've used an alternate field name prefix. We store this as an attribute of the container around some of the Akismet fields. var possible_akismet_containers = this.getElementsByClassName( 'akismet-fields-container' ); for ( var containerIndex = 0; containerIndex < possible_akismet_containers.length; containerIndex++ ) { var container = possible_akismet_containers.item( containerIndex ); if ( container.getAttribute( 'data-prefix' ) ) { akismet_field_prefix = container.getAttribute( 'data-prefix' ); break; } } } for ( var field_name in input_fields ) { var field = document.createElement( 'input' ); field.setAttribute( 'type', 'hidden' ); field.setAttribute( 'name', akismet_field_prefix + field_name ); field.setAttribute( 'value', input_fields[ field_name ] ); this.appendChild( field ); } }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keydown', function ( e ) { // If you hold a key down, some browsers send multiple keydown events in a row. // Ignore any keydown events for a key that hasn't come back up yet. if ( e.key in keydowns ) { return; } var keydownTime = ( new Date() ).getTime(); keydowns[ e.key ] = [ keydownTime ]; if ( ! input_begin ) { input_begin = keydownTime; } // In some situations, we don't want to record an interval since the last keypress -- for example, // on the first keypress, or on a keypress after focus has changed to another element. Normally, // we want to record the time between the last keyup and this keydown. But if they press a // key while already pressing a key, we want to record the time between the two keydowns. var lastKeyEvent = Math.max( lastKeydown, lastKeyup ); if ( lastKeyEvent ) { keydowns[ e.key ].push( keydownTime - lastKeyEvent ); } lastKeydown = keydownTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keyup', function ( e ) { if ( ! ( e.key in keydowns ) ) { // This key was pressed before this script was loaded, or a mouseclick happened during the keypress, or... return; } var keyupTime = ( new Date() ).getTime(); if ( 'TEXTAREA' === e.target.nodeName || 'INPUT' === e.target.nodeName ) { if ( -1 !== modifierKeyCodes.indexOf( e.key ) ) { modifierKeys.push( keypresses.length - 1 ); } else if ( -1 !== correctionKeyCodes.indexOf( e.key ) ) { correctionKeys.push( keypresses.length - 1 ); } else { // ^ Don't record timings for keys like Shift or backspace, since they // typically get held down for longer than regular typing. var keydownTime = keydowns[ e.key ][0]; var keypress = []; // Keypress duration. keypress.push( keyupTime - keydownTime ); // Amount of time between this keypress and the previous keypress. if ( keydowns[ e.key ].length > 1 ) { keypress.push( keydowns[ e.key ][1] ); } keypresses.push( keypress ); } } delete keydowns[ e.key ]; lastKeyup = keyupTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusin", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusout", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); } document.addEventListener( 'mousedown', function ( e ) { lastMousedown = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mouseup', function ( e ) { if ( ! lastMousedown ) { // If the mousedown happened before this script was loaded, but the mouseup happened after... return; } var now = ( new Date() ).getTime(); var mouseclick = []; mouseclick.push( now - lastMousedown ); if ( lastMouseup ) { mouseclick.push( lastMousedown - lastMouseup ); } mouseclicks.push( mouseclick ); lastMouseup = now; // If the mouse has been clicked, don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mousemove', function ( e ) { if ( mousemoveTimer ) { clearTimeout( mousemoveTimer ); mousemoveTimer = null; } else { mousemoveStart = ( new Date() ).getTime(); lastMousemoveX = e.offsetX; lastMousemoveY = e.offsetY; } mousemoveTimer = setTimeout( function ( theEvent, originalMousemoveStart ) { var now = ( new Date() ).getTime() - 500; // To account for the timer delay. var mousemove = []; mousemove.push( now - originalMousemoveStart ); mousemove.push( Math.round( Math.sqrt( Math.pow( theEvent.offsetX - lastMousemoveX, 2 ) + Math.pow( theEvent.offsetY - lastMousemoveY, 2 ) ) ) ); if ( mousemove[1] > 0 ) { // If there was no measurable distance, then it wasn't really a move. mousemoves.push( mousemove ); } mousemoveStart = null; mousemoveTimer = null; }, 500, e, mousemoveStart ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchmove', function ( e ) { if ( touchmoveCountTimer ) { clearTimeout( touchmoveCountTimer ); } touchmoveCountTimer = setTimeout( function () { touchmoveCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchstart', function ( e ) { lastTouchStart = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchend', function ( e ) { if ( ! lastTouchStart ) { // If the touchstart happened before this script was loaded, but the touchend happened after... return; } var now = ( new Date() ).getTime(); var touchEvent = []; touchEvent.push( now - lastTouchStart ); if ( lastTouchEnd ) { touchEvent.push( lastTouchStart - lastTouchEnd ); } touchEvents.push( touchEvent ); lastTouchEnd = now; // Don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'scroll', function ( e ) { if ( scrollCountTimer ) { clearTimeout( scrollCountTimer ); } scrollCountTimer = setTimeout( function () { scrollCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); } /** * For the timestamp data that is collected, don't send more than `limit` data points in the request. * Choose a random slice and send those. */ function prepare_timestamp_array_for_request( a, limit ) { if ( ! limit ) { limit = 100; } var rv = ''; if ( a.length > 0 ) { var random_starting_point = Math.max( 0, Math.floor( Math.random() * a.length - limit ) ); for ( var i = 0; i < limit && i < a.length; i++ ) { rv += a[ random_starting_point + i ][0]; if ( a[ random_starting_point + i ].length >= 2 ) { rv += "," + a[ random_starting_point + i ][1]; } rv += ";"; } } return rv; } if ( document.readyState !== 'loading' ) { init(); } else { document.addEventListener( 'DOMContentLoaded', init ); } })(); Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh

Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh

Nhiều người ở xa đã tìm đến dịch vụ thuê người cúng giỗ và tảo mộ với giá từ vài trăm đến cả triệu đồng.

Dịch vụ chăm sóc khuôn viên phần mộ tốt nhất hiện nay

Bảng giá đất nghĩa trang Lạc Hồng Viên (Cập nhật 2021)

Từ trước đến nay, dịp Tết Thanh minh được coi là dịp lễ quan trọng, thiêng liêng. Đây là dịp để báo hiếu, tưởng nhớ ông bà, tổ tiên bằng cách đến thắp hương, dọn dẹp phần mộ của người thân .

Vào dịp này, các gia đình thường đến phần mộ của người thân, mỗi người một việc, người chuẩn bị đồ lễ, người cắm hoa, dọn dẹp quanh mộ, người chăm bón lại hàng cây xung quanh.

Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh - 1

Tết Thanh minh có ý nghĩa quan trọng về văn hóa và tinh thần của người Việt, ẩn chứa đạo lý uống nước nhớ nguồn của người Việt.

Tuy nhiên, đối với những người ở xa, do điều kiện khách quan nên họ không thể trở về bên phần mộ gia tiên, họ phải thuê người dọn dẹp, cúng giỗ thậm chí là tảo mộ. Từ đó, dịch vụ này bắt đầu nở rộ để phục vụ những gia đình có nhu cầu.

Chỉ cần click chuột, họ có thể chọn danh mục các sản phẩm đầy đủ cho một buổi cúng, từ hoa cúc, hoa sen, xôi chè, giò, trứng… đến bộ quần áo thần linh, vàng mã. Giá cả các sản phẩm này dao động từ 60.000 đồng đến gần 1 triệu đồng. Với các mâm cỗ mặn, chay có giá từ 600.000 – 900.000 đồng/mâm.

Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh - 2

Nhân viên nghĩa trang mang đồ cúng ra mộ khi gia chủ của người đã khuất yêu cầu mua đồ cúng qua mạng internet.

Người có nhu cầu chỉ cần truy cập vào website, chọn ngày giờ, nhập số lượng lễ vật cần đặt rồi xác nhận. Sau khi triển khai theo đúng yêu cầu, công ty này sẽ gửi ảnh, video cho khách hàng kiểm chứng. Thậm chí live trực tiếp từ phần mộ đến cho khách hàng có nhu cầu.

Anh Lê Thanh Tuấn, 45 tuổi (trú tại Cầu Giấy, Hà Nội) cho biết, gia đình anh có phần mộ gia tiên đặt tại nghĩa trang ở Hòa Bình, mọi năm cả gia đình thường lên phần mộ gia tiên vào mỗi dịp Tết Thanh minh. Năm nay do làm ăn xa không về được nên sử dụng dịch vụ cúng giỗ, tảo mộ online.

Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh - 3

Nhiều gia đình ở Hà Nội không chọn dịch vụ cúng giỗ, tảo mộ online mà họ lên tận nơi phần mộ gia tiên.

“Dịch vụ này không thể thay thế thờ cúng truyền thống nhưng tôi thường đi công tác xa nên bắt buộc phải dùng dịch vụ này để chăm sóc phần mộ của ông cha được chu đáo. Thậm chí ngày mùng 1, ngày rằm tôi cũng đặt riêng mâm cơm chay hay bó hoa tươi đặt lên phần mộ, nhân viên nghĩa trang mang tới và gửi lại hình ảnh hoặc video qua email cho tôi”, anh Tuấn chia sẻ.

Bà Nguyễn Thị Hường, 75 tuổi  (Dịch Vọng, Cầu Giấy) có phần mộ người thân ở một nghĩa trang cách Hà Nội gần 70km. Do tuổi cao, thời gian không cho phép nên bà sử dụng dịch vụ này. Có thể có mâm cỗ, hương hoa chu đáo cúng ở phần mộ người thân cách xa vài chục cây số.

“Tôi biết dịch vụ cúng giỗ online, dịch vụ này phù hợp với một số người nhưng nếu sau này tôi qua đời nếu các con làm việc hay công tác ở miền Bắc mà không lên thăm phần mộ thì tôi không thể chấp nhận được. Những ngày quan trọng, tôi vẫn muốn chúng có mặt ở phần mộ của tôi, tuy nhiên thỉnh thoảng chúng nhờ dịch vụ cúng giỗ, tảo mộ online tôi cũng thấy ấm áp phần nào”, bà Hương cho biết.

Người Việt chi cả triệu đồng thuê người tảo mộ dịp Tết Thanh minh - 4

Năm nay, thanh minh bắt đầu từ mùng 4/4 dương lịch và kéo dài trong khoảng nửa tháng.

Theo ông Trần Quang Thủy  – Phó Trưởng Ban Quản lý Công viên nghĩa trang Lạc Hồng Viên, vào những dịp đặc biệt như cuối năm, mùa Vu lan hay dịp Thanh minh, các dơn đặt hàng dich vụ cúng giỗ online tại đây tăng đáng kể, trung bình khoảng 30 – 40% so với dịp trong năm. Khách hàng tìm đến với dịch vụ này đa số đều là những người ở xa, làm việc ở tỉnh thành khác hoặc định cư ở nước ngoài.

Chia sẻ với PV, thầy Thích Trí Thịnh – Trụ trì chùa Kim Sơn Lạc Hồng (Hoà Bình) cho biết, những năm gần đây, dịch vụ cúng giỗ online đã bắt đầu nở rộ tại Việt Nam.

Đây là dịch vụ thay thân nhân chăm sóc, thực hiện trách nhiệm, bổn phận với những người đã khuất trong điều kiện họ không có điều kiện trực tiếp đến tận nơi được. Trong trường hợp bắt buộc phải mang tâm mình gửi gắm qua dịch vụ này, thì hãy một lòng hướng về tổ tiên bằng tất cả sự chân thành.

Theo: https://dichvutangle.vn

Xem thêm: Cập nhật bảng giá công viên nghĩa trang Vĩnh Hằng mới nhất (2021)

MR PHƯƠNG 0965.435.666