username:

password:




Songs
Albums
Diggers
Comments
Blogwalls

About
 Email Me


394,352 Albums + 592,764 Individual Songs
Whom shall sing, by the butterfly's wing?
Loading...
 
 
Descriptions

Horace Andy - Tribute To Bob Marley (Wackies) [Full Album]



Random Page  /  Random Album


Horace Andy - Tribute To Bob Marley

Released 2009-01-23 on Wackies

Download on iTunes: https://geo.itunes.apple.com/album/id299137472?uo=6&app=itunes&at=10ldAw&ct=YTAT827670796169

Download on Google Play: https://play.google.com/store/search?q=Horace+Andy+Tribute+To+Bob+Marley&c=music&PAffiliateID=100l3VM



1. 00:00:00 Horace Andy Tribute To Bob Marley

2. 00:03:57 Jah Batta Great Super Star

3. 00:08:39 Horace Andy Love Hangover

4. 00:13:08 Horace Andy Lingering Spirit



Tribute To Bob Marley was originally released on the Top Ranking International label in 1981, soon after the Wailer’s death in May, and provided an outstanding cut on Horace Andy's Exclusively album set issued the following year in London by Solid Groove. The flip side featured Jah Batta’s DJ cut Great Super Star, uncredited on the original label. Lingering Spirit offers a completely different mix, first issued in England on the red Bullwackie’s label in 1983 (its title more reticent now, after the hundreds of Marley tribute records).

© Basic Channel 2006

℗ Basic Channel 2006 .



This is officially licensed content, not a copyright infringement. For any issues, please get in touch with finetunes first.

