/* BUG SOLVE
 *
 * This code solves many problems related to when IE6 users have page loads set to always
 ************************************************************************************************/
try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}

var GolHelperFunctions = {
	dimensionsToFitInBox: function(dataObj) {
		var boxSize = dataObj.boxSize;
		var itemSize = dataObj.itemSize;
		var adjustedDimensions = {
			width: 0,
			height: 0,
			xOffset: 0,
			yOffset: 0	
		}
		if (itemSize.width/itemSize.height > boxSize.width/boxSize.height) {
			adjustedDimensions.height = boxSize.height;
			adjustedDimensions.width = Math.round(adjustedDimensions.height/itemSize.height * itemSize.width);
			adjustedDimensions.xOffset = -Math.round((adjustedDimensions.width - boxSize.width)/2);
			adjustedDimensions.yOffset = 0;
		} 
		else {
			adjustedDimensions.width = boxSize.width;
			adjustedDimensions.height = Math.round(adjustedDimensions.width/itemSize.width * itemSize.height);
			adjustedDimensions.yOffset = -Math.round((adjustedDimensions.height - boxSize.height)/2);
			adjustedDimensions.xOffset = 0;
		}
		return adjustedDimensions;
	},
	getFullHeightOfEl: function(dataObj) {
		var self = this;
		var domEl = dataObj.domEl;
		var height = $(domEl).height()+parseInt($(domEl).css("paddingTop"))+parseInt($(domEl).css("paddingBottom"));
		return height;
	}

}

var GolVideoGallery = function(dataObj) {
	this.domRootEl = dataObj.domRootEl;
	this.domVideoHolder = $(this.domRootEl).find(".gol-g-video-holder").get()[0];
	this.objCarousel = "";
	this.selectedItem = "";
	this.currentlyAnimating = false;
	this.mainVideoDimensions = {
		width: $(this.domVideoHolder).width(),
		height: $(this.domVideoHolder).height()	
	}
	this.isIE = window.ActiveXObject ? true : false; // ActiveX is only used in Internet Explorer
	return this;
}

GolVideoGallery.prototype = {
	init: function() {
		var self = this;
		self.objCarousel = new GolCarousel({
			domRootEl:$(self.domRootEl).find(".gol-g-carousel-holder").get()[0],
			clickFunction: function(dataObj) {
				var itemToDisplay =  dataObj.itemToDisplay;
				if (self.selectedItem != itemToDisplay) {
					self.displayItem({
						item: itemToDisplay
					});
				} 
			}	
		}).init();
		
		return self;
	},
	displayItem: function(dataObj) {
		var self = this;
		var item = dataObj.item;
		var videoUrl = item.itemData;
		var helperEl = $("<div></div>").get()[0];
		$(helperEl).append(item.itemData);
		var vimeoId = $(helperEl).find(".gol-video-id").text();
		var videoDimArray = $(helperEl).find(".gol-video-dimensions").text().split(",");
		// This is where we should delete the existing video and display the new one
		var videoDim = {
			width: videoDimArray[0],
			height: videoDimArray[0]	
		}
		$(self.domVideoHolder)
		.empty()
		.append(self.getVideoEmbedHTML({ id: vimeoId, dimension: videoDim } ));
	},
	getVideoEmbedHTML: function(dataObj) {
		var self = this;
		var videoId = dataObj.id;
		var insertHTML = "";
		if (!self.isIE) {
			insertHTML += '<object width="600" height="344">';
			insertHTML += '<param name="allowfullscreen" value="true" />';
			insertHTML += '<param name="allowscriptaccess" value="always" />';
			insertHTML += '<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id='+videoId+'&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=f80862&amp;fullscreen=1" />';
			insertHTML += '<embed src="http://vimeo.com/moogaloop.swf?clip_id='+videoId+'&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=f80862&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="344">';
			insertHTML += '</embed>';
			insertHTML += '</object>';
		}
		else {
			insertHTML += '<embed src="http://vimeo.com/moogaloop.swf?clip_id='+videoId+'&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=f80862&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="344">';
			insertHTML += '</embed>';
		}
		return insertHTML;
	}
}

var GolGallery = function(dataObj) {
	this.domRootEl = dataObj.domRootEl;
	this.domMainImageHolder = $(this.domRootEl).find(".gol-g-main-image").get()[0];
	this.domMainImage = $(this.domMainImageHolder).find("img").get()[0];
	this.domNextImageHolder = $(this.domRootEl).find(".gol-g-next-image").get()[0];
	this.domNextImage = $(this.domNextImageHolder).find("img").get()[0];
	this.domCaption = $(this.domRootEl).find(".gol-g-main-image-caption").get()[0];
	this.objCarousel = "";
	this.selectedItem = "";
	this.currentlyAnimating = false;
	this.mainImageDimensions = {
		width: $(this.domMainImageHolder).width(),
		height: $(this.domMainImageHolder).height()	
	}
	this.isIE = window.ActiveXObject ? true : false; // ActiveX is only used in Internet Explorer
	return this;
}

