`; document.body.insertAdjacentHTML('beforeend', moduleSelectionHTML); } else if (section === 'contributions') { // Show the member contributions modal const contributionsModalHTML = `

Submit a Published Resource

Submit Your Own Resource

`; document.body.insertAdjacentHTML('beforeend', contributionsModalHTML); } else { // Original section modal code for other sections const modalHTML = `

${formatSectionTitle(section)}

${category}

${getSectionContent(category, section)}
`; document.body.insertAdjacentHTML('beforeend', modalHTML); } } function generateModule(category) { const moduleType = document.getElementById('moduleType').value; const keywords = document.getElementById('moduleKeywords').value; if (!moduleType) { showNotification('Please select a module type'); return; } const module = generateInteractiveModule(category, moduleType, keywords); displayModule(module); } function generateRandomModule(category) { const moduleTypes = ['quiz', 'simulation', 'tutorial', 'casestudy', 'flashcards', 'draganddrop', 'infographics', 'decisiontree', 'challenge']; const randomType = moduleTypes[Math.floor(Math.random() * moduleTypes.length)]; const module = generateInteractiveModule(category, randomType); displayModule(module); } function displayModule(module) { const moduleContent = document.getElementById('moduleContent'); const content = `

${module.title}

${module.resources.length > 0 ? `

Interactive content generated based on:

` : `

No resources found matching the criteria. Try different keywords or select random generation.

`} ${module.keywords ? `
Keywords used: ${module.keywords}
` : ''}
`; moduleContent.innerHTML = content; } function getSectionContent(category, section) { const categoryInfo = categoryData[category]; if (!categoryInfo) { return `

No content available for ${category} ${section}

`; } switch (section) { case 'resources': if (!categoryInfo.resources || categoryInfo.resources.length === 0) { return `

No resources available for ${category}

`; } return `
${categoryInfo.resources.map(resource => `

${resource.title}

${resource.author ? `

By ${resource.author}

` : ''}

${resource.description}

${resource.tags ? `
${resource.tags.map(tag => ` ${tag} `).join('')}
` : ''} ${resource.url ? ` Access Resource ` : ''}
`).join('')}
`; case 'modules': if (!categoryInfo.modules || categoryInfo.modules.length === 0) { return `

No interactive modules available for ${category}

`; } return `
${categoryInfo.modules.map(module => `

${module.title}

${module.description}

Type: ${module.type} Difficulty: ${module.difficulty} Duration: ${module.duration}
${module.tags ? `
${module.tags.map(tag => ` ${tag} `).join('')}
` : ''}
`).join('')}
`; case 'contributions': if (!categoryInfo.contributions) { return `

No member contributions available for ${category}

`; } return `
${categoryInfo.contributions.featured ? `
Featured Contribution

${categoryInfo.contributions.featured.title}

By ${categoryInfo.contributions.featured.author}

${categoryInfo.contributions.featured.description}

` : ''} ${categoryInfo.contributions.recent ? `

Recent Contributions

${categoryInfo.contributions.recent.map(contribution => `
${contribution.title}
${contribution.author} ${contribution.date}
${contribution.type}
`).join('')}
` : ''}
`; default: return `

Invalid section type