© 2021 DigMusic Online/** * 1. GENERAL AJAX FORM SUBMISSION HANDLER * Intercepts a standard form submission by its ID, submits it via fetch (POST), * and passes the result text back to a custom callback function. */ function submitFormAjax(formId, callback) { const formElement = document.getElementById(formId); if (!formElement) return; formElement.addEventListener('submit', function (event) { event.preventDefault(); event.stopPropagation(); const formData = new FormData(formElement, event.submitter); if (event.submitter && event.submitter.name) { formData.append(event.submitter.name, event.submitter.value); } const actionUrl = formElement.getAttribute('action') || './ajax_handler.php'; fetch(actionUrl, { method: 'POST', body: formData }) .then(response => response.text()) .then(result => { if (typeof callback === 'function') { callback(result, formElement); } }) .catch(error => { console.error("Fetch error:", error); }); return false; }); } /** * 2. ALPHABETICAL DROPDOWN OPTION INSERTER */ function insertOptionAlphabetically(selectElement, text, value) { if (!selectElement) return; for (let i = 0; i < selectElement.options.length; i++) { if (selectElement.options[i].value === value) return; } const option = document.createElement('option'); option.value = value; option.text = text; let inserted = false; for (let i = 0; i < selectElement.options.length; i++) { if (selectElement.options[i].value === "") continue; if (selectElement.options[i].text.localeCompare(text, undefined, {sensitivity: 'accent', numeric: true}) > 0) { selectElement.add(option, selectElement.options[i]); inserted = true; break; } } if (!inserted) { selectElement.add(option); } } /** * 3. SCORE UPDATE AJAX HANDLER */ function updateScoreAjax() { const formElement = document.getElementById('scoreForm'); const selectElement = document.getElementById('scoreSelect'); if (!formElement || !selectElement) return; if (selectElement.value === "") return; const formData = new FormData(formElement); formData.set('score', selectElement.value); // Ensure URL is present if missing if (!formData.has('url') || formData.get('url') === '') { const segments = window.location.pathname.split('/'); const lastSegment = segments[segments.length - 1]; const trackUrl = lastSegment.replace('play_', '').replace('.php', ''); formData.set('url', trackUrl); } const actionUrl = formElement.getAttribute('action') || window.location.href; fetch(actionUrl, { method: 'POST', body: formData }) .then(response => response.text()) .then(html => { const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const currentTable = formElement.closest('table'); const newDocTable = doc.getElementById('scoreForm') ? doc.getElementById('scoreForm').closest('table') : null; if (currentTable && newDocTable) { currentTable.innerHTML = newDocTable.innerHTML; } }) .catch(error => { console.error("Score fetch error:", error); }); } /** * 4. SHELF ITEM AJAX INITIALIZER */ function initShelfItemAjax() { if (window._shelfAjaxInitialized) return; window._shelfAjaxInitialized = true; document.addEventListener('submit', function (event) { const form = event.target; const isShelfForm = form.name === 'shelfitemform' || form.id === 'addToShelfForm' || form.querySelector('select[name="myshelves"]'); if (!isShelfForm) return; event.preventDefault(); event.stopPropagation(); const formData = new FormData(form, event.submitter); if (event.submitter && event.submitter.name) { formData.append(event.submitter.name, event.submitter.value); } formData.set('ajax', '1'); const actionUrl = form.getAttribute('action') || './add_to_shelf.php'; fetch(actionUrl, { method: 'POST', body: formData }) .then(response => response.text()) .then(html => { const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const shelfItemContainer = document.getElementById('shelfItemContainer'); const newContainer = doc.getElementById('shelfItemContainer'); if (newContainer && shelfItemContainer) { shelfItemContainer.innerHTML = newContainer.innerHTML; } const newInfo = doc.getElementById('trackShelvesInfo'); const currentInfo = document.getElementById('trackShelvesInfo'); if (newInfo && currentInfo) { currentInfo.outerHTML = newInfo.outerHTML; } }) .catch(error => { console.error("Shelf item fetch error:", error); }); return false; }); } /** * 5. DOM CONTENT LOADED INITIALIZER */ document.addEventListener("DOMContentLoaded", function () { // Handle score dropdown change event cleanly const selectElement = document.getElementById('scoreSelect'); if (selectElement) { selectElement.addEventListener('change', updateScoreAjax); } // Handle the creation of a brand new custom shelf dynamically submitFormAjax('shelfForm', function(result, form) { let status = document.getElementById('shelfStatus'); if (!status) return; let cleanResult = result.trim(); if (cleanResult.startsWith("Success")) { status.innerText = "Added!"; status.style.color = "green"; const shelfInput = form.querySelector('input[name="shelf_name"]'); const shelfName = shelfInput ? shelfInput.value.trim() : ""; let newSid = ""; let separator = cleanResult.includes("|") ? "|" : ":"; if (cleanResult.includes(separator)) { let parts = cleanResult.split(separator); newSid = parts[1].replace(/[^0-9]/g, ""); } // Instantly inject into all relevant dropdowns alphabetically if (shelfName && newSid) { document.querySelectorAll('select[name="shelvesall"], select[name="sid"], select[name="myshelves"], #myShelvesSelect').forEach(sel => { insertOptionAlphabetically(sel, shelfName, newSid); }); } form.reset(); } else if (cleanResult.includes("Already there")) { status.innerText = "Already exists."; status.style.color = "orange"; } else { status.innerText = "Error."; status.style.color = "red"; } }); // Handle comment submissions cleanly using your standard AJAX form submitter submitFormAjax('commentform', function(result, form) { const commentsContainer = document.getElementById('commentsContainer'); if (!commentsContainer) return; const parser = new DOMParser(); const doc = parser.parseFromString(result, 'text/html'); const newContainer = doc.getElementById('commentsContainer'); if (newContainer) { commentsContainer.innerHTML = newContainer.innerHTML; form.reset(); } }); // Initialize the other AJAX watchers safely once on load if (typeof initShelfItemAjax === 'function') { initShelfItemAjax(); } }); /** /** * 6. GLOBE TRANSLATE POPUP TOGGLE */ function toggleTranslatePopup(event) { event.stopPropagation(); const popup = document.getElementById('translatePopup'); if (popup) { // Explicitly toggle inline display block/none if (popup.style.display === 'none' || popup.style.display === '') { popup.style.display = 'block'; } else { popup.style.display = 'none'; } } } // Close the popup if clicking anywhere else on the page document.addEventListener('click', () => { const popup = document.getElementById('translatePopup'); if (popup && popup.style.display === 'block') { popup.style.display = 'none'; } });