if (typeof DEBUG != "function") {
	function DEBUG(message, type) {
		try {
			switch (type) {
				case undefined:
				case "log":
					console.log(message);
					break;
				case "info":
					console.info(message);
					break;
				case "warn":
					console.warn(message);
					break;
				case "error":
					console.error(message);
					break;
				default:
					// don't do anything
			}
		}
		catch (e) {}
	}
}



var ContentRenderer = {
	callbackGetImageElements: function(e) {
		return (e.tagName.toLowerCase() == "img");
	},

	renderAsGallery: function(caller, content) {
		var result;

		if (content) {
			var galleryContainer = new YAHOO.util.Element(document.createElement("div"));

			result = new YAHOO.util.Element(document.createElement("div"));
			result.addClass("box2Col");
			galleryContainer.addClass("boxVianiGallery");
			result.appendChild(galleryContainer);

			// Collect PhotoViewer Images
			try {
				var PVContainer = YAHOO.util.Dom.getElementsByClassName("photoViewer", "div", content)[0];
				var PVID = YAHOO.util.Dom.getAttribute(PVContainer, "id");
				var viewer = YAHOO.photoViewer.controller.getViewer(PVID);

				//DEBUG("PVID: " + PVID);
				viewer.on("xmlload", function() {
					ContentRenderer.renderGalleryImagesOnContentReady(caller, PVContainer, galleryContainer);
				});
			}
			catch(e) {
				//DEBUG("Error creating gallery: " + e);
				galleryContainer.appendChild(document.createTextNode("\xA0"));
			}
		}
		else {
			result = new YAHOO.util.Element(document.createElement("div"));
			result.addClass("box2Col");
			result.addClass("boxBorderTop");
			result.appendChild(document.createTextNode("\xA0"));
		}
		return result;
	},

	renderAsGMap: function(caller, content, context) {
		var mapcontainerid = YAHOO.util.Dom.generateId();
		var result = new YAHOO.util.Element(document.createElement("div"), {
			id: mapcontainerid
		});

		result.addClass("box2Col");
		result.addClass("GMap");

		if (context && caller.runAfterInsert[context]) {
			caller.runAfterInsert[context].push(function() {
				//DEBUG("Creating map in " + mapcontainerid);
				YAHOO.util.Event.onContentReady(mapcontainerid, function() {
					load(mapcontainerid);
				});
			});
		}
		return result;
	},

	renderAsProducerLink: function(content) {
		var result = null;

		try {
			var links = YAHOO.util.Dom.getElementsByClassName("producerPermaLink", "a", "productDetail_info");

			if (links && links.length > 0) {
				var newLink = new YAHOO.util.Element(document.createElement("a"), {
					href: links[0].href
				});

				newLink.addClass("aProdFunc");
				newLink.appendChild(document.createTextNode("Produzent"));
				result = newLink;
			}
		}
		catch (e) {
			result.appendChild(document.createTextNode("\xA0"));
			//DEBUG("Error in renderAsProducerLink(): " + e);
		}
		return result;
	},

	renderAsSimpleGallery: function(caller, content) {
		var images = content.getElementsByTagName("img");
		var result = new YAHOO.util.Element(document.createElement("div"));

		result.addClass("box2Col");

		try {
			if (images.length > 0) {
				var container = new YAHOO.util.Element(document.createElement("div"))

				container.addClass("boxVianiGallery");

				var bigImgID = "simpleGallery_" + YAHOO.util.Dom.generateId();

				// Add container for large image
				var bigBoxImgContainer = new YAHOO.util.Element(document.createElement("div"), {
					id: bigImgID
				});
				var firstImage = null;
				var firstImageInfo = null;

				bigBoxImgContainer.addClass("galleryLargePicture");
				container.appendChild(bigBoxImgContainer);

				for (var i = 0; i < images.length; i++) {
					var current = images[i];
					var tnContainer = new YAHOO.util.Element(document.createElement("div"));
					var tnContainerInner = new YAHOO.util.Element(document.createElement("div"));

					tnContainer.addClass("boxHalfCol");
					tnContainerInner.addClass("boxImage");
					tnContainer.appendChild(tnContainerInner);

					// create imgInfo
					var imgInfo = {
						tn: null,
						gallery: null,
						alt: null,
						width: null,
						height: null,
						preview_width: null,
						preview_height: null
					};

					imgInfo.tn = YAHOO.util.Dom.getAttribute(current, "src");
					imgInfo.gallery = YAHOO.util.Dom.getAttribute(current, "popup");

					if (YAHOO.util.Dom.getAttribute(current, "alt")) {
						imgInfo.alt = YAHOO.util.Dom.getAttribute(current, "alt");
					}
					else {
						imgInfo.alt = "";
					}
					if (YAHOO.util.Dom.getAttribute(current, "width")) {
						imgInfo.width = YAHOO.util.Dom.getAttribute(current, "width");
					}
					if (YAHOO.util.Dom.getAttribute(current, "height")) {
						imgInfo.height = YAHOO.util.Dom.getAttribute(current, "height");
					}
					if (YAHOO.util.Dom.getAttribute(current, "preview_width")) {
						imgInfo.preview_width = YAHOO.util.Dom.getAttribute(current, "preview_width");
					}
					if (YAHOO.util.Dom.getAttribute(current, "preview_height")) {
						imgInfo.preview_height = YAHOO.util.Dom.getAttribute(current, "preview_height");
					}
					if (typeof GeneralDetail != "undefined" && caller == GeneralDetail) {
						if (!imgInfo.preview_width && YAHOO.util.Dom.getAttribute(current, "picpop_width")) {
							imgInfo.preview_width = YAHOO.util.Dom.getAttribute(current, "picpop_width");
						}
						if (!imgInfo.preview_height && YAHOO.util.Dom.getAttribute(current, "picpop_height")) {
							imgInfo.preview_height = YAHOO.util.Dom.getAttribute(current, "picpop_height");
						}
					}
					var thumbnail = ContentRenderer.renderThumbnailNormal(caller, imgInfo, bigImgID, "simple");

					tnContainerInner.appendChild(thumbnail);
					container.appendChild(tnContainer);

					// caller.centerImageInBox(thumbnail, caller.IMAGE1COL);

					if (i % 4 == 3) {
						var spacer = new YAHOO.util.Element(document.createElement("div"))
						spacer.addClass("spacer");
						container.appendChild(spacer);
					}
					if (i == 0) {
						firstImage = thumbnail;
						firstImageInfo = imgInfo;
					}
				}
				if (images.length > 0) {
					YAHOO.util.Event.onContentReady(bigImgID, function(){
						ContentRenderer.selectFirstSimpleGalleryImageOnContentReady(caller, bigImgID, firstImageInfo, firstImage.getElementsByClassName("thumbnailBorderOnTop")[0]);
					});
				}
				var spacer = new YAHOO.util.Element(document.createElement("div"))

				spacer.addClass("spacer");
				container.appendChild(spacer);
				result.appendChild(container);
			}
			else {
				result.appendChild(document.createTextNode("\xA0"));
			}
		}
		catch(e) {
			result.appendChild(document.createTextNode("\xA0"));
			//DEBUG("Error in renderAsSimpleGallery(): " + e);
		}
		return result;
	},

	renderAsText: function(caller, content) {
		var result;

		if (content) {
			result = new YAHOO.util.Element(document.createElement("div"));
			result.addClass("textNode");

			if (typeof GeneralDetail != "undefined" && caller == GeneralDetail) {
				result.addClass("boxTopPadding");
			}
			result.appendChild(content);
		}
		else {
			result = new YAHOO.util.Element(document.createElement("div"));
			result.appendChild(document.createTextNode(" "));
		}
		result.addClass("box4Col");
		result.addClass("boxBorderTop");

		return result;
	},

	renderGalleryImagesOnContentReady: function(caller, context, container) {
		try {
			var PVID = YAHOO.util.Dom.getAttribute(context, "id");
			var PVLinks = context.childNodes;
			var firstImage = null;
			var links = new Array();
			var viewer = YAHOO.photoViewer.controller.getViewer(PVID);

			for (var i = 0; i < PVLinks.length; i++) {
				// Only render up to 12 images
				if (i >= 12) {
					break;
				}
				try {
					var current = PVLinks[i];
					var imgInfo = {
						id: null, // ID generated by PhotoViewer. Needed to sort the images
						tn: null, // thumbnail-url
						gallery: null, // bigger images shown on top of the gallery
						fullscreen: null, // largest image shown onclick width PhotoViewer
						alt: "",
						index: null,
						viewer: viewer,
						width: null,
						height: null,
						preview_width: null,
						preview_height: null
					};

					imgInfo.id = YAHOO.util.Dom.getAttribute(current, "id");
					imgInfo.fullscreen = YAHOO.util.Dom.getAttribute(current, "fullsource");

					if (YAHOO.util.Dom.getAttribute(current, "preview_width")) {
						imgInfo.preview_width = YAHOO.util.Dom.getAttribute(current, "preview_width");
					}
					if (YAHOO.util.Dom.getAttribute(current, "preview_height")) {
						imgInfo.preview_height = YAHOO.util.Dom.getAttribute(current, "preview_height");
					}
					if (YAHOO.util.Dom.getAttribute(current, "previewsource")) {
						imgInfo.gallery = YAHOO.util.Dom.getAttribute(current, "previewsource");
					}
					var tnImage = YAHOO.util.Dom.getFirstChild(current);

					if (tnImage && tnImage.tagName.toLowerCase() == "img") {
						imgInfo.tn = YAHOO.util.Dom.getAttribute(tnImage, "src");

						var alt = YAHOO.util.Dom.getAttribute(tnImage, "alt");

						if (!alt.match(/^\s-\s$/)) {
							imgInfo.alt = alt;
						}
						var index = imgInfo.id.substr(imgInfo.id.length - 1, 1);

						imgInfo.index = index;

						// Dimensions
						if (YAHOO.util.Dom.getAttribute(tnImage, "width")) {
							imgInfo.width = YAHOO.util.Dom.getAttribute(tnImage, "width");
						}
						if (YAHOO.util.Dom.getAttribute(tnImage, "height")) {
							imgInfo.height = YAHOO.util.Dom.getAttribute(tnImage, "height");
						}
					}
					if (imgInfo.id && imgInfo.tn && imgInfo.gallery && imgInfo.fullscreen) {
						links.push(imgInfo);
					}
				} 
				catch (err) {
					//DEBUG("Error reading gallery images: " + err);
				}
			}
			/*
			 * 	<a href="javascript:;" fullsource="/blobs/winter.4001.jpg" title="" class="photoViewer" id="photoViewer8-thumb_0">
			 * 		<img src="/blobs/winter.4003.jpg" alt="-	"/>
			 * 	</a>
			 */

			links.sort(ContentRenderer.sortImagesByPVID);

			var bigImageContainerID = "gallery_" + PVID;

			// Add container for large image
			var bigBoxImgContainer = new YAHOO.util.Element(document.createElement("div"), {
				id: bigImageContainerID
			});
			bigBoxImgContainer.addClass("galleryLargePicture");
			container.appendChild(bigBoxImgContainer);

/*
			var thumbnail = new YAHOO.util.Element(document.createElement("img"), {
				src: links[0].gallery,
				alt: links[0].alt
			});

			bigBoxImgContainer.appendChild(thumbnail);
*/

			var firstImage = null;

			for (var i = 0; i < links.length; i++) {
				var tnImageID = PVID + "_image_" + i;

				// Add thumbnails
				var current = links[i];
				var tnContainer = new YAHOO.util.Element(document.createElement("div"));

				tnContainer.addClass("boxHalfCol");

				var tnContainerInner = new YAHOO.util.Element(document.createElement("div"));

				tnContainerInner.addClass("boxImage");
				tnContainer.appendChild(tnContainerInner);

				var thumbnail = ContentRenderer.renderThumbnailNormal(caller, current, bigImageContainerID);

				tnContainerInner.appendChild(thumbnail);
				container.appendChild(tnContainer);

				// Producers.centerImageInBox(thumbnail, Producers.IMAGE1COL);

				if (i % 4 == 3) {
					var spacer = new YAHOO.util.Element(document.createElement("div"))
					spacer.addClass("spacer");
					container.appendChild(spacer);
				}
				if (i == 0) {
					firstImage = thumbnail;
				}
			}
/*
			var clearing = new YAHOO.util.Element(document.createElement("div"));

			clearing.addClass("clearing");
			container.appendChild(clearing);
*/

			if (links.length > 0) {
				ContentRenderer.selectImageFromGallery(caller, bigImageContainerID, links[0], firstImage.getElementsByClassName("thumbnailBorderOnTop")[0], false);
			}

			var spacer = new YAHOO.util.Element(document.createElement("div"))

			spacer.addClass("spacer");
			container.appendChild(spacer);
		}
		catch (e) {
			//DEBUG("Error rendering images: " + e);
		}
	},
	
	renderThumbnailNormal: function(caller, imgInfo, containerID, gallerytype) {
		// Thumbnail Dimensions: 48x48px
		var attributes = {
			src: imgInfo.tn,
			alt: imgInfo.alt
		};

		if (imgInfo.width) {
			attributes.width = imgInfo.width;
		}
		if (imgInfo.height) {
			attributes.height = imgInfo.height;
		}

		var thumbnail = new YAHOO.util.Element(document.createElement("img"), attributes);
		var topOffset = 0;
		var leftOffset = 0;

		if (imgInfo.width && imgInfo.height && (imgInfo.width < 48 || imgInfo.height < 48)) {
			var sizeAndOffset = caller.getImageSizeAndOffset(6); // 6: 48x48px
			var styles = caller.calculateImagePosition(imgInfo.width, imgInfo.height, sizeAndOffset.size, sizeAndOffset.offset);
			
			thumbnail.setStyle("width", styles.w);
			thumbnail.setStyle("height", styles.h);
			topOffset = styles.topValue;
		}

		var additionalTopOffset = 0;
		var additionalLeftOffset = 0;

		if (imgInfo.height > 48) {
			var offset = Math.floor((imgInfo.height - 48) / 2.0);
			additionalTopOffset -= (offset / 12.0);
		}
		if (imgInfo.width > 48) {
			var offset = Math.floor((imgInfo.width - 48) / 2.0);
			additionalLeftOffset -= (offset / 12.0);
		}
		if (navigator.userAgent.match(/MSIE/)) {
			additionalTopOffset *= 0.9759;
			additionalLeftOffset *= 0.9759;
		}
		topOffset += additionalTopOffset;
		leftOffset += additionalLeftOffset;

		if (navigator.userAgent.match(/MSIE/)) {
			topOffset = topOffset.toFixed(2);
			leftOffset = leftOffset.toFixed(2);
		} else {
			topOffset = topOffset.toFixed(4);
			leftOffset = leftOffset.toFixed(4);
		}
		thumbnail.setStyle("position", "relative");
		thumbnail.setStyle("top", topOffset.toString() + "em");
		thumbnail.setStyle("left", leftOffset.toString() + "em");
		
/*
		var thumbnailLink = document.createElement("a");

		YAHOO.util.Event.addListener(thumbnailLink, "click", function(e, info) {
			//DEBUG("Click: " + e + ", " + i);
			ContentRenderer.selectImageFromGallery(caller, "gallery_" + containerID, info.imginfo, info.tn);
		}, {
			imginfo: current,
			tn: thumbnail
		});
		thumbnailLink = new YAHOO.util.Element(thumbnailLink);
		thumbnailLink.appendChild(thumbnail);
*/

		var thumbnailLink = document.createElement("a");

		if (gallerytype && gallerytype == "simple") {
			YAHOO.util.Event.addListener(thumbnailLink, "mouseover", function(e, info) {
				ContentRenderer.selectImageFromGallery(caller, containerID, info.imginfo, info.tn, (gallerytype && gallerytype == "simple"));
			}, {
				imginfo: imgInfo,
				tn: thumbnailLink
			});
			YAHOO.util.Event.addListener(thumbnailLink, "click", function(e, info) {
				//ContentRenderer.selectImageFromGallery(caller, containerID, info.imginfo, info.tn, (gallerytype && gallerytype == "simple"));
			}, {
				imginfo: imgInfo,
				tn: thumbnailLink
			});
		} else {
			// PhotoViewer
			YAHOO.util.Event.addListener(thumbnailLink, "mouseover", function(e, info) {
				ContentRenderer.selectImageFromGallery(caller, containerID, info.imginfo, info.tn, (gallerytype && gallerytype == "simple"));
			}, {
				imginfo: imgInfo,
				tn: thumbnailLink
			});

			YAHOO.util.Event.addListener(thumbnailLink, "click", function(e, info) {
				//				info.viewer.loadViewerVianiGallery(YAHOO.util.Dom.get(info.img.id));
				info.imginfo.viewer.open(info.imginfo.index);
			}, {
				imginfo: imgInfo
			});
		}
		thumbnailLink = new YAHOO.util.Element(thumbnailLink);
		thumbnailLink.addClass("thumbnailBorderOnTop");

		var outer = new YAHOO.util.Element(document.createElement("div"));
		var inner = new YAHOO.util.Element(document.createElement("div"));

		outer.setStyle("position", "relative");
		outer.appendChild(thumbnail);

		// Border
		var borderUL = new YAHOO.util.Element(document.createElement("div"));
		var borderLR = new YAHOO.util.Element(document.createElement("div"));

		borderUL.addClass("boxProdUL");
		borderUL.addClass("boxUL");
		borderLR.addClass("boxProdLR");
		borderLR.addClass("boxLR");
		borderUL.appendChild(borderLR);

		thumbnailLink.appendChild(borderUL);
		outer.appendChild(thumbnailLink);

		return outer;
	},

	renderThumbnailSelected: function() {

	},

	selectFirstSimpleGalleryImageOnContentReady: function(caller, id, info, image) {
		ContentRenderer.selectImageFromGallery(caller, id, info, image, true);
	},

	selectImageFromGallery: function(caller, id, image, thumbnail, inSimpleGallery) {
		try {
			var container = new YAHOO.util.Element(document.getElementById(id));

			while (container.hasChildNodes()) {
				var cn = YAHOO.util.Dom.getFirstChild(container);

				container.removeChild(cn);
			}
/*
			var pic = new YAHOO.util.Element(document.createElement("img"), {
				src: image.gallery,
				alt: image.alt
			});

			upperLeft.removeClass("boxUL");
			upperLeft.removeClass("boxProdUL");
			lowerRight.removeClass("boxLR");
			lowerRight.removeClass("boxProdLR");
*/

			var viewer = image.viewer;
			var borderContainer = document.createElement("div");
			var pic = document.createElement("img");

			pic.src = image.gallery;
			pic.alt = image.alt;

			if (image.preview_width && image.preview_height) {
				pic.width = image.preview_width;
				pic.height = image.preview_height;
				caller.centerImageInBox(pic, 3, 240);
				pic.style.position = "relative";
/*
				if (image.preview_width > 240) {
					pic.style.position = "relative";

					// Font size: 12px
					var left = (image.preview_width - 240.0) / 12.0 / 2.0;

					if (navigator.userAgent.match(/MSIE/)) {
						left = (left * 0.9759).toFixed(2);
					}
					pic.style.left = "-" + left + "em";
				}
				if (image.preview_height < 240) {
					var sizeAndOffset = caller.getImageSizeAndOffset(3);
					var styles = caller.calculateImagePosition(image.preview_width, image.preview_height, sizeAndOffset.size, sizeAndOffset.offset);

					pic.style.width = styles.w;
					pic.style.height = styles.h;
					pic.style.position = styles.position;
					pic.style.top = styles.top;
				}
*/
			}
			// Add Border
			var borderOuter = new YAHOO.util.Element(document.createElement("div"));
			var borderInner = new YAHOO.util.Element(document.createElement("div"));

			borderOuter.addClass("boxProdUL");
			borderOuter.addClass("boxUL");
			borderInner.addClass("boxProdLR");
			borderInner.addClass("boxLR");
			borderOuter.appendChild(borderInner);

			borderContainer = new YAHOO.util.Element(borderContainer);
			borderContainer.addClass("previewBorderOnTop");
			borderContainer.appendChild(borderOuter);

			container.appendChild(pic);
			container.appendChild(borderContainer);

			// add and remove thumbnail markers
			//var allThumbnails = YAHOO.util.Dom.getElementsByClassName("thumbnailBorderOnTop", "a", "boxNewDetailContainer_right");
			var allThumbnails = YAHOO.util.Dom.getElementsByClassName("thumbnailBorderOnTop", "a");

			for (var i = 0; i < allThumbnails.length; i++) {
				var tn = allThumbnails[i];
				YAHOO.util.Dom.removeClass(tn, "tnSelected");
			}
			YAHOO.util.Dom.addClass(thumbnail, "tnSelected");
		}
		catch (e) {
			//DEBUG("Error in selectImageFromGallery(): " + e);
		}
	},

	sortImagesByPVID: function(first, second) {
		try {
			if (first.id < second.id) {
				return -1;
			} else if (first.id > second.id) {
				return 1;
			} else {
				return 0;
			}
		}
		catch (e) {
			return 0;
		}
	}
};

