if (location.href.match("/sitecore/shell/") == null) {

/**
 * Copyright 2009 Cedric Michaux :: LBi (cedric.michaux@lbigroup.be)
 */

(function($){
	$.fn.zoomin = function(options){
		
		this.each(function(){
			this.$list = $(this);
			this.opt = {
				images:{
					print : "design/allia/images/zoomIn/zoomin_printIcon.gif",
					zoom : "design/allia/images/zoomIn/zoomin_zoomIcon.gif"
				},
				minSizesOverlay: {
					height : 300,
					width : 300
				},
				print : (this.$list.hasClass("zoomin-print"))? true : false,
				skin : (this.$list.attr("class").search(/skin/i) > -1) ?  (function(cssClass){
					classes = cssClass.split(" ");
					for (i in classes){
						if(classes[i].search(/skin/i) > -1)
							return classes[i]
					}
				})(this.$list.attr("class")) : "zoomin-skin-default",
				classes: {
					base: {
						container		: "zoomInBox zoomin-container",
						carrouselColumn	: "zoomin-carousel",
						carrouselList	: "jcarousel",
						visualContainer	: "zoomin-visualContainer",
						visual			: "zoomin-visual",
						zoomLink		: "zoomin-zoomlink",
						zoomIcon		: "zoomin-zoomicon",
						printLink		: "zoomin-printLink"
					},
					overlay: {
						background: "zoomin-overlayBg",
						container: "zoomin-overlay",
						close: "zoomin-close",
						carousel: "zoomin-carousel"
					}
				},
				ressources: {
					close: (typeof jz_ressources != "undefined" && typeof jz_ressources.close != "undefined") ? jz_ressources.close : "Close"
				}
			}
			$.extend(this.opt, options)
			
			
			
			
			
			
			this.createComponent = function(){
				var $li, $a, $img;
				this.id = this.$list.attr("id")
				if(this.id == "")
					this.id = $.fn.zoomin.generateId();
				
				this.createObject(this.$list);
				
				
				
				containerClass = (this.$list.attr("class").search(/skin/i) > -1) ?  this.$list.attr("class") : this.$list.attr("class") + this.opt.skin;
				this.$list.addClass("vertical").wrap($(document.createElement("div")).addClass(this.opt.classes.base.container).addClass(containerClass)).wrap($(document.createElement("div")).addClass(this.opt.classes.base.carrouselColumn)).empty();
				
				for(i = 0; $.fn.zoomin.gallery[this.id].length > i;i++){
					
					$li = $(document.createElement("li"));
					
					$a = $(document.createElement("a"))
						.attr("rel", "zoomin-thumb")
						.attr("href", $.fn.zoomin.gallery[this.id][i].small.visual.src)
						.attr("title", $.fn.zoomin.gallery[this.id][i].small.visual.alt)
						.attr("zoomin-index", i)
						.bind("click", function(e){
							e.preventDefault();
							$.fn.zoomin.selectItem($(this));
						});
						
					$img = $(document.createElement("img"))
						.addClass($.fn.zoomin.gallery[this.id][i].small.thumb.cssClass)
						.attr("alt", $.fn.zoomin.gallery[this.id][i].small.thumb.alt)
						.attr("src", $.fn.zoomin.gallery[this.id][i].small.thumb.src+"?ver="+parseInt(Math.random() * 1000000000000000));
					
					
					this.$list.append($li.append($a.append($img)));
					this.$list.find("li a:first").addClass("selected");
				}
				
				this.$list.jcarousel({
					vertical: true
				});
				
				this.$container = $(this).parents("." + this.opt.classes.base.container.replace(" ", "."))
				
				
				
				this.$container.attr("id", this.id+"-container").append($(document.createElement("div")).addClass(this.opt.classes.base.visualContainer)).append($(document.createElement("div")).addClass("clr"));
				this.$visualContainer = this.$container.find("." + this.opt.classes.base.visualContainer.replace(" ", "."));
				
				this.$visualContainer
					.append($(document.createElement("img"))
						.attr("src", $.fn.zoomin.gallery[this.id][0].small.visual.src)
						.addClass(this.opt.classes.base.visual)
						.attr("alt", $.fn.zoomin.gallery[this.id][0].small.visual.alt)
						.attr("id", this.id+"_visual_small")
					)
					.append($(document.createElement("a"))
						.addClass(this.opt.classes.base.zoomLink)
						.attr("href", "#")
						.append($(document.createElement("img"))
							.addClass(this.opt.classes.base.zoomIcon)
							.attr("src", this.opt.images.zoom)
							.attr("alt", "Zoom")
							.attr("rel", this.id+"-overlayBg|"+this.id+"-overlay")
							.bind("click", function(){
								rels = $(this).attr("rel").split("|");
								items = rels.join(", #");
								$("#"+items).show();
								var parId = $(this).parents(".zoomin-container").attr("id");
								$.fn.zoomin.resizeOverlay(parId.substring(0, parId.lastIndexOf("-")));
								
							})
						)
					);
				
				$("[rel=#"+this.id+"]")
					.attr("rel", this.id+"-overlayBg|"+this.id+"-overlay")
					.bind("click", function(){
						rels = $(this).attr("rel").split("|");
						items = rels.join(", #");
						$("#"+items).show();
						var parId = rels[1].substring(0, rels[1].lastIndexOf("-"));
					});
					
				this.createOverlay();
			}
			
			
			this.createObject = function($list){
				var gallery = [];
				$list.children("li").each(function(){
					var $img = $(this).find("img");
					var $lnk = $(this).find("a");
					big = $lnk.attr("rel").split("|");
					gallery.push({
						small: {
							thumb: {
								src: $img.attr("src"),
								alt: $img.attr("alt"),
								cssClass: $img.attr("class")
							},
							visual: {
								src: $lnk.attr("href"),
								alt: $img.attr("alt"),
								cssClass: $lnk.attr("class")
							}
						},
						
						big: {
							thumb: {
									src: big[1],
									alt: $img.attr("alt"),
									cssClass: $img.attr("class")
								},
							visual:{
								src: big[0],
								alt: $img.attr("alt"),
								cssClass: $lnk.attr("class")
							}
						}
					})
				})
				$.fn.zoomin.gallery[this.id] = gallery;
			}
			
			
			
			
			
			this.createOverlay = function(){
				
				this.$overlay = $(document.createElement("div"))
					.addClass(this.opt.classes.overlay.container)
					.addClass("overlay").addClass(this.opt.skin)
					.addClass("zoomin-overlay")
					.attr("id", this.id+"-overlay")
					.attr("minimumHeight", this.opt.minSizesOverlay.height)
					.attr("minimumWidth", this.opt.minSizesOverlay.width);
				
				
				linkContainer = $(document.createElement("div")).attr("id", this.id+"-linkContainer").addClass("zoomin-linkContainer");
				
				if(this.opt.print){
					this.$printLink = $(document.createElement("a"))
					.attr("id", this.id+"-printLink")
					.addClass(this.opt.classes.base.printLink)
					.attr("href", "#")
					.append($(document.createElement("img")).attr("src", this.opt.images.print))
					.bind("click", function(){
						window.print();
					});
					
					linkContainer.append(this.$printLink);
				}
				
				this.$overlayClose = $(document.createElement("a"))
					.addClass(this.opt.classes.overlay.close)
					.click(function(e){
						e.preventDefault();
						$(".zoomin-overlay, .zoomin-overlayBg").hide();
					})
					.attr("href", "#")
					.text(this.opt.ressources.close);
				
				linkContainer.append(this.$overlayClose);
				
				this.$overlayList = $.fn.zoomin.createOverlayList(this.$list.attr("class"), this.id);
				
				$listContainer = $(document.createElement("div")).addClass(this.opt.classes.overlay.carousel).attr("id", this.id+"-carouselContainer");
				this.$overlay.addClass(this.opt.classes.base.container).append($listContainer.append(this.$overlayList));
				
				
				
				this.$overlay.append($(document.createElement("div")).addClass(this.opt.classes.base.visualContainer)).append($(document.createElement("div")).addClass("clr"));
				this.$overlayVisualContainer = this.$overlay.find("." + this.opt.classes.base.visualContainer.replace(" ", "."));
				
				this.$overlayVisualContainer
					.append($(document.createElement("img"))
						.attr("src", $.fn.zoomin.gallery[this.id][0].big.visual.src)
						.addClass(this.opt.classes.base.visual)
						.attr("alt", $.fn.zoomin.gallery[this.id][0].big.visual.alt)
						.attr("id", this.id+"_visual_big")
					);
				
				$("#"+this.id+"_visual_big").bind("load", function(){
					var parId = $(this).parents(".zoomin-container").attr("id");
					$.fn.zoomin.resizeOverlay(parId.substring(0, parId.lastIndexOf("-")));
				});
				
				$("body")
					.append($(document.createElement("div"))
						.addClass(this.opt.skin)
						.addClass(this.opt.classes.overlay.background)
						.addClass("zoomin-overlayBg")
						.attr("id", this.id+"-overlayBg")
						.bind("click", function(e){
							e.preventDefault();
							$(".zoomin-overlay, .zoomin-overlayBg").hide();
						})
					)
					.append(this.$overlay.append(linkContainer));
			}
			
			this.createComponent();
			
		});
	}
	
	$.fn.zoomin.generateId = function(){
		return "zoomin-" + parseInt(Math.random() * 1000000000000000);
	}
	
	$.fn.zoomin.createOverlayList = function(cssClass, id){
		tmp = $(document.createElement("ul")).attr("class", cssClass);
		
		for(i = 0; $.fn.zoomin.gallery[id].length > i;i++){
			
			$li = $(document.createElement("li"));
			
			$a = $(document.createElement("a"))
				.attr("rel", "zoomin-thumb")
				.attr("href", $.fn.zoomin.gallery[id][i].big.visual.src)
				.attr("title", $.fn.zoomin.gallery[id][i].big.visual.alt)
				.attr("zoomin-index", i)
				.bind("click", function(e){
					e.preventDefault();
					e.stopPropagation() 
					e.cancelBubble = true;
					$.fn.zoomin.selectItem($(this));
				});
				
			// QUGY
			if ($.fn.zoomin.gallery[id][i].big.thumb.src.indexOf("?") >= 0) {var argSep = "&"} else {var argSep = "?"}
			
			$img = $(document.createElement("img"))
				.addClass($.fn.zoomin.gallery[id][i].big.thumb.cssClass)
				.attr("alt", $.fn.zoomin.gallery[id][i].big.thumb.alt)
				.attr("src", $.fn.zoomin.gallery[id][i].big.thumb.src+argSep+"v="+parseInt(Math.random() * 1000000000000000))
				
			tmp.append($li.append($a.append($img)));
			tmp.find("li a:first").addClass("selected");
		}
		return tmp;
	}
	
	
	$.fn.zoomin.resizeOverlay = function(id){
		$("#"+id+"-overlay #"+id+"-carouselContainer:not(.jcarousel-container-vertical) ul").jcarousel({
			vertical: true
		});
		
		var w = $("#"+id+"-overlay").attr("minimumWidth"),
		h = $("#"+id+"-overlay").attr("minimumHeight");
		
		size = $.fn.zoomin.computeOverlaySize(id);
		
		size.width = (size.width < w) ? w : size.width;
		size.height = (size.height < h) ? h : size.height;
		
		$("#"+id+"-overlay")
			.width(parseInt(size.width))
			.height(parseInt(size.height))
			.css({
				'margin': '-' + (parseInt(size.height / 2) - $('.zoomin-linkContainer').height()) + 'px 0 0 -' + parseInt(size.width / 2) + 'px'
			});
			/* .css({"margin": "-"+parseInt(size.height/2)+"px 0 0 -"+parseInt(size.width/2)+"px"}); */
		
		var overlayHeight = parseInt($('#' + id + '-overlay').height());
		var windowHeight = parseInt($(window).height());
		var heightDiff = overlayHeight - windowHeight;
		var marginTop = parseInt($('#' + id + '-overlay').css('margin-top'));
		
		if (overlayHeight >= windowHeight) $('#' + id + '-overlay').css('margin-top', marginTop + (heightDiff / 2));
		
		$("#"+id+"-overlay .jcarousel-clip").height(size.height - 63);
	}
	
	
	
	
	$.fn.zoomin.selectItem = function($this){
		
		// QUGY
		var pid = $this.parents(".zoomin-container").attr("id"),
		id = pid.substring(0, pid.lastIndexOf("-")),
		index = $this.attr("zoomin-index");
		if ($.fn.zoomin.gallery[id][index].big.visual.src.indexOf("?") >= 0) {argSep = "&"} else {argSep = "?"}
		
		$("#" + id + "_visual_big")
			.hide()
			.attr("src", $.fn.zoomin.gallery[id][index].big.visual.src+argSep+"v="+parseInt(Math.random() * 1000000000000000))
			.attr("alt", $.fn.zoomin.gallery[id][index].big.visual.alt)
			.bind("load", function(){
				$(this).show();
				var parId = $(this).parents(".zoomin-container").attr("id");
				$.fn.zoomin.resizeOverlay(parId.substring(0, parId.lastIndexOf("-")));
			});
		
		// QUGY
		if ($.fn.zoomin.gallery[id][index].small.visual.src.indexOf("?") >= 0) {argSep = "&"} else {argSep = "?"}

		$("#" + id + "_visual_small")
			.attr("src", $.fn.zoomin.gallery[id][index].small.visual.src+argSep+"v="+parseInt(Math.random() * 1000000000000000))
			.attr("alt", $.fn.zoomin.gallery[id][index].small.visual.alt);
	
		$("#"+id+"-container li a.selected, #"+id+"-overlay li a.selected").removeClass("selected");
		$("#"+id+"-container li a[zoomin-index="+index+"], #"+id+"-overlay li a[zoomin-index="+index+"]").addClass("selected")
		
	}
	
	$.fn.zoomin.computeOverlaySize = function(id){
		return {
			width: 	$("#"+id+"_visual_big").width() + $("#"+id+"-carouselContainer").width()+ 8,
			height:	$("#"+id+"_visual_big").height() + 12
		} 
	}
	$.fn.zoomin.gallery = {}
})(jQuery);

}
