301 lines
8.6 KiB
JavaScript
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();
|
|
}
|
|
})(); |