`; } } function getAllResources() { return [ { title: "Boundary Control and Legal Principles", author: "Walter G. Robillard; Donald A. Wilson; Curtis M. Brown", description: "An authoritative text on boundary control methods and the legal principles of land surveying.", url: "https://www.amazon.com/Boundary-Control-Legal-Principles-Walter/dp/0470183547", tags: ["boundary control", "legal principles", "land surveying", "property law"], category: "Legal Standards", states: ["ALL"] }, { title: "Elementary Surveying: An Introduction to Geomatics", author: "Charles D. Ghilani; Paul R. Wolf", description: "An introductory text covering fundamental surveying principles and geomatics.", url: "https://www.amazon.com/Elementary-Surveying-Introduction-Geomatics-15th/dp/0134604652", tags: ["elementary surveying", "introduction", "geomatics", "fundamental principles"], category: "Foundational Documents", states: ["ALL"] }, ...Object.entries(categoryData).flatMap(([category, data]) => { return [ ...(data.resources || []).map(resource => ({ ...resource, category, states: ["ALL"] })), ...(data.modules || []).map(module => ({ ...module, category, type: 'module', states: ["ALL"] })) ]; }) ]; } document.addEventListener('DOMContentLoaded', function() { const searchInput = document.getElementById('generalSearch'); searchInput.addEventListener('input', function(e) { const searchTerm = e.target.value.toLowerCase().trim(); const categoryFilter = document.getElementById('categoryFilter').value; const stateFilter = document.getElementById('stateFilter').value; filterResults(searchTerm, categoryFilter, stateFilter); }); const stateFilter = document.getElementById('stateFilter'); if (stateFilter) { stateFilter.addEventListener('change', function(e) { const searchTerm = document.getElementById('generalSearch').value.toLowerCase(); const categoryFilter = document.getElementById('categoryFilter').value; filterResults(searchTerm, categoryFilter, e.target.value); }); } }); function filterResults(searchTerm, categoryFilter, stateFilter) { const categoryCards = document.querySelectorAll('.category-card'); const allResources = getAllResources(); categoryCards.forEach(card => { const cardTitle = card.querySelector('h3').textContent.toLowerCase(); const cardContent = card.textContent.toLowerCase(); const category = getCategoryValue(cardTitle); const categoryResources = allResources.filter(resource => resource.category.toLowerCase() === category.toLowerCase() ); const matchesState = stateFilter === '' || categoryResources.some(resource => resource.states.includes(stateFilter) || resource.states.includes("ALL") ); const matchesSearch = searchTerm === '' || cardContent.includes(searchTerm); const matchesCategory = categoryFilter === '' || category === categoryFilter; const shouldShow = matchesSearch && matchesCategory && matchesState; if (shouldShow) { card.style.display = 'block'; setTimeout(() => { card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 10); } else { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; setTimeout(() => { card.style.display = 'none'; }, 300); } }); } function performSearchWithModal() { const searchTerm = document.getElementById('generalSearch').value.toLowerCase(); const categoryFilter = document.getElementById('categoryFilter').value; const stateFilter = document.getElementById('stateFilter').value; const allResources = getAllResources(); const filteredResources = allResources.filter(resource => { const matchesSearch = searchTerm === '' || resource.title.toLowerCase().includes(searchTerm) || resource.description.toLowerCase().includes(searchTerm) || (resource.tags && resource.tags.some(tag => tag.toLowerCase().includes(searchTerm))); const matchesCategory = categoryFilter === '' || resource.category.toLowerCase() === categoryFilter.toLowerCase(); const matchesState = stateFilter === '' || resource.states.includes(stateFilter) || resource.states.includes("ALL"); return matchesSearch && matchesCategory && matchesState; }); showSearchResultsModal(filteredResources); } function showSearchResultsModal(results) { const modalHTML = `

Search Results

