Files
emaillion/script.js
T

301 lines
8.6 KiB
JavaScript

(function() {
'use strict';
// Business configuration - prices only, payment URLs are generated dynamically
var BUSINESSES = {
sarit: {
name: 'שרית הספרית',
lang: 'he',
plans: {
code: {
price: '₪1,490',
title: 'קוד האתר בלבד',
package: 'code',
features: [
'קוד מקור מלא של האתר',
'עיצוב מותאם אישית',
'תמיכה טכנית בהעלאת האתר'
]
},
full: {
price: '₪2,390',
title: 'חבילה מלאה',
package: 'hosting',
badge: 'החבילה המומלצת',
features: [
'קוד מקור מלא של האתר',
'אחסון לשנה',
'דומיין בהתאמה אישית',
'תיבת מייל עסקית'
]
}
}
},
kobi: {
name: 'מספרת קובי שריקי',
lang: 'he',
plans: {
code: {
price: '₪1,490',
title: 'קוד האתר בלבד',
package: 'code',
features: [
'קוד מקור מלא של האתר',
'עיצוב מותאם אישית',
'תמיכה טכנית בהעלאת האתר'
]
},
full: {
price: '₪2,390',
title: 'חבילה מלאה',
package: 'hosting',
badge: 'החבילה המומלצת',
features: [
'קוד מקור מלא של האתר',
'אחסון לשנה',
'דומיין בהתאמה אישית',
'תיבת מייל עסקית'
]
}
}
},
orly: {
name: 'אורלי חן עיצוב שיער',
lang: 'he',
plans: {
code: {
price: '₪1,490',
title: 'קוד האתר בלבד',
package: 'code',
features: [
'קוד מקור מלא של האתר',
'עיצוב מותאם אישית',
'תמיכה טכנית בהעלאת האתר'
]
},
full: {
price: '₪2,390',
title: 'חבילה מלאה',
package: 'hosting',
badge: 'החבילה המומלצת',
features: [
'קוד מקור מלא של האתר',
'אחסון לשנה',
'דומיין בהתאמה אישית',
'תיבת מייל עסקית'
]
}
}
},
hairontop: {
name: 'Hair On Top',
lang: 'en',
plans: {
code: {
price: '₪1,490',
title: 'קוד האתר בלבד',
package: 'code',
features: [
'קוד מקור מלא של האתר',
'עיצוב מותאם אישית',
'תמיכה טכנית בהעלאת האתר'
]
},
full: {
price: '₪2,390',
title: 'חבילה מלאה',
package: 'hosting',
badge: 'החבילה המומלצת',
features: [
'קוד מקור מלא של האתר',
'אחסון לשנה',
'דומיין בהתאמה אישית',
'תיבת מייל עסקית'
]
}
}
},
itzik: {
name: 'איציק בכר - אינסטלטור',
lang: 'he',
plans: {
code: {
price: '₪1,490',
title: 'קוד האתר בלבד',
package: 'code',
features: [
'קוד מקור מלא של האתר',
'עיצוב מותאם אישית',
'תמיכה טכנית בהעלאת האתר'
]
},
full: {
price: '₪2,390',
title: 'חבילה מלאה',
package: 'hosting',
badge: 'החבילה המומלצת',
features: [
'קוד מקור מלא של האתר',
'אחסון לשנה',
'דומיין בהתאמה אישית',
'תיבת מייל עסקית'
]
}
}
}
};
// Payment API endpoint - generates fresh SmartPay links
var PAYMENT_API_BASE = '/api/pay/go';
// DOM elements
var elements = {
businessTitle: document.getElementById('businessTitle'),
businessSubtitle: document.getElementById('businessSubtitle'),
planSection: document.getElementById('planSection'),
planBadge: document.getElementById('planBadge'),
planTitle: document.getElementById('planTitle'),
planPrice: document.getElementById('planPrice'),
planFeatures: document.getElementById('planFeatures'),
paymentAction: document.getElementById('paymentAction'),
payButton: document.getElementById('payButton'),
errorState: document.getElementById('errorState')
};
// Current checkout state
var currentCheckout = {
bizKey: null,
planKey: null,
business: null,
plan: null
};
// Parse URL parameters
function getUrlParams() {
var params = new URLSearchParams(window.location.search);
return {
biz: params.get('biz'),
plan: params.get('plan')
};
}
// Validate parameters
function validateParams(biz, plan) {
if (!biz || !plan) return false;
if (!BUSINESSES[biz]) return false;
if (!BUSINESSES[biz].plans[plan]) return false;
return true;
}
// Show error state
function showError() {
elements.planSection.style.display = 'none';
elements.paymentAction.style.display = 'none';
elements.errorState.style.display = 'block';
elements.businessTitle.textContent = 'שגיאה';
elements.businessSubtitle.textContent = '';
document.title = 'שגיאה | Emaillion';
}
// Escape HTML to prevent XSS
function escapeHtml(text) {
var div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
// Build payment URL
function buildPaymentUrl(bizKey, plan) {
var params = new URLSearchParams();
params.set('package', plan.package);
params.set('biz', bizKey);
return PAYMENT_API_BASE + '?' + params.toString();
}
// Handle payment button click
function handlePayment() {
if (!currentCheckout.bizKey || !currentCheckout.plan) {
showError();
return;
}
// Set button to loading state
elements.payButton.disabled = true;
elements.payButton.classList.add('loading');
elements.payButton.innerHTML = '<span class="button-spinner"></span><span>מעבר לתשלום...</span>';
// Build the payment URL and navigate to it
var paymentUrl = buildPaymentUrl(currentCheckout.bizKey, currentCheckout.plan);
// Navigate the top window to the payment page
// This ensures we break out of any iframe context
if (window.top !== window.self) {
window.top.location.href = paymentUrl;
} else {
window.location.href = paymentUrl;
}
}
// Render checkout page
function renderCheckout(bizKey, planKey) {
var business = BUSINESSES[bizKey];
var plan = business.plans[planKey];
// Store current checkout state
currentCheckout.bizKey = bizKey;
currentCheckout.planKey = planKey;
currentCheckout.business = business;
currentCheckout.plan = plan;
// Update header
elements.businessTitle.textContent = 'רכישת אתר עבור:';
// Handle business name with proper lang attribute
if (business.lang === 'en') {
elements.businessSubtitle.innerHTML = '<span lang="en">' + escapeHtml(business.name) + '</span>';
} else {
elements.businessSubtitle.textContent = business.name;
}
// Update plan section - only show badge for full plans
if (plan.badge) {
elements.planBadge.textContent = plan.badge;
} else {
elements.planBadge.textContent = '';
}
elements.planTitle.textContent = plan.title;
elements.planPrice.textContent = plan.price;
// Render features
elements.planFeatures.innerHTML = plan.features
.map(function(feature) { return '<li>' + escapeHtml(feature) + '</li>'; })
.join('');
// Setup payment button
elements.payButton.addEventListener('click', handlePayment);
// Update page title
document.title = 'רכישת אתר - ' + business.name + ' | Emaillion';
}
// Initialize
function init() {
var params = getUrlParams();
if (!validateParams(params.biz, params.plan)) {
showError();
return;
}
renderCheckout(params.biz, params.plan);
}
// Run on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();