/*!
 * jQuery SomethingWicked Plugin
 * Author: Ernest Lombardi
 *
 * Required files:
 * jquery.somethingWicked.js
 * /css/somethingWicked.css
 * /images/resultset_previous.png
 * /images/resultset_next.png
*
 * Copyright (c) 2010 E.Lombardi: http://www.ernestlombardi.com/
 * Version: 1.0 (30-JAN-2010)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Requires: jQuery v1.3.x or later
 */

(function($) {

	$.fn.somethingWicked = function(options){
		
		$(".carouselControl").remove();		
		
		config = $.extend({}, $.fn.somethingWicked.defaults, options);
		
		config.gallery = new Array();
		
		config.maxHeight = 0;
		
		this.addClass("somethingWicked").css({"width" : config.galleryContainerWidth});
			
		if(config.galleryPath != ""){
			
			//alert(config.galleryPath);
			
			$(".somethingWicked ul li").remove();
			
			$.ajax({
				url: config.galleryPath,
				dataType: "json",
				cache: false,
				success: function(data){
	
					$.each(data.items, function(i, item){
							
						var galleryImage = document.createElement('img');
						
						galleryImage.src = item.media.m + "?" + Math.floor(Math.random() * 1000);
						
						galleryImage.alt = item.description;
						
						galleryImage.title = item.title;
	
						galleryImage.onload = $("<a>").html(galleryImage).appendTo($(".somethingWicked ul")).wrap("<li>");
						
						config.gallery.push(galleryImage);
	
					});
		
					$(".somethingWicked").show().children("ul").css({"visibility" : "hidden"});	
							
					$(".somethingWicked .carouselControl").show();					
					
				},
				complete: function(){
					
					var t = setTimeout("$.fn.somethingWicked.scaleImages()", 1100);
	
				}
	
			});	
			
		}else{

			//var t = setTimeout("$.fn.somethingWicked.scaleImages()", 200);
			$.fn.somethingWicked.scaleImages();
			
			$(".somethingWicked").show();
			
			$(".somethingWicked img").show();
					
			$(".somethingWicked .carouselControl").show();					
		
		}

	};
	
	$.fn.somethingWicked.scaleImages = function(){

		$('.somethingWicked ul li a img').each(function(){
			
			if(!$(this).height() > 0){

				var t = setTimeout("", 4000);
				
			}	
			
			var height = $(this).height();
			
			var width = $(this).width();
			
			if(!height > 0){

				height = $(this).attr("height");
				
				width = $(this).attr("width");
				
			}				
			
			var scaled = Math.round((height * config.galleryItemWidth) / width);
			
			$(this).css({"height" : scaled});
			
			if(config.maxHeight < scaled){
	
				config.maxHeight = scaled;
	
			}
			
		});

		$.fn.somethingWicked.align();

	};
	
	$.fn.somethingWicked.align = function(){
	
		var carouselWidth = $(".somethingWicked ul li a img").size() * config.galleryItemWidth;
	
		var carouselOffset = config.galleryItemWidth / 4;
		
		$(".somethingWicked ul").css({"width" : carouselWidth, "height" : config.maxHeight + 43, "margin-left" : -1 * carouselOffset});

		$(".somethingWicked ul li a img").css({"width" : config.galleryItemWidth}).each(function(){
			
			var height = $(this).height();

			if(config.maxHeight != height && height != 0){
				
				var imageOffset = (config.maxHeight - height) / 2;
				
				$(this).parent().css({"margin-top" : imageOffset});	
			
			}else if(height == 0){
				
				height = $(this).parent().height();
			
				var imageOffset = (config.maxHeight - height) / 3;
				
				$(this).parent().css({"margin-top" : 10});					
			
			}

		});	
		
		$(".somethingWicked ul li a").css({"height" : config.maxHeight + 10});	
		
		var carouselOffsetY = -1 * parseInt($(".somethingWicked ul").css("height"));
		
		$(".somethingWicked").css({"height" : $(".somethingWicked ul").css("height")});
		
		$("<div><a href='#'><img src='images/resultset_previous.png' alt='Previous' title='Previous' /></a></div>").attr({"id" : "carouselStepLeft"}).addClass("carouselControl").insertBefore(".somethingWicked ul");
			
		$("<div><a href='#'><img src='images/resultset_next.png' alt='Next' title='Next' /></a></div>").attr({"id" : "carouselStepRight"}).addClass("carouselControl").insertAfter(".somethingWicked ul");		
		
		var leftControlHeight = parseInt($(".somethingWicked ul").css("height")) - parseInt($(".somethingWicked ul").css("margin-top"));
	
		$("#carouselStepLeft.carouselControl").css({"height" : leftControlHeight, "margin-top" :  parseInt($(".somethingWicked ul").css("margin-top")), "display" : "inline-block"});
		
		$("#carouselStepRight.carouselControl").css({"height" : $(".somethingWicked ul").css("height"), "top" : carouselOffsetY, "margin-top" : 0});
		
		$(".carouselControl img").css({"margin-top" : (parseInt($(".carouselControl").css("height")) / 2) - 16});

		$(".somethingWicked ul").css({"visibility" : "visible"});		
		
		$.fn.somethingWicked.initiateControls();
	
	};

	$.fn.somethingWicked.initiateControls = function(){
		
		$(".carouselControl").hover(function(){
			
			$(this).css({"opacity" : .85, "cursor" : "pointer"});
				
		}, function(){
			
			$(this).css({"opacity" : .30});
			
		}).click(function(){
			
			if($(this).attr("id") == "carouselStepLeft"){
				
				$(".somethingWicked ul li:last").prependTo($(".somethingWicked ul"));
				
			}else{
				
				$(".somethingWicked ul li:first").appendTo($(".somethingWicked ul"));
				
			}
			
			$(".highlightedImage").removeClass("highlightedImage");
			
			$(".somethingWicked ul li:first").next().next().children().children().addClass("highlightedImage");	
			
			if(config.copyContainer != ""){
				
				config.copyContainer.empty();
				
				config.copyContainer.html($(".highlightedImage").attr("alt"));
				
			}
			
			return false;
			
		});
		
		$(".somethingWicked ul li:first").next().next().children().children().addClass("highlightedImage");	
		
		if(config.copyContainer != ""){
			
			config.copyContainer.empty();
			
			config.copyContainer.html($(".highlightedImage").attr("alt"));
			
		}
		
		$(".somethingWicked ul li a img").live("click", function(){
				
			if(!$(this).hasClass("highlightedImage")){
				
				$(this).addClass("selectedImage");
				
				var index = 0;
				
				$(".somethingWicked ul li a img").each(function(i){
				
						if($(this).hasClass("selectedImage")){
						
							index = i - 2;
							
						}
						
				});
				
				for(j = 0; j < Math.abs(index); j++){
				
					if(index > 0){
						
						$("#carouselStepRight").click();
					
					}else{
						
						$("#carouselStepLeft").click();

					}
				
				}
				
				$(".selectedImage").removeClass("selectedImage");
			
			}else{
				
				$(this).clone().dialog({
					bgiframe: true,
					width: "auto",
					modal: true
				});				
			
			}
			
			return false;
			
		});		
		
	};
	
	$.fn.somethingWicked.defaults = {
		
		galleryPath: "",
		copyContainer: "",
		galleryContainerWidth: 500,
		galleryItemWidth: 75,
		maxHeight: 0,
		gallery: []		
		
	};

})(jQuery);