GolGallery.prototype = {
	init: function() {
		var self = this;
		self.objCarousel = new GolCarousel({
			domRootEl:$(self.domRootEl).find(".gol-g-carousel-holder").get()[0],
			clickFunction: function(dataObj) {
				var itemToDisplay =  dataObj.itemToDisplay;
				if (self.selectedItem != itemToDisplay) {
					self.displayItem({
						item: itemToDisplay
					});
				} 
			}	
		}).init();
		
		return self;
	},
	displayItem: function(dataObj) {
		var self = this;
		if (!self.currentlyAnimating) {
			self.currentlyAnimating = true;
			var item = dataObj.item;
			// If no item has been selected, we must be about to display the first image. In this case
			// we want to do everything instantly rather than animated, so set time to 0
			var duration = (this.selectedItem) ? 500 : 0;
			if (self.isIE) {
				duration = 0;
			}
			this.selectedItem = item;
			var captionHeight = GolHelperFunctions.getFullHeightOfEl({ domEl: self.domCaption });
			$(self.domCaption).animate({ bottom: - captionHeight }, duration, function() {
				$(self.domCaption).css({visibility: "hidden"}).html(item.itemData);
				var newCaptionHeight = GolHelperFunctions.getFullHeightOfEl({ domEl: self.domCaption });
				$(self.domCaption).css({bottom: -newCaptionHeight });
				$(self.domNextImage).attr("src",item.url);
				var newDimensions = GolHelperFunctions.dimensionsToFitInBox({
					boxSize: self.mainImageDimensions,
					itemSize: item.dimensions
				});
				$(self.domNextImage).css({
					width: newDimensions.width+"px",
					height: newDimensions.height+"px",
					left: newDimensions.xOffset+"px",
					top: newDimensions.yOffset+"px"
				});


				$(self.domNextImageHolder).animate({ opacity: 1 }, duration, function() {
					$(self.domMainImage)
					.attr("src",item.url)
					.css({
						width: newDimensions.width+"px",
						height: newDimensions.height+"px",
						left: newDimensions.xOffset+"px",
						top: newDimensions.yOffset+"px"
					});
					
					$(self.domNextImageHolder).css({opacity: 0 });
					$(self.domCaption).
					css({ visibility: "visible" }).
					animate({ bottom: 0 }, duration, function() {
						self.currentlyAnimating = false;
					});
				});
			});
		}
		
	}
}

var GolCarousel = function(dataObj) {
	this.domRootEl	= dataObj.domRootEl;
	this.clickFunction = dataObj.clickFunction;
	this.domNextButton = $(this.domRootEl).find(".gol-g-carousel-next").get()[0];
	this.domPrevButton = $(this.domRootEl).find(".gol-g-carousel-prev").get()[0];
	this.domStage = $(this.domRootEl).find(".gol-g-carousel-stage").get()[0];
	this.domItems = $(this.domStage).find(".gol-g-carousel-item").get();
	this.objItems = new Array();
	this.itemBoxDimension = {
		width: $(this.domItems[0]).width(),
		height: $(this.domItems[0]).height()
	}
	this.itemDimensions = {
		width: this.itemBoxDimension.width+parseInt($(this.domItems[0]).css("marginLeft"))+parseInt($(this.domItems[0]).css("marginRight")),
		height: this.itemBoxDimension.height
	}
	this.numVisibleItems = Math.ceil($(this.domRootEl).width()/this.itemDimensions.width);
	this.leftMostItem = 0;
	this.numItems = this.domItems.length;
	this.currentlyAnimating = false;
	return this;
}