${results.length > 0 ? results.map(resource => `

${resource.title}

${resource.author || ''}

${resource.description}

${resource.tags ? `
${resource.tags.map(tag => ` ${tag} `).join('')}
` : ''} ${resource.url ? ` Access Resource ` : ''}
`).join('') : '

No resources found matching your search criteria.

'}
`; document.body.insertAdjacentHTML('beforeend', modalHTML); document.body.style.overflow = 'hidden'; } function closeSearchResultsModal() { const modal = document.getElementById('searchResultsModal'); if (modal) { modal.remove(); document.body.style.overflow = 'auto'; } } function filterCategories(selectedValue) { const categoryCards = document.querySelectorAll('.category-card'); if (!selectedValue) { categoryCards.forEach(card => { card.style.display = 'block'; card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }); return; } categoryCards.forEach(card => { const cardTitle = card.querySelector('h3').textContent.toLowerCase(); const matchesFilter = cardTitle.toLowerCase().includes(selectedValue.toLowerCase()) || getCategoryValue(cardTitle) === selectedValue; if (matchesFilter) { card.style.display = 'block'; setTimeout(() => { card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 10); } else { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; setTimeout(() => { card.style.display = 'none'; }, 300); } }); } function getCategoryValue(title) { const mapping = { 'Foundational Documents': 'foundational', 'Professional Standards and Ethics': 'professional', 'Legal Standards': 'legal', 'Compliance and Licensing': 'compliance', 'Surveying Tools and Technologies': 'tools', 'Software and Digital Tools': 'software', 'Geodesy and Mapping': 'geodesy', 'Remote Sensing and UAVs': 'remote', 'Data Privacy and Security': 'privacy', 'Risk and Disaster Management': 'risk', 'Continuing Education': 'continuing', 'Standards and Certifications': 'standards', 'Professional Development': 'professional-dev', 'Interdisciplinary Collaboration': 'interdisciplinary', 'Applications in Industry': 'industry', 'Environment and Sustainability': 'environment', 'Land Use and Urban Planning': 'land-use', 'Field Resources': 'field', 'Historical and Cultural Resources': 'historical', 'Education and Public Engagement': 'education', 'Innovations and Emerging Fields': 'innovation', 'Hydrographic Surveying': 'hydrographic', 'Community Engagement': 'community', 'Miscellaneous': 'misc' }; return mapping[title] || ''; } document.addEventListener('DOMContentLoaded', function() { const categoryFilter = document.getElementById('categoryFilter'); if (categoryFilter) { categoryFilter.addEventListener('change', (e) => { filterCategories(e.target.value); }); } const categoryCards = document.querySelectorAll('.category-card'); categoryCards.forEach(card => { card.onclick = (event) => openCategoryModal(event); }); }); function openCategoryModal(event) { event.stopPropagation(); const category = event.currentTarget.querySelector('h3').textContent; const categoryInfo = categoryData[category] || { summary: `Explore comprehensive resources and materials related to ${category}`, resources: [], modules: [], contributions: [] }; const modalHTML = `

${category}

${categoryInfo.summary}

Resources Available

Access comprehensive documentation, guides, and reference materials.

Interactive Modules

Engage with interactive learning materials and practical exercises.

Member Contributions

Explore community-contributed resources and discussions.

`; document.body.insertAdjacentHTML('beforeend', modalHTML); document.body.style.overflow = 'hidden'; } function closeCategoryModal() { const modal = document.getElementById('categoryModal'); if (modal) { modal.remove(); document.body.style.overflow = 'auto'; } } function closeSectionModal() { const modal = document.getElementById('sectionModal'); if (modal) { modal.remove(); } } function formatSectionTitle(section) { const titles = { 'resources': 'Resources Available', 'modules': 'Interactive Modules', 'contributions': 'Member Contributions' }; return titles[section] || section.charAt(0).toUpperCase() + section.slice(1); } async function submitPublishedResource(event, category) { event.preventDefault(); const form = event.target; const resourceData = { type: form.querySelector('select').value, title: form.querySelector('input[type="text"]').value, author: form.querySelectorAll('input[type="text"]')[1].value, keywords: form.querySelectorAll('input[type="text"]')[2].value.split(',').map(k => k.trim()), url: form.querySelector('input[type="url"]').value, state: form.querySelectorAll('select')[1].value, category: category, dateSubmitted: new Date().toISOString() }; // Update the categoryData object if (!categoryData[category].resources) { categoryData[category].resources = []; } categoryData[category].resources.push(resourceData); // Show success message showNotification('Resource submitted successfully'); closeMemberContributionsModal(); } async function submitMemberResource(event) { event.preventDefault(); const form = event.target; const resourceData = { title: form.querySelector('input[type="text"]').value, keywords: form.querySelectorAll('input[type="text"]')[1].value.split(',').map(k => k.trim()), description: form.querySelector('textarea').value, url: form.querySelector('input[type="url"]').value, author: "Anonymous", // Assuming a placeholder for the author dateSubmitted: new Date().toISOString() }; // Add to member contributions if (!categoryData['Member Contributions']) { categoryData['Member Contributions'] = { resources: [] }; } categoryData['Member Contributions'].resources.push(resourceData); // Show success message showNotification('Member resource submitted successfully'); closeMemberContributionsModal(); } function closeMemberContributionsModal() { const modal = document.getElementById('memberContributionsModal'); if (modal) { modal.remove(); document.body.style.overflow = 'auto'; } } function showNotification(message) { const notificationHTML = `
${message}
`; document.body.insertAdjacentHTML('beforeend', notificationHTML); setTimeout(() => { const notification = document.getElementById('notification'); if (notification) notification.remove(); }, 3000); } -->
Land Surveying Logo

Land Surveying Resource Library

Foundational Documents

  • Resources Available
  • Interactive Modules
  • Member Contributions

Professional Standards and Ethics

  • Resources Available
  • Interactive Modules
  • Member Contributions

Legal Standards

  • Resources Available
  • Interactive Modules
  • Member Contributions

Compliance and Licensing

  • Resources Available
  • Interactive Modules
  • Member Contributions

Surveying Tools and Technologies

  • Resources Available
  • Interactive Modules
  • Member Contributions

Software and Digital Tools

  • Resources Available
  • Interactive Modules
  • Member Contributions

Geodesy and Mapping

  • Resources Available
  • Interactive Modules
  • Member Contributions

Remote Sensing and UAVs

  • Resources Available
  • Interactive Modules
  • Member Contributions

Data Privacy and Security

  • Resources Available
  • Interactive Modules
  • Member Contributions

Risk and Disaster Management

  • Resources Available
  • Interactive Modules
  • Member Contributions

Continuing Education

  • Resources Available
  • Interactive Modules
  • Member Contributions

Standards and Certifications

  • Resources Available
  • Interactive Modules
  • Member Contributions

Professional Development

  • Resources Available
  • Interactive Modules
  • Member Contributions

Interdisciplinary Collaboration

  • Resources Available
  • Interactive Modules
  • Member Contributions

Applications in Industry

  • Resources Available
  • Interactive Modules
  • Member Contributions

Environment and Sustainability

  • Resources Available
  • Interactive Modules
  • Member Contributions

Land Use and Urban Planning

  • Resources Available
  • Interactive Modules
  • Member Contributions

Field Resources

  • Resources Available
  • Interactive Modules
  • Member Contributions

Historical and Cultural Resources

  • Resources Available
  • Interactive Modules
  • Member Contributions

Education and Public Engagement

  • Resources Available
  • Interactive Modules
  • Member Contributions

Innovations and Emerging Fields

  • Resources Available
  • Interactive Modules
  • Member Contributions

Hydrographic Surveying

  • Resources Available
  • Interactive Modules
  • Member Contributions

Community Engagement

  • Resources Available
  • Interactive Modules
  • Member Contributions

Miscellaneous

  • Resources Available
  • Interactive Modules
  • Member Contributions