/* טופס התרומה · tovtorah.org/donate/ · גרסה 8 (17/10/2026) גרסה 8: עיצוב חדש של הדף. סכום ברירת מחדל 180 כשאין סכום מהכתובת, הסכום מופיע גם על כפתור התרומה, הסכום הכולל מהבהב קלות בכל שינוי, ובדף התודה מוסתרת גם כותרת הטופס. גרסה 5: הסכום והכוונה נשארים מול העיניים. במחשב תיבת הסיכום בעמודה צדדית נדבקת, ובנייד פס תחתון עם הסכום, הכוונה וכפתור לתשלום. הערות בסגנון בלוק בלבד, ובלי שני תווי וגם או שני תווי או, כי וורדפרס משבש אותם. כוונת התרומה נבחרת מקבוצות, והקרן מפנה כל תרומה לאן שהכי צריך. שותפות בזכות הלימוד: שעה בכל סכום, ויום, שבוע, חודש או שנה ממלאים סכום. מעשר כספים הוא סימון נפרד ולא כוונה. purpose=maaser מהכתובת = לאן שהכי צריך + סימון מעשר. ההקדשה והפרטים הנוספים עוברים ל-PayPal בשדות האפשרויות, והאתר אינו שומר דבר. קורא amount, purpose, src מהכתובת. מפתחות תחום ישנים נקראים ככוונה כללית. */ (function(){ var F = document.getElementById('ttDonForm'); if(!F){ return; } if(F.getAttribute('data-ready') === '8'){ return; } F.setAttribute('data-ready', '8'); var PUR = { general:'לאן שהכי צריך', beitmidrash:'חיזוק בית המדרש', learning:'תמיכה בלימוד התורה', bochurim:'עזרה לבחורים', meals:'הזנת בחורים בכבוד', hour:'זכות שעת לימוד', yzday:'יששכר וזבולון, לימוד של יום', yzweek:'יששכר וזבולון, לימוד של שבוע', yz:'יששכר וזבולון, לימוד של חודש', yzyear:'יששכר וזבולון, לימוד של שנה' }; var DESC = { general:'הקרן מפנה את התרומה לאן שהצורך גדול ביותר באותה עת.', beitmidrash:'חיזוק בית המדרש ושל הלומדים בו.', learning:'תמיכה בלומדי התורה, כדי שיוכלו להמשיך לשבת וללמוד.', bochurim:'עזרה לבחורי הישיבה במה שחסר להם.', meals:'ארוחות לבחורים ממשפחות שאין ביכולתן, בדרך שאינה מביישת אותם.', hour:'שותפות בזכות שעות הלימוד של הבחורים בבית המדרש, בכל סכום.', yzday:'שותפות בלימוד של יום שלם, בדרך יששכר וזבולון.', yzweek:'שותפות בלימוד של שבוע שלם, בדרך יששכר וזבולון.', yz:'שותפות בלימוד של חודש שלם, בדרך יששכר וזבולון.', yzyear:'שותפות בלימוד של שנה שלמה, בדרך יששכר וזבולון.' }; var YZ = { yzday:100, yzweek:700, yz:3000, yzyear:36000 }; var MAASER_TAG = 'מכספי מעשר'; var DED = { none:'', iluy:'לעילוי נשמת', refua:'לרפואה שלמה', zchut:'לזכות' }; var NAME_LBL = { iluy:'שם הנפטר או הנפטרת', refua:'שם החולה', zchut:'שם' }; var PARENT_LBL = { iluy:'שם האב', refua:'שם האם', zchut:'שם האב או האם' }; var PREFIX = 'תרומה - טוב תורה - '; var MAXAMT = 100000; var RET = 'https://tovtorah.org/donate/?thanks=1'; var q = new URLSearchParams(location.search); function el(id){ return document.getElementById(id); } var amtIn = el('ttDonAmt'), out = el('ttDonOut'), fOut = el('ttDonFieldOut'), err = el('ttDonErr'); var desc = el('ttDonDesc'), dedBox = el('ttDonDedBox'), dedRow = el('ttDonDedRow'), dedOut = el('ttDonDedOut'); var nameIn = el('ttDonName'), parentIn = el('ttDonParent'), dateIn = el('ttDonDate'), dateWrap = el('ttDonDateWrap'); var nameLbl = el('ttDonNameLbl'), parentLbl = el('ttDonParentLbl'), notes = el('ttDonNotes'); var pre = el('ttDonPre'), thanks = el('ttDonThanks'), mBox = el('ttDonMaaser'); var dock = el('ttDonDock'), dAmt = el('ttDonDockAmt'), dWhat = el('ttDonDockWhat'); var goAmt = el('ttDonGoAmt'), lastN = null, DEF = 180; function hid(n){ return F.querySelector('input[name="' + n + '"]'); } var hName = hid('item_name'), hNum = hid('item_number'), hCustom = hid('custom'), hRet = hid('return'); var on0 = hid('on0'), os0 = hid('os0'), on1 = hid('on1'), os1 = hid('os1'); if(!amtIn){ return; } var state = { field:'general', maaser:false, ded:'none', gen:'בן' }; function ils(n){ return '₪' + n.toLocaleString('en-US'); } function clean(v){ var s = String(v === null ? '' : v).replace(/[^0-9.]/g, ''); var n = Math.round(parseFloat(s)); if(isNaN(n)){ return 0; } if(n < 0){ return 0; } if(n > MAXAMT){ return MAXAMT; } return n; } function txt(node, max){ if(!node){ return ''; } var s = String(node.value).replace(/\s+/g, ' ').replace(/^\s+/, '').replace(/\s+$/, ''); if(s.length > max){ s = s.slice(0, max); } return s; } function cut(s, max){ if(s.length > max){ return s.slice(0, max); } return s; } function setOn(sel, node){ var a = F.querySelectorAll(sel), i; for(i = 0; i < a.length; i++){ a[i].classList.remove('is-on'); a[i].setAttribute('aria-pressed', 'false'); } if(node){ node.classList.add('is-on'); node.setAttribute('aria-pressed', 'true'); } } function chipFor(sel, attr, val){ var a = F.querySelectorAll(sel), i; for(i = 0; i < a.length; i++){ if(a[i].getAttribute(attr) === String(val)){ return a[i]; } } return null; } function setOpt(nm, vl, val){ if(!nm){ return; } if(val){ nm.disabled = false; vl.disabled = false; vl.value = val; } else { nm.disabled = true; vl.disabled = true; vl.value = ''; } } /* המפתח שנרשם עם התרומה ונשלח למדידה */ function key(){ if(!state.maaser){ return state.field; } if(state.field === 'general'){ return 'maaser'; } return state.field + '-maaser'; } function label(){ var s = PUR[state.field]; if(state.maaser){ s = s + ', ' + MAASER_TAG; } return s; } function dedText(){ if(state.ded === 'none'){ return ''; } var n = txt(nameIn, 60); if(!n){ return ''; } var s = DED[state.ded] + ' ' + n; var p = txt(parentIn, 60); if(p){ s = s + ' ' + state.gen + ' ' + p; } if(state.ded === 'iluy'){ var d = txt(dateIn, 40); if(d){ s = s + ', ' + d; } } return cut(s, 190); } /* הפס הצף מציג את אותו סכום ואותה כוונה כמו תיבת הסיכום */ function paintDock(n){ if(!dock){ return; } if(dAmt){ dAmt.textContent = ils(n); } var w = label(); if(state.ded !== 'none'){ w = w + ' · ' + DED[state.ded]; } if(dWhat){ dWhat.textContent = w; } } function paint(){ var n = clean(amtIn.value); if(out){ out.textContent = ils(n); } if(goAmt){ goAmt.textContent = n > 0 ? ils(n) : ''; } if(out){ if(lastN !== null){ if(n !== lastN){ out.classList.remove('is-pulse'); void out.offsetWidth; out.classList.add('is-pulse'); } } } lastN = n; setOn('.ttm-chip[data-amt]', chipFor('.ttm-chip[data-amt]', 'data-amt', n)); if(fOut){ fOut.textContent = label(); } if(desc){ desc.textContent = DESC[state.field]; } if(mBox){ mBox.checked = state.maaser; } if(hNum){ hNum.value = key(); } if(hName){ hName.value = cut(PREFIX + label(), 127); } var dt = dedText(); if(dedRow){ dedRow.hidden = dt === ''; } if(dedOut){ dedOut.textContent = dt; } paintDock(n); if(n > 0){ if(err){ err.hidden = true; } } } function pickField(k){ if(k === 'maaser'){ state.maaser = true; k = 'general'; } if(!PUR[k]){ return; } state.field = k; setOn('.ttm-chip[data-field]', chipFor('.ttm-chip[data-field]', 'data-field', k)); if(YZ[k]){ amtIn.value = String(YZ[k]); } paint(); } function pickDed(k){ if(!(k in DED)){ return; } state.ded = k; setOn('.ttm-chip[data-ded]', chipFor('.ttm-chip[data-ded]', 'data-ded', k)); if(dedBox){ dedBox.hidden = k === 'none'; } if(k !== 'none'){ if(nameLbl){ nameLbl.textContent = NAME_LBL[k]; } if(parentLbl){ parentLbl.textContent = PARENT_LBL[k] + ' (לא חובה)'; } if(dateWrap){ dateWrap.hidden = k !== 'iluy'; } } paint(); } function pickGen(g){ state.gen = g; setOn('.ttm-chip[data-gen]', chipFor('.ttm-chip[data-gen]', 'data-gen', g)); paint(); } var a = F.querySelectorAll('.ttm-chip[data-amt]'), i; for(i = 0; i < a.length; i++){ a[i].addEventListener('click', function(){ amtIn.value = this.getAttribute('data-amt'); paint(); }); } a = F.querySelectorAll('.ttm-chip[data-field]'); for(i = 0; i < a.length; i++){ a[i].addEventListener('click', function(){ pickField(this.getAttribute('data-field')); }); } a = F.querySelectorAll('.ttm-chip[data-ded]'); for(i = 0; i < a.length; i++){ a[i].addEventListener('click', function(){ pickDed(this.getAttribute('data-ded')); }); } a = F.querySelectorAll('.ttm-chip[data-gen]'); for(i = 0; i < a.length; i++){ a[i].addEventListener('click', function(){ pickGen(this.getAttribute('data-gen')); }); } if(mBox){ mBox.addEventListener('change', function(){ state.maaser = mBox.checked; paint(); }); } amtIn.addEventListener('input', paint); amtIn.addEventListener('change', paint); var live = [nameIn, parentIn, dateIn]; for(i = 0; i < live.length; i++){ if(live[i]){ live[i].addEventListener('input', paint); } } /* ---------- מילוי מהכתובת ---------- */ var src = String(q.get('src') === null ? '' : q.get('src')).toLowerCase().replace(/[^a-z0-9-]/g, '').slice(0, 40); if(!src){ src = 'donate'; } if(hCustom){ hCustom.value = src; } var filled = false; var pp = q.get('purpose'); if(pp){ filled = true; if(pp === 'maaser'){ state.maaser = true; state.field = 'general'; } else { if(PUR[pp]){ state.field = pp; } else { state.field = 'general'; } } } setOn('.ttm-chip[data-field]', chipFor('.ttm-chip[data-field]', 'data-field', state.field)); if(YZ[state.field]){ amtIn.value = String(YZ[state.field]); } var pa = clean(q.get('amount')); if(pa > 0){ amtIn.value = String(pa); filled = true; } if(!(clean(amtIn.value) > 0)){ amtIn.value = String(DEF); } if(q.get('det')){ filled = true; } setOn('.ttm-chip[data-ded]', chipFor('.ttm-chip[data-ded]', 'data-ded', 'none')); setOn('.ttm-chip[data-gen]', chipFor('.ttm-chip[data-gen]', 'data-gen', 'בן')); setOpt(on0, os0, ''); setOpt(on1, os1, ''); paint(); /* ---------- דף התודה, אחרי החזרה מ-PayPal ---------- PayPal מוסיף לכתובת שם, מייל וטלפון. הם נמחקים מהכתובת בראש העמוד, לפני כל מדידה (tt-tracking.php), ורק מספר האישור, הסטטוס והסכום עוברים לכאן ב-window.ttPayPal. */ function showThanks(){ if(!thanks){ return; } var pp = window.ttPayPal; if(!pp){ pp = { tx:q.get('tx'), st:q.get('st'), gross:q.get('mc_gross') }; } var n = clean(q.get('amt')); if(!(n > 0)){ n = clean(pp.gross); } var k = String(q.get('p') === null ? '' : q.get('p')).replace(/[^a-z-]/g, ''); var m = false; if(k === 'maaser'){ k = 'general'; m = true; } if(/-maaser$/.test(k)){ k = k.replace(/-maaser$/, ''); m = true; } if(!PUR[k]){ k = 'general'; } var what = PUR[k]; if(m){ what = what + ', ' + MAASER_TAG; } var aOut = el('ttThxAmt'), wOut = el('ttThxWhat'), sOut = el('ttThxState'); var rRow = el('ttThxRefRow'), rOut = el('ttThxRef'), dot = el('ttThxDot'); if(n > 0){ if(aOut){ aOut.textContent = ils(n); } } else { if(aOut){ aOut.hidden = true; } if(dot){ dot.hidden = true; } } if(wOut){ wOut.textContent = what; } var st = pp.st ? String(pp.st).toLowerCase() : ''; if(st === 'pending'){ if(sOut){ sOut.textContent = 'התרומה נקלטה ב-PayPal וממתינה לאישור'; } } var tx = pp.tx ? String(pp.tx).replace(/[^A-Za-z0-9]/g, '').slice(0, 24) : ''; if(tx.length > 7){ if(rOut){ rOut.textContent = tx; } if(rRow){ rRow.hidden = false; } } var hero = document.querySelector('.tt-hero--page'); if(hero){ hero.style.setProperty('display', 'none', 'important'); } F.style.setProperty('display', 'none', 'important'); if(pre){ pre.hidden = true; } var hs = document.querySelectorAll('[data-dn-thanks-hide]'), j; for(j = 0; j < hs.length; j++){ hs[j].style.setProperty('display', 'none', 'important'); } if(dock){ dock.style.setProperty('display', 'none', 'important'); } thanks.hidden = false; document.title = 'תודה על התרומה – טוב תורה'; window.scrollTo(0, 0); try { thanks.focus({ preventScroll:true }); } catch(e){} } if(q.get('thanks') === '1'){ showThanks(); filled = false; } if(filled){ if(pre){ pre.hidden = false; } } /* ---------- הפס הצף בנייד ובטאבלט ---------- מופיע כשהטופס על המסך ותיבת הסיכום עדיין לא, ונעלם בזמן הקלדה כדי לא לכסות שדה. כשהוא מוצג הוא תופס את מקום פס הפעולות התחתון של האתר, ולא נוסף מעליו. */ var resBox = F.querySelector('.ttm-result'); var mq = window.matchMedia ? window.matchMedia('(max-width: 1023px)') : null; var vis = { form:false, res:false, typing:false }; function typingIn(t){ if(!t){ return false; } if(!F.contains(t)){ return false; } if(t.tagName === 'TEXTAREA'){ return true; } if(t.tagName === 'INPUT'){ if(t.type !== 'checkbox'){ return true; } } return false; } function dockOn(){ if(!mq){ return false; } if(!mq.matches){ return false; } if(!vis.form){ return false; } if(vis.res){ return false; } if(vis.typing){ return false; } return true; } function showDock(){ if(!dock){ return; } var on = dockOn(); dock.classList.toggle('is-on', on); document.documentElement.classList.toggle('tt-dock-on', on); } if(dock){ if('IntersectionObserver' in window){ new IntersectionObserver(function(es){ vis.form = es[es.length - 1].isIntersecting; showDock(); }, { rootMargin: '0px 0px -30% 0px' }).observe(F); if(resBox){ new IntersectionObserver(function(es){ vis.res = es[es.length - 1].isIntersecting; showDock(); }, { rootMargin: '0px 0px -110px 0px' }).observe(resBox); } } F.addEventListener('focusin', function(e){ vis.typing = typingIn(e.target); showDock(); }); F.addEventListener('focusout', function(){ setTimeout(function(){ vis.typing = typingIn(document.activeElement); showDock(); }, 80); }); if(mq){ if(mq.addEventListener){ mq.addEventListener('change', showDock); } else { if(mq.addListener){ mq.addListener(showDock); } } } } F.addEventListener('submit', function(e){ var n = clean(amtIn.value); if(!(n > 0)){ e.preventDefault(); if(err){ err.hidden = false; } amtIn.focus(); return; } amtIn.value = String(n); paint(); setOpt(on0, os0, dedText()); setOpt(on1, os1, txt(notes, 190)); if(hRet){ hRet.value = RET + '&amt=' + n + '&p=' + key(); } }); })();