/**
 * @author 		Serve it V.O.F.
 * @copyright	Copyright (c) Serve it V.O.F. 2010
 */
var Banners = function() {
	var self = this;

	this.intBannersRotatieSnelheid = 0;
	this.intBannerFadeSpeed = 1500;
	this.strRandomParam = Math.random();// ($.browser.msie) ? "?" + Math.random() : "";
	this.strCurrentURL = "";
	this.strLocalBaseURI = "";

	this.$divBannerInfo = null;
	this.$divBannerInfoContent = null;

	this.init = function() {
		$(document).ready(function() {
			self.$divBannerInfo = $("#divBannerInfo");
			self.$divBannerInfoContent = $("#divBannerInfo > div.banner_content");

			setTimeout(function() {
				self.wisselBanner();
			}, self.intBannersRotatieSnelheid);

			$("div.sponsors div.banner").hover(
				function() {
					var strTitle = $(this).find("img").attr("title");
					if (strTitle.trim().length > 0) {
						self.$divBannerInfoContent.html(strTitle.replace("\n", "<br>"));
						self.$divBannerInfo.css("visibility", "hidden").show();

						var offset = $(this).offset();
						self.$divBannerInfo.css({
							left: offset.left - (self.$divBannerInfo.width() / 2) + 24,
							top: offset.top - self.$divBannerInfo.height() - 10,
							visibility: "visible"
						});
					}
				},
				function() {
					self.$divBannerInfo.hide();
				}
			);
		});
	},

	/**
	 * Appends content to the query string of a URL, handling logic for whether to place
	 * a question mark or ampersand.
	 * @param {String} url The URL to append to.
	 * @param {String} s The content to append to the URL.
	 * @return (String) The resulting URL
	 */
	this.urlAppend = function(url, s){
		return url + (url.indexOf('?') === -1 ? '?' : '&') + s;
	},

	this.wisselBanner = function() {
		var intAantalBannerPosities = $("div.sponsors div.banner").length;
		var intBannersLoaded = 0;

		var i;

		$.ajax({
			data: {
				method: "zmod_banners_geefRandomBanner"
			},
			dataType: "xml",
			success: function(data, textStatus) {
				var arrBanners = [];
				$("banner", data).each(function(i) {
					arrBanners.push({
						url: $("url", this).text(),
						afbeelding_url: $("afbeelding_url", this).text(),
						omschrijving: $("omschrijving", this).text()
					});
				});

				// Bepaal aantal banners om weer te geven, gebruik kleinste aantal
				if (arrBanners.length != intAantalBannerPosities) {
					if (intAantalBannerPosities > arrBanners.length) {
						// Er zijn teveel banner posities, verwijderen
						if (arrBanners.length == 0)
							$("div.sponsors div.banner").fadeOut("normal", function() {
								$(this).remove();
							});
						else
							$("div.sponsors div.banner").slice(arrBanners.length).fadeOut("normal", function() {
								$(this).remove();
							});
					}
					else {
						// Toevoegen
						var intAantalToevoegen = arrBanners.length - intAantalBannerPosities;
						for (i = 0; i < intAantalToevoegen; i++) {
							$(document.createElement("div"))
								.addClass("banner")
								.css("display", "inline-block")
								.append(
									$(document.createElement("a"))
										.attr({
											target: "_blank",
											href: "#"
										})
										.append(
											$(document.createElement("img"))
												.attr({
													alt: "",
													src: self.strLocalBaseURI + "images/blank.gif",
													title: ""
												})
												.css({
													height: 60,
													width: 120
												})
										)
								)
								.appendTo("div.sponsors");
						}
					}
				}

				if (arrBanners.length == 0) {
					setTimeout(function() {
						self.wisselBanner()
					}, self.intBannersRotatieSnelheid);
					return;
				}

				for (i = 0; i < arrBanners.length; i++) {
					// Nieuwe afbeelding
					if ($.browser.msie) arrBanners[i].afbeelding_url = self.urlAppend(arrBanners[i].afbeelding_url, Math.random());
					$(document.createElement("img"))
						.attr({
							alt: "",
							title: arrBanners[i].omschrijving,
							i: i
						})
						.hide()
						.load(function() {
							var intI = $(this).attr("i");

							var imgOld = $("div.sponsors > div.banner:eq(" + intI + ") > a > img");
							var imgNew = $(this);
							var intHeight = this.height;
							var intWidth = this.width;

							$("div.sponsors > div.banner:eq(" + intI + ") > a")
								.attr("href", arrBanners[intI].url)
								.append(imgNew);

							$(this).delay(intI * self.intBannerFadeSpeed / 2, function() {
								// Fade out
								imgOld.fadeOut(self.intBannerFadeSpeed, function() {
									$(imgOld).remove();
								});

								// Fade in
								imgNew.fadeIn(self.intBannerFadeSpeed, function() {
									// Queue nieuwe request pas als alle banners geladen zijn
									intBannersLoaded++;
									if (intBannersLoaded == arrBanners.length)
										setTimeout(function() {
											self.wisselBanner()
										}, self.intBannersRotatieSnelheid);
								});
							});
						})
						.attr("src", arrBanners[i].afbeelding_url)
				}
			},
			type: "POST",
			url: self.strCurrentURL
		});
	}
};

