const teamMembers = []; // We'll fetch from backend
// Initialize team section
async function initTeamSection() {
const teamGrid = document.getElementById('teamGrid');
const viewToggleBtn = document.getElementById('viewToggleBtn');
if (!teamGrid || !viewToggleBtn) return;
try {
// Fetch team members from backend
const response = await fetch('backend/get_team_members.php?limit=3');
const data = await response.json();
if (data.success) {
teamMembers.length = 0; // Clear array
teamMembers.push(...data.data);
// Clear existing content
teamGrid.innerHTML = '';
// Generate team members
data.data.forEach(member => {
const teamMember = createTeamMember(member);
teamGrid.appendChild(teamMember);
});
// Initialize team animations
initTeamAnimations();
// Initialize background elements
initBackgroundElements();
// Initialize view toggle functionality
initViewToggle(viewToggleBtn, teamGrid);
} else {
console.error('Failed to load team members:', data.error);
}
} catch (error) {
console.error('Error loading team members:', error);
}
}
// Create team member element - UPDATED: Using anchor tags for dedicated pages
function createTeamMember(member) {
const memberDiv = document.createElement('div');
memberDiv.className = 'team-member';
memberDiv.setAttribute('data-member-id', member.id);
memberDiv.innerHTML = `
${member.name}
${member.role}
${member.bio}
${member.stats.years}
Years
${member.stats.projects}
Projects
${member.stats.success}
Success
`;
return memberDiv;
}
// Initialize view toggle functionality
function initViewToggle(button, grid) {
let isExpanded = false;
button.addEventListener('click', async function() {
try {
if (!isExpanded) {
// Show all team members
const response = await fetch('backend/get_team_members.php');
const data = await response.json();
if (data.success) {
grid.innerHTML = '';
data.data.forEach(member => {
const teamMember = createTeamMember(member);
grid.appendChild(teamMember);
});
button.querySelector('span').textContent = 'Show Less';
button.classList.add('show-less');
isExpanded = true;
// Re-initialize animations
setTimeout(() => {
initTeamAnimations();
}, 100);
}
} else {
// Show only 3 team members
const response = await fetch('backend/get_team_members.php?limit=3');
const data = await response.json();
if (data.success) {
grid.innerHTML = '';
data.data.forEach(member => {
const teamMember = createTeamMember(member);
grid.appendChild(teamMember);
});
button.querySelector('span').textContent = 'View More';
button.classList.remove('show-less');
isExpanded = false;
// Re-initialize animations
setTimeout(() => {
initTeamAnimations();
}, 100);
}
}
} catch (error) {
console.error('Error toggling team members:', error);
}
});
}
// Remove overlay-related CSS and add clickable card functionality
function makeCardsClickable() {
document.addEventListener('click', function(e) {
const teamMember = e.target.closest('.team-member');
if (teamMember && !e.target.closest('.social-link') && !e.target.closest('.view-profile')) {
const memberId = teamMember.getAttribute('data-member-id');
window.location.href = `backend/team_member_page.php?id=${memberId}`;
}
});
}
// Keep the animation and background functions as they are
function initTeamAnimations() {
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, observerOptions);
document.querySelectorAll('.team-member').forEach(member => {
member.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
observer.observe(member);
});
}
function initBackgroundElements() {
const bgContainer = document.getElementById('teamBgElements');
if (!bgContainer) return;
for (let i = 0; i < 5; i++) {
const orb = document.createElement('div');
orb.className = 'bg-orb';
const size = Math.random() * 200 + 100;
const left = Math.random() * 80 + 10;
const top = Math.random() * 80 + 10;
const delay = Math.random() * 10;
orb.style.width = `${size}px`;
orb.style.height = `${size}px`;
orb.style.left = `${left}%`;
orb.style.top = `${top}%`;
orb.style.animationDelay = `${delay}s`;
bgContainer.appendChild(orb);
}
}
// Initialize when DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
initTeamSection();
makeCardsClickable();
});