﻿(function (win, doc, undefined) {
	var pluginRootUrl = 'http://biblia.com/api/plugins/',
	    parametersToIgnoreGlobally = ['resource', 'id'],
		pluginInfos = {
			'verseoftheday': { path: 'verseoftheday/{0}' },
			'biblesearchbox': { path: 'biblesearchbox?resource={0}', parametersToIgnore: ['width', 'height'] },
			'biblesearchresults': { path: 'biblesearchresults?resource={0}', parametersToIgnore: ['width', 'height'] },
			'bible': { path: 'embeddedbible?resourceName={0}', parametersToIgnore: ['width', 'height'] },
			'preview': { path: 'embeddedpreview?resourceName={0}', parametersToIgnore: ['width', 'height'] }
		};

	function addUrlParameter(strUrl, strParamName, paramValue) {
		return strUrl + ((/[?]/).test(strUrl) ? '&' : '?') + strParamName + '=' + paramValue;
	}

	function arrayIndexOf(array, str) {
		for (var i = 0; i < array.length; i++) {
			if (array[i] === str)
				return i;
		}
		return -1;
	}

	function isIgnoredParameter(strParam, strType) {
		return arrayIndexOf(parametersToIgnoreGlobally.concat(pluginInfos[strType].parametersToIgnore), strParam) !== -1;
	}

	function initPlugins(type) {
		var bibliaPluginElements = doc.getElementsByTagName('biblia:' + type),
		    numMatching = bibliaPluginElements.length,
			i;

		// replace <biblia:*> tags with plugin iframe
		for (i = 0; i < numMatching; i++) {
			(function (elBibliaPlugin) {
				var elPlugin = doc.createElement('iframe'),
					resource = elBibliaPlugin.getAttribute('resource'),
					width = elBibliaPlugin.getAttribute('width'),
					height = elBibliaPlugin.getAttribute('height');

				var url = pluginRootUrl + pluginInfos[type].path.replace('{0}', resource);
				for (var i = 0; i < elBibliaPlugin.attributes.length; i++) {
					var attrib = elBibliaPlugin.attributes[i];
					if (attrib.specified == true && !isIgnoredParameter(attrib.name, type))
						url = addUrlParameter(url, attrib.name, attrib.value);
				}

				if (width)
					elPlugin.width = width;
				if (height)
					elPlugin.height = height;

				elPlugin.src = url;

				elPlugin.scrolling = 'no';
				elPlugin.setAttribute('frameborder', '0');
				elPlugin.setAttribute('allowTransparency', 'true');

				elBibliaPlugin.parentNode.replaceChild(elPlugin, elBibliaPlugin);

			})(bibliaPluginElements[0]);
		}
		return numMatching;
	}

	win.logos = win.logos || {};
	win.logos.biblia = {
		init: function() {
			var counts = {};
			for (var pluginName in pluginInfos)
				counts[pluginName] = initPlugins(pluginName);

			// log
			var queryParams = ['url=' + encodeURIComponent(window.location)];
			for (var key in counts) {
				if (counts.hasOwnProperty(key) && counts[key])
					queryParams.push(key + '=' + counts[key]);
			}
			new Image().src = 'http://biblia.com/api/plugins/report?' + queryParams.join('&');
		}
	};
})(window, document);