GolCarousel.prototype = {
	init: function() {
		var self = this;
		var counter = 0;
		$.each(self.domItems, function() {
			
			var thisdomImage = $(this).find("img").get()[0];
			var anItemObj = {
				position: counter++,
				domImage: thisdomImage, 
				url: $(thisdomImage).attr("src"),
				itemData: $(this).find(".gol-g-item-data").html(),
				dimensions: {
					width: 0,
					height: 0	
				},
				isLoaded: false
			}
			
			self.objItems.push(anItemObj);
			
			var initialiseImage = function() {
				anItemObj.dimensions.width = $(thisdomImage).width();
				anItemObj.dimensions.height = $(thisdomImage).height();
				anItemObj.isLoaded = true;
				self.initialiseItem({
					item: anItemObj
				});
			}
			
			if (!thisdomImage.complete) {
				$(thisdomImage).load( function() {
					initialiseImage();
				});
			}
			else {
				initialiseImage();
			}
			
			$(anItemObj.domImage).click( function() {
				if (anItemObj.isLoaded) {
					self.clickFunction({
						itemToDisplay: anItemObj					
					});
				}
				return false;
			});
			

		});

		self.updateButtonVisibility();
		$(self.domNextButton).click( function() {
			var tryNewPos = self.leftMostItem + self.numVisibleItems;
			var newPos = (tryNewPos >= (self.numItems - self.numVisibleItems)) ? self.numItems - self.numVisibleItems : tryNewPos;
			self.scrollTo({
				position: newPos
			});
			return false;
		});
		$(self.domPrevButton).click( function() {
			var tryNewPos = self.leftMostItem - self.numVisibleItems;
			var newPos = (tryNewPos < 0) ? 0 : tryNewPos;
			self.scrollTo({
				position: newPos
			});
			return false;
		});
		return self;
	},
	updateButtonVisibility: function() {
		var self = this;
		if (self.leftMostItem == 0 || self.numItems <= self.numVisibleItems) {
			$(self.domPrevButton).css({display:"none"});
		}
		else {
			$(self.domPrevButton).css({display:"block"});
		}
		if (self.leftMostItem >= (self.numItems-self.numVisibleItems) || self.numItems <= self.numVisibleItems) {
			$(self.domNextButton).css({display:"none"});
		}
		else {
			$(self.domNextButton).css({display:"block"});
		}
	},
	scrollTo: function(dataObj) {
		var self = this;
		if (!self.currentlyAnimating) {
			self.currentlyAnimating = true;
			self.leftMostItem = dataObj.position;
			self.updateButtonVisibility();
			$(self.domStage).animate( {left: -self.leftMostItem*self.itemDimensions.width}, 500, function() {
				self.currentlyAnimating = false;
			});
		}
	},
	initialiseItem: function(dataObj) {
		var self = this;
		var item = dataObj.item;	
		var newDimensions = GolHelperFunctions.dimensionsToFitInBox({
			boxSize: self.itemBoxDimension,
			itemSize: item.dimensions
		});
		$(item.domImage).css({
			width: newDimensions.width+"px",
			height: newDimensions.height+"px",
			left: newDimensions.xOffset+"px",
			top: newDimensions.yOffset+"px",
			opacity: 1
		});
		
		if (item.position === 0) // Load the first item
		self.clickFunction({
			itemToDisplay: item					
		});
	}
}

$(document).ready( function() {
	$(".gol-navigation li:not(.selected)").each( function() {
		
		$(this).find("span.top").hover( function() {
			$(this).stop().animate({top: -31}, 500);
		}, function() {
			$(this).stop().animate({top: 0}, 500);
		});
	});
	
	$(".gol-image-gallery").each( function() {
		var imageGallery = new GolGallery({
			domRootEl: this
		}).init();
		
	});

	$(".gol-video-gallery").each( function() {
		var videoGallery = new GolVideoGallery({
			domRootEl: this
		}).init();
	});

	$(".gol-comment-block").each( function() {
		var commentBlock = this;
		var reportMessage = $(this).find(".comment-complaint-message").get()[0];
		$(this).find(".report-this-comment").click( function() {
			var commentText = $(commentBlock).find("p:eq(0)").text();
			$(this).remove();
			var commentDetails = $(commentBlock).find("h5").text();
			$(reportMessage).css({ display:"block"});
			$.get("/assets/php/send-holly-a-comment-complaint-email.php", { 
				commentText: commentText, 
				commentDetails: commentDetails
			}, function(xml) {
				// alert($(xml).find("success").text());
			});
			return false;
		});
	});	

	$("#become-a-helper-form").each( function() {
		var domSuccessMessage = $(this).find(".ajk-verifier-success-message").get()[0];
		var myVerifier = new AJKVerifier({
			domRootEl: this,
			submitFunc: function(dataObj) {
				var fieldData = dataObj.fieldData;
				
				$.get("/assets/php/email-holly-helper-details.php", fieldData, function(xml) {
					$(domSuccessMessage).css({ display: "block" });
					myVerifier.clearFields();
				});
			}
		}).init(); 
	});
	
	$("#comment-submit-form").each( function() {

		var isIE6 = window.ActiveXObject ? true : false; // ActiveX is only used in Internet Explorer

		if (window.external && (typeof window.XMLHttpRequest == "object")) {
			isIE6=false;
		}
		
		if (isIE6) {
			return false;	
		}

		var commentForm = this;
		var myVerifier = new AJKVerifier({
			domRootEl: this,
			submitFunc: function(dataObj) {
				var fieldData = dataObj.fieldData;
				$(commentForm).unbind("submit");
				commentForm.submit();
			}
		}).init(); 
	});

});