(function($){
	
	/*
	 * Services
	 */
	var SERVICES = new function()
	{
		var m_endpoints =
		{
			"userLogin":"/service/login.do", // nickname, password
			"userLogout":"/service/logout.do",
			"userData":"/service/userController.do",
			"cartData":"/service/cart.do"
		}
		
		function invokeService(serviceId, parameters, successCallback, errorCallback, hideLoader)
		{
			var u = m_endpoints[serviceId];
			if (document.location.hostname=="")
			{
				u = "http://www.camomilla.it" + u;
				try 
				{
					netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
					netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				} 
				catch (err){}
			}
			if (!hideLoader)
				$.showLoader(true);
			$.ajax({
				type: "POST",
				async: true,
				url: u,
				data: parameters,
				success: function(data)
				{
					if(successCallback) 
					{
						// jquery 1.4.2 uses strict json format, 
						// use eval to parse single quotes in qualifiers
						if (data)
						{
							var d;
							eval ("d = " + data);
							successCallback(d);
						}
						else
							successCallback();
					}
				},
				error: function(a,b,c){if(errorCallback) errorCallback(a,b,c)},
				dataType: "text"
			});
		}
		
		this.User = 
		{
			login:function(nickname, pwd, successCallback, errorCallback)
			{
				invokeService("userLogin",{"nickname":nickname,"password":pwd},successCallback, errorCallback);
			},
			logout:function(successCallback, errorCallback)
			{
				invokeService("userLogout",null,successCallback, errorCallback);
			},
			getData:function(successCallback, errorCallback)
			{
				invokeService("userData",null,successCallback, errorCallback, true);
			}
		}
		
		this.Cart = 
		{
			getData:function(successCallback, errorCallback)
			{
				invokeService("cartData",null,successCallback, errorCallback, true);
			}
		}
		
	}
	
	/*
	 * Plugins
	 */
	var PLUGIN_PREFIX = "cm";
	var PLUGIN_SET = {};
	
	/*
	 * curvy conrners for ie
	 */
	PLUGIN_SET.curvy = function()
	{
		var m_this = $(this);
		if (m_this.data("__curvy"))
			return this;
		m_this.data("__curvy", "true");
		
		/*
		// rounded corners
		if ($.browser.msie || force)
		{
			try
			{
				var m_this = $(this);
				var OFFSET = 8;
				var w = m_this.outerWidth();
				
				function doRound()
				{
					var bc = toHex(m_this.css("border-left-color"));
					var bgc = toHex(m_this.css("background-color"));
					var pbgc = "";
					var p = m_this.parent();
					while (p.length>0 && pbgc=="")
					{
						pbgc = toHex(p.css("background-color"));
						p = p.parent();
					}
					var bwidth = parseInt((m_this.css("border-left-width")+"").split("px").join(""),10);
					if (isNaN(bwidth))
						bwidth = 0;
					if (bwidth>1)
						bwidth=1;
					var bgImg = $.getResourceBaseUri() + "img/crn-" + pbgc + (bwidth>0 ? "-" + bc : "") + ".gif";
					
					m_this.css("position","relative");
					var h = ('<div style="position:absolute;z-index:4;left:-' + bwidth + 'px;top:-' + bwidth + 'px;width:6px;height:6px;overflow:hidden;background:url(' + bgImg + ') 0 0 no-repeat"></div>' +
							'<div style="position:absolute;z-index:4;top:-' + bwidth + 'px;right:-' + bwidth + 'px;width:6px;height:6px;overflow:hidden;background:url(' + bgImg + ') -6px 0 no-repeat"></div>' +
							'<div style="position:absolute;z-index:4;bottom:-' + bwidth + 'px;left:-' + bwidth + 'px;width:6px;height:6px;overflow:hidden;background:url(' + bgImg + ') 0 -6px no-repeat"></div>' +
							'<div style="position:absolute;z-index:4;bottom:-' + bwidth + 'px;right:-' + bwidth + 'px;width:6px;height:6px;overflow:hidden;background:url(' + bgImg + ') -6px -6px no-repeat"></div>');
				
					var applyTo = m_this;
					var tn = (m_this.get(0).tagName+"").toLowerCase();
					if (tn == "input" || tn=="textarea")
					{	
						m_this.css({"border":"0px solid","padding":"0","position":"absolute","left":(OFFSET-1)+"px","top":"0px","z-index":"2"});
						m_this.width(w-(OFFSET*2));
						m_this.wrap("<div style=\"float:left; position:relative; height:" + m_this.outerHeight() + "px; padding:0; margin:0 10px 0 0; border:1px solid #" + bc + ";background-color:#" + bgc + "\"></div>");
						applyTo = m_this.parent();
						applyTo.width(w);
					}
					applyTo.append(h);
				}
				
				function toHex(rgbString)
				{
					var hexString = "";
					if (rgbString.indexOf("#")==0)
						hexString = rgbString.substring(1);
					else
					{
						var parts = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/)
						if (parts && parts!=null)
						{
							delete (parts[0]);
							for (var i = 1; i <= 3; ++i) {
							    parts[i] = parseInt(parts[i]).toString(16);
							    if (parts[i].length == 1) parts[i] = '0' + parts[i];
							}
							hexString = parts.join('');
						}
					}
					return hexString.toLowerCase();
				}
				
				doRound();
			}
			catch(e)
			{
			}
			
			return this;
		}
		*/
		

		if ($.browser.msie)
		{
			try
			{
				if (!m_this.is(":visible"))
					return;
				
				var OFFSET = 8;
				var el = m_this.get(0);
				try
				{
					if (el.currentStyle.position=='static')
						m_this.css("position","relative");
				}
				catch(e)
				{
				}
				
				var w = m_this.outerWidth()-1;
				var h = m_this.outerHeight()-1;
				
				var bwidth = parseInt((m_this.css("border-left-width")+"").split("px").join(""),10);
				var fillColor = el.currentStyle.backgroundColor;
				var strokeColor = bwidth>0 ? el.currentStyle.borderColor : fillColor;

				if (fillColor=='transparent')
					return;
				
				var arcSize = Math.min(10 / Math.min(m_this.width(), m_this.height()), 1)/2;
				var tn = (m_this.get(0).tagName+"").toLowerCase();
				var applyTo = m_this;

				if (tn == "input" || tn=="textarea")
				{	
					m_this.css({"border":"0px solid","padding":"0","position":"absolute","left":(OFFSET-1)+"px","top":"0px","z-index":"2"});
					m_this.width(w-(OFFSET*2));
					m_this.wrap("<div style=\"float:left; position:relative; height:" + h + "px; padding:0; margin:0 10px 0 0;\"></div>");
					applyTo = m_this.parent();
					applyTo.width(w);
				}
				
				applyTo.css("border","none");
				applyTo.css("background","none");
				applyTo.append('<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" ' +
							'FillColor="' + fillColor + '" ' +
							'StrokeColor="' + strokeColor + '" ' +
							'arcsize="' + arcSize + 'px" ' +
	   						'style="overflow:hidden;top:-1px;left:-1px;width:' + w +'px;height:' + h + 'px;position:absolute;z-index:-1;margin:0;padding:0">' +
	   						'</v:roundrect>');
	   			
			}
			catch(e)
			{
			}
		}

		
		return this;
	}
	
	/*
	 * Text input rounded corners
	 */
	PLUGIN_SET.textInput = function(options)
	{
		var m_this = $(this);
		if (m_this.data("__textInput"))
			return this;
		m_this.data("__textInput", "true");
	
		if ($.browser.msie)			
			m_this.cmcurvy();
		else
			m_this.addClass("cm-curvy");
			
		return this;
	}
	
	/* 
	 * Shadow for ie
	 */
	PLUGIN_SET.shadow = function(options)
	{
		var m_this = $(this);
		if (m_this.data("__shadow"))
			return this;
		m_this.data("__shadow", "true");
		
		if ($.browser.msie && $.browser.version>6)
		{
			m_this.css("position","relative");
			m_this.append("<div style='background-color:#000; filter: alpha(Opacity=0, FinishOpacity=50, Style=1); position:absolute; height:100%; left:-10px;top:0;width:10px'></div>");
			m_this.append("<div style='background-color:#000; filter: alpha(Opacity=50, FinishOpacity=0, Style=1); position:absolute; height:100%; right:-10px;top:0;width:10px'></div>");
			return this;
		}
	}
	
	/*
	 * png bg for ie 6
	 */
	PLUGIN_SET.pngBg = function()
	{
		var m_this = $(this);
		if (m_this.data("__pngBg"))
			return this;
		m_this.data("__pngBg", "true");
		
		if ($.browser.msie && $.browser.version<7)
		{
			var bg = "" + m_this.css("background-image");
			if (bg.indexOf(".png"))
				m_this.css("background-image", bg.split(".png").join(".gif"));
		}
		
		return this;
	}
	
	/*
	 * Top menus
	 */
	PLUGIN_SET.shoppingBag = function()
	{
		var m_this = $(this);

		this.render = function(cart, doAnimation)
		{
			render(cart, doAnimation);
		}

		function render(cart, doAnimation)
		{	
			if (cart && cart.data && cart.data.length>0)
			{
				var currentElement = cart.data[cart.data.length-1];
				
				m_this.find(".cm-sb-productCount").html("(" + cart.data.length + ")");
				m_this.find(".cm-sb-totalAmount").html(checkCurrency(cart.totalAmount));
				m_this.find(".cm-sb-partialAmount").html(checkCurrency(currentElement.totalRow));
				m_this.find(".cm-sb-productQuantity").html(currentElement.quantity);
				m_this.find(".cm-sb-productName").html(currentElement.product.name);
				m_this.find(".cm-sb-productCategory").html(currentElement.product["brand"]["description"]);
				m_this.find(".cm-sb-productColor").html(currentElement.product["colour"]["description"]);
				m_this.find(".cm-sb-productImage").attr("src","http://www.camomilla.it/images/thumb/" + currentElement.product["brand"]["code"] +'/' + currentElement.product["code"] + ".jpg");
				m_this.find(".cm-sb-productImage").show();
				m_this.find("a.first").removeClass("disabled");
				
				if (doAnimation)
				{
					m_this.find("a.first").addClass("active");
					m_this.find(">div.ctn").show();
					setTimeout(function()
					{
						m_this.find("a.first").removeClass("active");
						m_this.find(">div.ctn").fadeOut("slow");
					},2000);
					/*
					m_this.find("a.first").addClass("active");
					m_this.find(">div.ctn").fadeIn("fast",function()
					{
						m_this.find("a.first").removeClass("active");
						m_this.find(">div.ctn").fadeOut("fast");
					})
					*/
				}
			}
			else
			{
				m_this.find(".cm-sb-productCount").html("(" + cart.data.length + ")");
				m_this.find("a.first").addClass("disabled");
			}
		}
		
		function checkCurrency(data)
		{
			try
			{
				return data.toFixed(2);
			}
			catch (e)
			{
				return data;
			}
		}
		
		function getData()
		{
			SERVICES.Cart.getData(function(cart)
			{
				render(cart);
			})
		}
		
		if (m_this.data("__shoppingBag"))
			return this;
		m_this.data("__shoppingBag", "true");
		
		function init()
		{
			getData();
			
			m_this.find(".cm-sb-shoppingBagLink").click(function()
			{
				var hr = $(this).attr("href");
				if (document.location.href.indexOf(hr)!=-1)
				{
					$.showLoader(true);
					document.location.hash = "v=cart";
					document.location.reload();
				}
				else
				{
					document.location.href = hr + "#v=cart";
				}
				return false;
			})
		}
		
		init();
		
		return this;
	}
	
	/*
	 * Top menus
	 */
	PLUGIN_SET.topMenu = function()
	{
		var m_this = $(this);
		if (m_this.data("__topMenu"))
			return this;
		m_this.data("__topMenu", "true");
		
		var m_menu = $(".menu");
		
		function init()
		{
			m_this.find("li a.first").click(function()
			{	
				if (!$(this).hasClass("disabled"))
				{
					hideTopLayers();
					
					$(this).parent().find(".ctn").show();
					if($(this).hasClass("active"))
						$(this).removeClass("active");
					else
						$(this).addClass("active");
				}
				return false;
			});
			
			m_this.find(".ctn").click(function(e)
			{
				e.stopPropagation();
			})
				
			m_menu.find("li a.first,li>div").mouseover(function(e)
			{      
				e.stopPropagation();
				
				hideDropDowns();
				
				var li = $(this).closest("li");
				
				li.find(">div").show();
				li.find(".links").show();
				li.find(">a.first").addClass("active");
				li.addClass("active");                                                                            
			})
		       
		      $("body").mouseover(function(){hideDropDowns();return true});
		      $("body").click(function(){hideTopLayers();return true});
		      
			function hideDropDowns()
			{
				m_menu.find("ul li div").hide();
				m_menu.find("li a.first").removeClass("active");
				m_menu.find("li a.first").parent().removeClass("active");
			}
			
			function hideTopLayers()
			{
				m_this.find(".ctn").hide();
				m_this.find("li a.first").removeClass("active");
			}
						
			setupUserActions();
			popupUserProfile();
		}

		function popupUserProfile() {
			// pop up profile after login
			var location = String(window.location);
			if (location.indexOf("login") != -1) {
				$(".cm-tools-logout").find("a.first").addClass("active");
				$(".cm-tools-logout").find(">div.ctn").show();
				setTimeout(function()
				{
					$(".cm-tools-logout").find("a.first").removeClass("active");
					$(".cm-tools-logout").find(">div.ctn").fadeOut("slow");
				},3000);
			}
		}
		
		function setupUserActions()
		{
			// get user if any
			SERVICES.User.getData(function(data)
				{
					if (data && !data.errors)
					{
						m_this.find(".cm-tools-logout .cm-tools-logout-gender").html((data.sex=="m") ? "Benvenuto" : "Benvenuta");
						m_this.find(".cm-tools-logout .cm-tools-logout-name").html(data.name);
						m_this.find(".cm-tools-login").hide();
						m_this.find(".cm-tools-logout").show();
						
						$("html").trigger("camomilla.userData", data);
					}
					else
					{
						m_this.find(".cm-tools-login").show();
						m_this.find(".cm-tools-logout").hide();
					}
				},
				function()
				{
					m_this.find(".cm-tools-login").show();
					m_this.find(".cm-tools-logout").hide();
				}
			)
			
			// login
			m_this.find(".cm-tools-login .cm-action-login").click(function()
			{
				var cont = $(this).closest(".cm-tools-login");
				
				var nickname = $.trim(cont.find("input[name=nickname]").val());
				var pwd = $.trim(cont.find("input[name=password]").val());

				if (nickname!="" && pwd!="")
				{				
					SERVICES.User.login(nickname, pwd, 
									function(data)
									{
										$.showLoader();
										if (data && !data.error)
										{
											//window.location.reload();
											var redirectUrl = String(window.location);
											if (redirectUrl.indexOf("?") != -1) {
												window.location = redirectUrl.substr(0,redirectUrl.indexOf("?")) + "?login&"+ redirectUrl.substr(redirectUrl.indexOf("?")+1);
											} else if (redirectUrl.indexOf("#") != -1) {
												window.location = redirectUrl.substr(0,redirectUrl.indexOf("#")) + "?login"+ redirectUrl.substr(redirectUrl.indexOf("#"));
											} else {
												window.location = redirectUrl + "?login";
											}
											
										}
										else
										{
											$.hideLoader();
											$.alert("Nome utente o password errati");
										}
									}, 
									function()
									{
										// error
										$.alert("Nome utente o password errati");
									});
				}
				return false;		
			})
			
			// logout
			m_this.find(".cm-tools-logout .cm-action-logout").click(function()
			{
				function onResponse()
				{
					$.showLoader();
					var currentLang = $("meta[http-equiv='Content-Language']").attr("content");
					if ( (typeof(currentLang)=="undefined") || (currentLang == "") ) {
						currentLang = "it";
					}
					document.location = "/" + currentLang + "/consumer/index.page?rnd=" + new Date().getTime(); 
				}
				
				SERVICES.User.logout(onResponse,onResponse);
				return false;			
			})
		}
		
		init();
		
		return this;
	}
	
	PLUGIN_SET.gallery = function(options)
	{
		var m_this = this;
		if (m_this.data("__gallery"))
			return this;
			
		m_this.data("__gallery", "true");
		
		var TIMEOUT = 5000;
		var m_cont = m_this.parent();
		var m_width = m_cont.innerWidth();
		var m_height = m_cont.innerHeight();
		var m_counter = 0;
		var m_panelContainer;
		var m_interval;
		
		function init()
		{
			m_this.css({"margin":0,"padding":0,"overflow":"hidden","width":m_width,"height":m_height,position:"relative"});
			m_this.append("<div class=panel-container></div>");
			m_panelContainer = m_this.find(".panel-container");
			m_panelContainer.css({"margin":0,"padding":0,position:"absolute"});
			m_this.find("a").each(function(i)
			{
				m_panelContainer.append("<div class=panel></div>");
				var el = m_panelContainer.find("div:last");
				el.css({"margin":0,"padding":0,"position":"absolute", "width":m_width, "height":m_height, "top":0, "left":(i*m_width), "z-index":1});
				var sr = $(this).attr("href");
				if (sr.indexOf(".jpg")!=-1)
					el.html("<img src=\"" + sr + "\"/>");
				else
					el.html("<iframe src=\"" + sr + "\" width=" + m_width + " height=" + m_height + " frameborder=0 border=0 scrollbars=no scrolling=no></iframe>");
			})
			
			m_this.append("<div class=btn-prev>&lt;</div>");
			var btnPrev = m_this.find(".btn-prev");
			btnPrev.css({"cursor":"pointer","position":"absolute","left":"10px","top":0,"z-index":2,top:Math.floor(m_this.height()/2-btnPrev.height()/2)});
			btnPrev.click(function(){clearInterval(m_interval);prevElement()});
			
			m_this.append("<div class=btn-next>&gt;</div>");
			var btnNext = m_this.find(".btn-next");
			btnNext.css({"cursor":"pointer","position":"absolute","right":"10px","top":0,"z-index":2,top:Math.floor(m_this.height()/2-btnNext.height()/2)});
			btnNext.click(function(){clearInterval(m_interval);nextElement()});
			
			m_this.find("a").remove();
			m_this.show();
			run();
		}
		
		function run()
		{
			m_interval = setInterval(function(){nextElement()},TIMEOUT);
		}
		
		function prevElement()
		{
			if (m_counter>0)
				m_counter--;
			else
				m_counter=(m_panelContainer.find(".panel").length-1);
			showElement();
		}
		
		function nextElement()
		{
			if (m_counter<(m_panelContainer.find(".panel").length-1))
				m_counter++;
			else
				m_counter=0;
			showElement();
		}
		
		function showElement()
		{
			m_panelContainer.animate({"left":-(m_counter*m_width)+"px"},1000);
		}
		
		init();
		
		return this;
	}

	/**
	 * inline detail
	 */
	PLUGIN_SET.inlineDetail = function(options)
	{
		var m_this = this;
		if (m_this.data("__inlineDetail"))
			return this;
		m_this.data("__inlineDetail", "true");
		
		var m_body = $("html"); 

		if ((m_this.get(0).tagName+"").toLowerCase()=="body")
		{
			m_this.find("a").each(function()
			{
				$(this).attr("target","_blank");
			})
			
			if(window.top.location.href==document.location.href)
			{
				$("body").empty();
				$.showLoader();
				
				var ext = document.location.href.split(".");
				var uri = ext.slice(0, ext.length-1).join(".");
				ext = ext[ext.length-1];
				
				var parentUri = uri.split("/");
				var detailUri = parentUri.slice(parentUri.length-1);
				var goTo = parentUri.slice(0, parentUri.length-1);
				goTo = goTo.join("/") + "/index." + ext + "#d=" + detailUri + "." + ext;
				document.location.replace(goTo);
			}
		}
		else
		{
			var m_cont = $(".cm-detail");
			if (m_cont.length==0)
				return this;
			
			m_this.click(function(e)
			{	
				e.preventDefault();
				m_body.stop();
				m_cont.stop();
				
				function go()
				{
					if (m_cont.height()>0)
						m_cont.animate({height:0,opacity:0}, 500, doLoad);
					else
					{
						m_cont.height(0);
						doLoad($(this));
					}
				}
				
				if (m_body.scrollTop()>m_cont.offset().top)
				{
					m_body.animate({scrollTop:m_cont.offset().top}, 500, function()
					{
						go();
					})
				}
				else
					go();
					
				return false;
			})
			
			function doLoad(el)
			{
				$.showLoader();
				$(".cm-close").hide();
				m_cont.show();
				m_cont.css("opacity",100);
				
				if (m_cont.find("iframe").length==0)
				{
					m_cont.append("<iframe width=100% height=100% frameborder=0 border=0 scrollbars=no scrolling=no></iframe>");
					m_cont.find("iframe").bind("load", function()
					{
						$.hideLoader();
						var h = 0
						try
						{
							var d = this.contentWindow.document;
							if( d.height ) 
								h = d.height;
							else
							{
								var scr_h, off_h;
								with( d.body ) 
								{
									if( scrollHeight ) { h = scr_h=scrollHeight; }
									if( offsetHeight ) { h = off_h=offsetHeight; }
									if( scr_h && off_h ) h = Math.max(scr_h, off_h);
								}
							}
							if (h==0)
								h = $(d).height();
						}
						catch (e)
						{
						}
						/*
						if (h<$(window).height())
							h = $(window).height();
		
						*/
			
						m_cont.hide();
						m_cont.height(h);
						m_cont.slideDown( 500, function()
						{
							$(".cm-close").show();
							m_body.animate({scrollTop:m_cont.offset().top}, 500);
						})
					})
				}
				document.location.hash = "d=" + m_this.attr("href");
				m_cont.find("iframe").attr("src",m_this.attr("href"));
			}
			
			$(".cm-close").click(function()
			{
				document.location.hash="#d=";
				m_body.stop();
				m_cont.stop();
				m_cont.animate({height:0,opacity:0}, 500, function(){
					m_cont.height(0);
					m_body.animate({scrollTop:m_cont.offset().top}, 500, function()
					{
						try
						{
							$(m_cont.find("iframe").get(0).contentWindow.document).find("body").empty();
						}
						catch (e)
						{
							console.log(e);
						}
					});
				})
				return false;
			})
		}
		
		return this;
	}
	
	/**
	 * image gallery
	 */
	PLUGIN_SET.imageGallery = function()
	{
		
		var m_this = $(this);
		if (m_this.data("__imageGallery"))
			return this;
		m_this.data("__imageGallery", "true");

		var MAXIMGSIZE = {width:640,height:400};
		if (m_this.hasClass("small"))
			MAXIMGSIZE = {width:380,height:460};
		
		var m_imageData = [];
		var m_currentImage = 0;
		
		function init()
		{
			m_this.find("a").hide();
			$.require("imagepanner.js");
			
			var arr = [];
			m_this.find("a").each(function()
			{
				arr.push($(this).attr("href"));
			})
			
			m_this.append("<div style='margin-top:" + Math.round(MAXIMGSIZE.height/2) + "px' " +
						"align=center><img src='" + $.getResourceBaseUri() + "img/image-gallery-loader.gif'/></div>");
			$.preloadImages(arr, function(data)
			{
				m_imageData = data;
				
				// add captions
				$(m_imageData).each(function()
				{
					var img = this;
					m_this.find("a").each(function()
					{
						if (img.src.indexOf($(this).attr("href"))!=-1)
							img.caption = $.trim($(this).text());
					})
				})
				
				m_this.empty();
				
				var ht = 
				'<div class="imgContainer" align="center">' +
				'<div class="img ontop"><img/><div class=caption><div></div></div></div>' +
				'</div>' +
				'<a href="#next" class="btn prev cm-pngBg" style="display:none">Precedente</a>' +
				'<a href="#prev" class="btn next cm-pngBg" style="display:none">Successivo</a>' +
				'<a href="#zoom" class="btn zoom cm-pngBg" style="display:none">Zoom</a>';
				
				m_this.append(ht);
				m_this.initGui();
				
				if (data.length>1)
				{
					m_this.find(".prev").show();
					m_this.find(".next").show();
				}
				
				if (data.length>1)
				{
					m_this.find(".imgContainer .ontop").before("<div class=img><img/></div>");
					m_this.find(".imgContainer .ontop").after("<div class=img><img/></div>");
				}
				if (data.length>3)
				{
					m_this.find(".imgContainer .ontop").before("<div class=img><img/></div>");
					m_this.find(".imgContainer .ontop").after("<div class=img><img/></div>");
				}
				
				m_this.find(".prev").click(function()
				{
					if (m_currentImage>0)
						m_currentImage--;
					else
						m_currentImage = m_imageData.length-1;
					setupImages();
					return false;
				})
				
				m_this.find(".next").click(function()
				{
					if (m_currentImage<m_imageData.length-1)
						m_currentImage++;
					else
						m_currentImage = 0;
					setupImages();
					return false;
				})
				
				m_this.find("div.ontop, .zoom").mouseover(function(e)
				{
					if (m_imageData[m_currentImage].width>=960 ||
						m_imageData[m_currentImage].height > $(window).height())
						m_this.find(".zoom").show();
				})
				
				m_this.find("div.ontop img").mouseout(function(e)
				{
					m_this.find(".zoom").hide();
				})
				
				m_this.find(".zoom").click(function(e)
				{
					window.top.jQuery.zoom(m_this.find("div.ontop img").attr("src"));
					return false;
				})
				
				setupImages();
			})
		}

		function setupImages()
		{
			var endTo = 0;
			if ( m_imageData.length>1 )
				endTo = 1;
			if ( m_imageData.length>3 )
				endTo = 2;
		
			m_this.find(".zoom").hide();
			var td = m_this.find(".imgContainer div.img").hide();
			m_this.find(".imgContainer div.ontop .caption").hide();
			
			var w = 0;
			
			var indx = m_currentImage;
			var td = m_this.find(".imgContainer div.ontop");
			
			for (var i=0;i<endTo;i++)
			{
				var indx = indx+1;
				if (indx>m_imageData.length-1)
					indx = 0;
				td = td.next();
				var img = td.find("img");
				var sz = fitImage(m_imageData[indx]);
				img.attr("src", m_imageData[indx].src);
				img.width(sz.width);
				img.height(sz.height);
				img.attr("alt",m_imageData[indx].caption);
				img.attr("title",m_imageData[indx].caption);
				img.css("margin-top", Math.round((MAXIMGSIZE.height-sz.height)/2));
				
			}
			var indx = m_currentImage;
			var td = m_this.find(".imgContainer div.ontop");
			for (var i=0;i<endTo;i++)
			{
				var indx = indx-1;
				if (indx<0)
					indx = m_imageData.length-1;
				td = td.prev();
				var img = td.find("img");
				var sz = fitImage(m_imageData[indx]);
				img.attr("src", m_imageData[indx].src);
				img.width(sz.width);
				img.height(sz.height);
				img.attr("alt",m_imageData[indx].caption);
				img.attr("title",m_imageData[indx].caption);
				img.css("margin-top", Math.round((MAXIMGSIZE.height-sz.height)/2));
				w+=sz.width;
			}	
			
			var td = m_this.find(".imgContainer div.ontop");
			var img = td.find("img");
			var sz = fitImage(m_imageData[m_currentImage]);
			img.width(sz.width);
			img.height(sz.height);
			img.attr("src", m_imageData[m_currentImage].src);
			img.css("margin-top", Math.round((MAXIMGSIZE.height-sz.height)/2));
			
			w+=sz.width/2;
			
			if ( m_imageData.length>1 )
				w += 20;
			if ( m_imageData.length>3 )
				w += 10;
			
			var showHide = m_this.closest(".cm-tabContent").length>0 && !m_this.closest(".cm-tabContent").is(":visible");
			if (showHide)
				m_this.closest(".cm-tabContent").show();
			m_this.find(".imgContainer").css("left", Math.round(-(w) + (m_this.find(".imgContainer").parent().width()/2)+5));
			if (showHide)
				m_this.closest(".cm-tabContent").hide();
			
			m_this.find(".imgContainer div.img").each(function()
			{
				if (!$(this).hasClass("ontop"))	
					$(this).show();
			})
			m_this.find(".imgContainer div.ontop").fadeIn("slow", function()
			{
				if (m_imageData[m_currentImage].caption.length>0)
				{
					$(this).find("div.caption").css("opacity",0.8);
					$(this).find("div.caption").css("filter","alpha(opacity=100)");
					$(this).find("div.caption div").html(m_imageData[m_currentImage].caption);
					$(this).find("div.caption").show();
				}
			});
		}
		
		function fitImage(img)
		{
			var sourceWidth = img.width;
			var sourceHeight = img.height;
				
			var W = MAXIMGSIZE.width;
			var H = MAXIMGSIZE.height;
			
			var newWidth = 0;
			var newHeight = 0;
	
			if (!( sourceWidth<=W && sourceHeight<=H ))
			{
				var wr = sourceWidth / W;
				var hr = sourceHeight / H;
	
				if ( wr >= hr )
				{
					newWidth = W;
					newHeight = sourceHeight * (W/sourceWidth) + 0;
				}
				else
				{
					newWidth = sourceWidth * (H/sourceHeight) + 0;
					newHeight = H;
				}
			}
			else
			{
				newWidth = sourceWidth;
				newHeight = sourceHeight;
			}

			return {width:Math.round(newWidth), height:Math.round(newHeight)};
		}
		
		m_this.find("a").hide();
		
		if (!$.windowLoaded)
			$(window).load(init);
		else
			init();
		
		return this;
	}
	
	/*
	 * video
	 */
	PLUGIN_SET.video = function(u)
	{
		var hr = u;
		if (!u)
			hr = $(this).attr("href");

		$(this).flowplayer(
			{
				src:$.getResourceBaseUri()+"swf/flowplayer-3.2.4.swf",
				allowScriptAccess: "always",
				wmode: $.browser.msie ? "opaque" : "transparent",
				bgcolor: "#E7C1E3"
			},
			{
				playlist: [
					{
						url: hr, 
						autoPlay: true, 
						autoBuffering: true
					}
				],
				"plugins": {
				        "controls": {
				        	"timeColor": "#ffffff",
				            "backgroundColor": "rgba(0, 0, 0, 0)",
				            "volumeColor": "rgba(209, 8, 159, 1)",
				            "volumeSliderColor": "#ffffff",
				            "bufferColor": "rgba(255, 255, 255, 1)",
				            "buttonColor": "#ffffff",
				            "sliderBorder": "1px solid rgba(128, 128, 128, 0.7)",
				            "buttonOverColor": "rgba(209, 8, 159, 1)",
				            "fullscreen": false,
				            "timeBgColor": "rgb(0, 0, 0, 0)",
				            "sliderColor": "#000000",
				            "tooltipTextColor": "#ffffff",
				            "tooltipColor": "rgba(0, 0, 0, 0)",
				            "durationColor": "rgba(209, 8, 159, 1)",
				            "timeBorder": "0px solid rgba(0, 0, 0, 0.3)",
				            "progressColor": "rgba(209, 8, 159, 1)",
				            "volumeBorder": "1px solid rgba(128, 128, 128, 0.7)"
				        }
				}
			});
	} 

	
	/**
	 * Video gallery
	 */
	PLUGIN_SET.videoGallery = function()
	{
		var m_this = $(this);
		var m_elements = [];
		var m_current = 0;
		
		function init()
		{
			if (m_this.data("__videoGallery"))
				return this;
			m_this.data("__videoGallery", "true");
			
			$.require("flowplayer-3.2.4.js");
			
			// gather data
			m_this.find("li a").each(function()
			{
				m_elements.push({"thumbnail":$(this).find("img").attr("src"),
							"video":$(this).attr("href"),
							"caption":$.trim($(this).text())})
			})
			
			// setup markup
			m_this.empty();
			
			var ht = '<div class="video">' +
					'</div>' +
					'<div class="thumbnail">' +
					'	<ul>' +
					'	</ul>' +
					'	<a class="th-prev btn up" title="Precedente">prev</a>' +
					'	<a class="th-next btn down" title="Successiva">next</a>' +
					'</div>';
			
			m_this.append(ht);
			
			// setup gallery elements
			for (var i=0;i<m_elements.length && i<3;i++)
			{
				m_this.find(".thumbnail ul").append("<li class=\"cm-curvy\"><img/></li>");
				var img = m_this.find(".thumbnail ul li:last img");
				img.attr("value", i);
				img.attr("src", m_elements[i].thumbnail);
				img.attr("alt", m_elements[i].caption);
				img.attr("title", m_elements[i].caption);
				
				if (m_elements.length==1)
					m_this.find(".thumbnail ul").hide();
			}
			
			// setup gallery slider
			if (m_elements.length>3)
			{
				function setupImages()
				{
					var first = m_current;
					var second = m_current < m_elements.length-1 ? m_current + 1 : 0;
					var third = m_current < m_elements.length-2 ? m_current + 2 : 1;
					var imgs = [m_elements[first],m_elements[second],m_elements[third]];
					
					m_this.find(".thumbnail li img:eq(0)").hide();
					m_this.find(".thumbnail li img:eq(0)").attr("src", imgs[0].thumbnail);
					m_this.find(".thumbnail li img:eq(0)").attr("title", imgs[0].caption);
					m_this.find(".thumbnail li img:eq(0)").attr("alt", imgs[0].caption);
					m_this.find(".thumbnail li img:eq(0)").attr("value", first);
					m_this.find(".thumbnail li img:eq(0)").fadeIn(200,function()
					{
						m_this.find(".thumbnail li img:eq(1)").hide();
						m_this.find(".thumbnail li img:eq(1)").attr("src", imgs[1].thumbnail);
						m_this.find(".thumbnail li img:eq(1)").attr("title", imgs[1].caption);
						m_this.find(".thumbnail li img:eq(1)").attr("alt", imgs[1].caption);
						m_this.find(".thumbnail li img:eq(1)").attr("value", second);
						m_this.find(".thumbnail li img:eq(1)").fadeIn(200,function()
						{
							m_this.find(".thumbnail li img:eq(2)").hide();
							m_this.find(".thumbnail li img:eq(2)").attr("src", imgs[2].thumbnail);
							m_this.find(".thumbnail li img:eq(2)").attr("title", imgs[2].caption);
							m_this.find(".thumbnail li img:eq(2)").attr("alt", imgs[2].caption);
							m_this.find(".thumbnail li img:eq(2)").attr("value", third);
							m_this.find(".thumbnail li img:eq(2)").fadeIn(200);
						})
					})
				}
				
				m_this.find(".th-next").click(function()
				{
					if (m_current<m_elements.length-1)
						m_current++;
					else
						m_current=0;
					setupImages();
				});
				
				m_this.find(".th-prev").click(function()
				{
					if (m_current>0)
						m_current--;
					else
						m_current=m_elements.length-1;
					setupImages();
				});
			}
			else
			{
				m_this.find(".th-next").hide();
				m_this.find(".th-prev").hide();
			}
			
			// bind click
			m_this.find(".thumbnail ul li img").live("click", function()
			{
				var index = parseInt($(this).attr("value"),10);
				m_this.find(".video").cmvideo(m_elements[index].video);
				return false;
			})

			if (m_this.closest(".cm-tabContent").length>0 && !m_this.closest(".cm-tabContent").is(":visible"))			
			{
				m_this.closest(".cm-tabs").find(">ul>li>a.cm-videoGalleryLauncher").click(function()
				{
					firstVideo();
				})
			}
			else	
				firstVideo();
		}
		
		function firstVideo()
		{
			if (!m_this.data("vdShown"))
			{
				m_this.data("vdShown","true");
				m_this.find(".thumbnail ul li img[value=0]:first").trigger("click");
			}
		}
		
		init();
		
		return this;
	}
	
	/**
	 * tabs
	 */
	PLUGIN_SET.tabs = function(options)
	{
		var m_this = $(this);
		if (m_this.data("__tabs"))
			return this;
		m_this.data("__tabs", "true");
		
		function init()
		{
			m_this.find("ul li a").click(function()
			{
				m_this.find("ul li a").removeClass("active");
				m_this.find(".cm-tabContent").hide();
				$(this).addClass("active");
				m_this.find(".cm-tabContent:eq(" + $(this).parent().prevAll().size() + ")").show();
				try { Cufon.refresh(); } catch (e) {};
				return false;
			})
			
			m_this.find("ul li a:first").click();
		}
		
		init();
		
		return this;
	}
	
	/*
	 * mood
	 */
	PLUGIN_SET.mood = function(options)
	{
		var m_this = $(this);
		var m_body = $("html");
		
		// masonry has to be called first
		$.require("masonry.js");
		m_this.masonry({ columnWidth: 155, itemSelector: '.mood:visible', resizeable: false});
		
		if (m_this.data("__mood"))
			return this;
		m_this.data("__mood", "true");
		
		$.require("flowplayer-3.2.4.js");
		$.require("imagepanner.js");
		
		function init()
		{
			if ($.browser.msie)
			{
				m_this.find(".mood p.cm-fancyTitle").css({"padding-top":0,
											"margin-top":-2,
											"padding-left":10,	
											"padding-right":10,
											"padding-bottom":0})
			}
			
			m_this.find(".mood").css("cursor","pointer");
			m_this.find(".mood").each(function(index) {
				$(this).attr("title", string2filename($(this).attr("title")));
			});
			
			
			/***** OPEN DETAIL *****/
			m_this.find(".mood").click(function(e)
			{	
			
				if(m_this.find("a.link").length>0){
					$(this).attr("target", "_self");
				}
				else
				{
					e.stopPropagation();
					e.preventDefault();
				
					if (m_this.find(".info").children().length==0)
						return;
					
					if (m_this.find(".detail").length>0)
					{
						closeDetail();
						return;
					}
	
					m_this.find(".detail").remove();
	
					if (!$.browser.msie)
						m_this.find(".mood").css({"opacity":0.5, filter:"alpha(opacity=50)"});
	
					var pos = { left : parseInt($(this).css("left").split("px").join(""),10),
							top : parseInt($(this).css("top").split("px").join(""),10) };
					var sz = { width: m_this.width(), height: m_this.height() };
					
					var h = pos.left < sz.width/2 ? "left" : "right";
					var v = pos.top < sz.height/2 ? "top" : "bottom";
					var def_size = "m4 h4";
					var def_style = "";
					
					if($(this).find(".info").find(".carousel").length > 0)
					{
						def_size = "m6 h4";
						def_style = " large";	
					}
					else if($(this).find(".info").find(".slider").length > 0)
					{
						def_size = "m6 h4";	
						def_style = " large";	
					}
									
					var zoom = $('<div class="mood '+ def_size +''+def_style+' detail cm-curvy" style="padding:0;margin:0"><div class="close"><a href="#close">chiudi</a></div>');
					zoom.css({"position":"absolute",
							"z-index":4});
					zoom.css(h,h=="left" ? 10 : 0);
					zoom.css(v,v=="bottom" ? 10 : 0);
					
					if ($.browser.msie)
					{
						if (h=="left")
							zoom.css("left",8);
						else
							zoom.css("right",2);
						if (v=="top")
							zoom.css("top",-2);
						else
							zoom.css("bottom",8);
					}
					
					m_this.append(zoom);
					zoom = m_this.find(".detail");
					zoom.click(function(e){e.stopPropagation()});
					var top = zoom.offset().top;
					
					zoom.hide();
					
					var el = $(this);
					m_this.find(".detail").show("normal", function()
					{
						m_body.stop();
						m_body.animate({scrollTop:top - 10}, 500, function()
						{
							drawDetail(el);
						})
					})
					
					//document.location.hash = "d=" + $(this).attr("id");
					var talkinURL = string2filename(el.find(".title").text());
					var trackURL = document.location.href;
					_gaq.push(['_trackPageview',trackURL.split(".page").join("/index.page?d=") + talkinURL]);
					document.location.hash = "d=" + talkinURL;
					return false;
				
				}
				
				
			})
			
			try {
				var id = document.location.hash.split("d=")[1];
				//m_this.find("#"+id).click();
				m_this.find("div[title*='" + id + "']").click();
			} catch (e) { alert(e);}
		}
		
		function drawDetail(el)
		{
			var callback_function = '';
			var text = el.find(".text");
			var videoUrl = el.find(".videoUrl");
			var image = el.find(".image");
			var detailImage = el.find(".detailImage");
			var photoGallery = el.find(".photoGallery");
			var carouselArea = el.find(".carousel");
			var sliderArea = el.find(".slider");
			var twitterArea = el.find(".twitter");
			var imgVariant = el.find(".imgVariant");
			var productLink = el.find(".productLink");
			
			
			var ht = "";
			var socialbar = getSocialToolbarCode();
			
			// video
			if (videoUrl.length>0 && 
				videoUrl.text() &&
				$.trim(videoUrl.text()).length>0)
			{
				ht = 
				'<a class="cm-video video" href="${videoUrl}"></a>' +
				'<h2>${title}</h2>' +
				'<p>${text}</p>';
			}
			// image
			else if (image.length>0 && 
				image.text() &&
				$.trim(image.text()).length>0)
			{
				var detailImage = detailImage.length>0 &&
						detailImage.text() &&
						$.trim(detailImage.text()).length>0;
						
				ht = 
				(!detailImage ?
				'<div class=pan><div class=cm-pannable><img src="${image}"></div></div>' :
				'<a href="${detailImage}" class="cm-zoomable"><img class="bottom cm-overable ovrbl_zoom" alt="" src="${image}"></a>') +
				'<h2>${title}</h2>' +
				'<p>${text}</p>';
				
				// Image Variant Color
				if (imgVariant.length>0)
				{
					ht += imgVariant.html();
				}
				// Product Link
				if (productLink.length>0)
				{
					ht += productLink.html();
				}
				
				
			}
			else if (photoGallery.length>0)
			{
				ht = 
				'<div class="gallery"><div class="cm-imageGallery small">';
				for (var i=0;i<photoGallery.length;i++)
				{
					ht = ht + "<a href=\"" + $(photoGallery[i]).attr("href") + "\">" + $(photoGallery[i]).text() + "</a>";
				}
				ht = ht +
				'</div></div>' +
				'<h2>${title}</h2>' +
				'<p>${text}</p>';
			}
			else if (text.length>0 && 
				text.text() &&
				$.trim(text.text()).length>0)
			{
				ht =
				'<p class="cm-fancyTitle">&nbsp;</p>' +
				'<h2>${title}</h2><p class="cm-fancyTitle">${text}</p>';
			}
			
			// carousel
			else if(carouselArea.length > 0)
			{
				ht = carouselArea.html();
				function carousel_zoom()
				{
					var $pancontainer=$('.detail div.image_zoom');
					var $this;
					var $pos;
					var $img;
					var $imgzoom;
					var $options;
					var $this_trigger;
					var $complete = false;
					
					jQuery(".detail div.image_thumb a").bind("click",function(){
						$this_trigger = jQuery(this);
						$pos = jQuery(".detail div.image_thumb a").index(this);
						$imgzoom = jQuery(this).parent("div").parent("div.product_image").find("span.image_zoom_path").text();
						
						if(jQuery('.carousel_hide').length == 0)
						{
							$('body').append('<div class="carousel_hide"></div>');	
						}
						
						var target = $this_trigger.parent("div").parent("div.product_image").find("div.image_zoom");
						
						
						$.imgpreload($imgzoom,function()
						{
							jQuery(target).html('<img src="'+$imgzoom+'" />').fadeIn(10, function(){
	
								$this = $pancontainer.eq($pos);
								$img = $this.find('img:eq(0)');
								$options={$pancontainer:$this, pos:'center', curzoom:1, canzoom:'no', wrappersize:[$this.width(), $this.height()]};
								$img.imgmover($options);
	
							});
						});						

								jQuery(".detail div.image_zoom").mouseout(function(){
										jQuery(this).fadeOut('fast', function(){
											jQuery(this).empty();
											jQuery('.carousel_hide').remove();	
										});
								});
						
						return false;
					});
					
					
				}
				
				function carousel_build()
				{
					jQuery('.detail .carosello ul').cycle({ 
						fx:     'scrollHorz', 
						speed:  'slow', 
						timeout: 0, 
						next:   '.detail .btn_carousel_next', 
						prev:   '.detail .btn_carousel_prev'
					});
					carousel_zoom();
				}
				
				function init()
				{
					carousel_build();
				}
				
				
				callback_function = carousel_build;
			}
			
			// slider
			else if(sliderArea.length > 0)
			{
				ht = sliderArea.html();
				
				function slider_build()
				{
					jQuery('.detail .slider_area ul').cycle({ 
						fx:     'scrollHorz', 
						speed:  'slow', 
						timeout: 0, 
						next:   '.detail .btn_slider_next', 
						prev:   '.detail .btn_slider_prev' 
					});
				}
				
				function init()
				{
					slider_build();
				}
				callback_function = init;
			}


			// twitter
			else if(twitterArea.length > 0)
			{
				
				ht = twitterArea.html();
				socialbar = '';
			}
			
			
			
			
			ht = "<div>" + ($.browser.msie ? "<p style=\"height:20px\">&nbsp;</p>" : "") + socialbar + ht + '</div>';
			
			ht = ht.split("${videoUrl}").join(el.find(".videoUrl").text());
			ht = ht.split("${title}").join(el.find(".title").text());
			ht = ht.split("${abstract}").join(el.find(".abstract").text());
			ht = ht.split("${text}").join(el.find(".text").text());
			ht = ht.split("${image}").join(el.find(".image").text());
			ht = ht.split("${detailImage}").join(el.find(".detailImage").text());
			
			
			var det = m_this.find(".detail");
			det.append(ht);
			
			if(callback_function != ''){
				callback_function();
			}
			
			det.initGui();
			
			m_this.find(".detail .close a").click(function(){closeDetail();return false;});
		}
		
		function getSocialToolbarCode()
		{
			return '<div class="detail_toolbar cm-socialToolbar">' +
			'	<ul class="ico cm-share">' +
			'		<li><a class="fb" href="http://www.facebook.com/sharer.php?u=[url]&t=[title]" onclick="return false;" title="Condividi su Facebook">Facebook</a></li>' +
			'		<li><a class="t" href="http://twitter.com/home?status=[title] - [url]" onclick="return false;" title="Condividi su Twitter">Twitter</a></li>' +
			'		<li><a class="del" href="http://delicious.com/post?url=[url]&title=[title]" onclick="return false;" title="Condividi su Delicious">Delicious</a></li>' +
			'		<li><a class="dig" href="http://digg.com/submit?phase=2&url=[url]&title=[title]" onclick="return false;" title="Condividi su Digg">Digg</a></li>' +
			'		<li><a class="goo" href="http://www.google.com/bookmarks/mark?op=add&bkmk=[url]&title=[title]" onclick="return false;" title="Condividi su Google">Google</a></li>' +
			'	</ul>' +
			'	<p class="btn right fbLike cm-fbLike">' +
			'	</p>' +
			'</div>';
				
		}
		
		function closeDetail()
		{
			var d = m_this.find(".detail");
			document.location.hash = "d=";
			if (d.length>0)
			{
				try
				{
					$f().unload();
					$f().pause();
				}
				catch(e)
				{};
				d.empty();
				d.fadeOut("fast", function()
				{
					$(this).remove();
					if (!$.browser.msie)
						m_this.find(".mood").css({"opacity":1, filter:"alpha(opacity=100)"});
				})
			}
		}
		
		function string2filename(s) {
			
			if(typeof(s)=="undefined")
				return "";
			if (s == "")
				return s;
			
			s = s.split('\t').join(' ');
			s = s.split('\r\n').join(' ');
			s = s.split('\n').join(' ');
			s = s.split('\r').join(' ');
			s = s.split('  ').join(' ');
			s = s.replace(/^\s*/, "").replace(/\s*$/, ""); // trim
			
			// max length 255
			s = truncate(s, 255, "");
			
			var sb = "";
			s = s.replace(/^\s*/, "").replace(/\s*$/, ""); // trim
			for ( i = 0; i < s.length; i++ ) {
				c = s.charAt( i );
				if ( ( c >= '0' && c <= '9' ) || ( c >= 'A' && c <= 'Z' ) || ( c >= 'a' && c <= 'z' ) || c == '.' || c == '_' || c == '-' )	{
					sb = sb + c;
				} else if ( c == ' ' ) { sb = sb + "-";
				} else if ( c == 'à' ) { sb = sb + "a";
				} else if ( c == 'è' ) { sb = sb + "e";
				} else if ( c == 'ì' ) { sb = sb + "i";
				} else if ( c == 'ò' ) { sb = sb + "o";
				} else if ( c == 'ù' ) { sb = sb + "u";	
				}
			}
			s = sb;
			s = s.split("--").join("-");
			
			return s;

		}
		
		function truncate(s, limit, appendString) {
			var bits, i;
	//		if (STR !== typeof str) {
	//			return '';
	//		}
			bits = s.split('');
			if (bits.length > limit) {
				for (i = bits.length - 1; i > -1; --i) {
					if (i > limit) {
						bits.length = i;
					} else if (' ' === bits[i]) {
						bits.length = i;
						break;
					}
				}
				bits.push(appendString);
			}
			return bits.join('');
		}

		init();

		return this;
	}

	
	/*
	* mood carousel
	*/
	
	PLUGIN_SET.moodCarousel = function(){
		$.require("imagepanner.js");
		$.require("jquery.imgpreload.js");
		$.require("jquery.cycle.min.js");
		return this;	
	}

	/*
	* mood slider
	*/

	PLUGIN_SET.moodSlider = function(){
		$.require("jquery.cycle.min.js");
		return this;
	}


	/*
	* mood twitter
	*/

	PLUGIN_SET.moodTwitter = function(){
	
		function init()
		{
		}
		
		init();
		
		return this;
	}
		
	PLUGIN_SET.socialToolbar = function()
	{
		var m_this = $(this);
		if (m_this.data("__socialToolbar"))
			return this;
		m_this.data("__socialToolbar", "true");
		
		function init()
		{
			m_this.find(".cm-share li a").click(function()
			{
				var u = $(this).attr("href").split("[url]").join(escape(document.location.href+""));
				u = u.split("[title]").join(escape($("head>title").text()));
				var w = window.open(u,'camomillaMilanoSocial','status=1,toolbar=1,location=1,menubar=1,resizable=1,scrollbars=auto');
				w.focus();
				return false;
			})
			
			if (!$.windowLoaded)
				$(window).load(loadFbLike);
			else
				loadFbLike();
		}
		
		function loadFbLike()
		{
			window.setTimeout(function()
			{
				var w = 205;
				var h = 30;
				m_this.find(".cm-fbLike").empty();
				m_this.find(".cm-fbLike").append('<iframe ' +
					'src="http://www.facebook.com/plugins/like.php?' +
					'href=' + (document.location.href+"").split("#").join("%23") + '&amp;' +
					'layout=button_count&amp;' +
					'show_faces=false&amp;' +
					'width=' + w + '&amp;' +
					'height=' + h + '&amp;' +
					'action=like&amp;' +
					'font=trebuchet+ms&amp;' +
					'colorscheme=light' +
					'" scrolling="no" frameborder="0" style="vertical-align:middle; border:none; overflow:hidden; width:' + w + 'px; height:' + h + 'px;" allowTransparency="true"></iframe>');
			},100);
		}
		
		init();
		
		return this;
	}
	
	/**
	 * pan zoom
	 */
	PLUGIN_SET.pannable = function(options)
	{
		var m_this = $(this);
		if (m_this.data("__pannable"))
			return this;
		m_this.data("__pannable", "true");

		function init()
		{		
			var img = m_this.find("img");
			var options={$pancontainer:m_this, pos:"top", curzoom:0, canzoom:false, wrappersize:[m_this.width(), m_this.height()]}
			img.imgmover(options);
			img.show();
		}
		
		init();

		return this;
	}
	
	/*
	 * zoomable
	 */
	PLUGIN_SET.zoomable = function(options)
	{
		var m_this = $(this);
		if (m_this.data("__zoomable"))
			return this;
		m_this.data("__zoomable", "true");

		function init()
		{	
			m_this.click(function()
			{
				window.top.jQuery.zoom(m_this.attr("href"));
				return false;
			})
		}
		
		init();

		return this;
	}
	
	/*
	 * overable
	 */
	PLUGIN_SET.overable = function(options)	{
		
		var m_this = $(this);
		if (m_this.data("__overable"))
			return this;
		m_this.data("__overable", "true");

		m_this.wrap("<div class=\"ovrbl_div\" style=\"position: relative; z-index: 0; \"></div>");
		var m_this_container = m_this.closest(".ovrbl_div");

		m_this.each( function(index, element) {
			var ovrbl_ico_start = "<div class=\"ovrbl_ico\" style=\"display:none; padding: 0; width: 56px; height: 56px; position: absolute; top: " + ((m_this_container.outerHeight(true) / 2) - 28 - 10) + "px; left: " + ((m_this_container.outerWidth(true) / 2) - 28) + "px; z-index: 100;\">";
			var ovrbl_ico_end = "</div>";
			
			var icoClassName = "odetail";
			if (m_this.parent("div").parent("div").hasClass("mood")) {
				var m_this_mood_parent = m_this.parent("div").parent("div");
				
				var text = m_this_mood_parent.find(".text");
				var videoUrl = m_this_mood_parent.find(".videoUrl");
				var image = m_this_mood_parent.find(".image");
				var detailImage = m_this_mood_parent.find(".detailImage");
				var photoGallery = m_this_mood_parent.find(".photoGallery");

				if (videoUrl.length>0 && 
					videoUrl.text() &&
					$.trim(videoUrl.text()).length>0) {
					icoClassName = "play";
				} else if (image.length>0 && 
					image.text() &&
					$.trim(image.text()).length>0) {
					icoClassName = "odetail";
				} else if (photoGallery.length>0) {
					icoClassName = "gallery";
				}
			
			}
			
			if ($(element).hasClass("ovrbl_zoom")) {
				icoClassName = "zoom";
			} else if ($(element).hasClass("ovrbl_gallery")) {
				icoClassName = "gallery";
			} else if ($(element).hasClass("ovrbl_play")) {
				icoClassName = "play";
			} else if ($(element).hasClass("ovrbl_shop")) {
				icoClassName = "shop";
			}
			
			var ovrbl_ico_image = "<a href=\"#zoom\" class=\"btn ovrbl " + icoClassName + "\" >" + icoClassName + "</a>";
			$(element).after(ovrbl_ico_start + ovrbl_ico_image + ovrbl_ico_end);
		});
		
		function init() {
			
			m_this_container.mouseenter(function() {	
				m_this.next(".ovrbl_ico").css("top", ((m_this.outerHeight(true) / 2) - 28));
				m_this.next(".ovrbl_ico").show();
				m_this.css("opacity", "0.6");
			}).mouseleave(function() {
				m_this.next(".ovrbl_ico").hide();
				m_this.css("opacity", "1.0");
			});
	
		}
		
		init();

		return this;
	}
	
	/**
	 * common
	 */
	if (!window.console)
		window.console = {log:function(){}}
		
		
	$.promptLogin = function()
	{
		$("html").animate({scrollTop:0}, 500, function()
		{
			$(".cm-tools-login a.first").click();
		});
	}
		
	$.zoom = function(img)
	{
		$.require("imagepanner.js");
		
		var fc = $($(document.body).children().get(0));
		var left = fc.offset().left;
		var top = $("html").scrollTop();
		var width = fc.outerWidth();
		var height = $(window).height();
		
		var cnt = $("<div class=cm-zoomCont><div class=pan><img/></div><div class='ico_close cm-close'><a>Chiudi</a></div></div>");

		cnt.css({"left":left + width/2,
				"top":top + height/2,
				"width":0,
				"height":0,
				"border":"3px dotted #aaaaaa"});
		cnt.find(".pan img").attr("src",img);
				
		$("body").append(cnt);
		var cnt = $(".cm-zoomCont");

		cnt.find("img").hide();
		
		var endCss = {"left":left,
					"top":top,
					"width":width,
					"height":height};
		
		cnt.animate(endCss, 500, "linear", function()
		{
			cnt.css({"border":"none",
					"background-color":"FAE0F2"});

			cnt.find(".cm-close").show();
			cnt.find(".cm-close").click(function()
			{
				$(".cm-zoomCont").empty();
				$(".cm-zoomCont").remove();
				return false;
			})
			
			var pan = cnt.find(".pan");
			var img = pan.find("img");
			var options={$pancontainer:pan, pos:"top", curzoom:0, canzoom:false, wrappersize:[pan.width(), pan.height()]}

			pan.show();
			img.imgmover(options);
			img.show();
			
		});
	}
	
	$.preloadImages = function(preload, callback)
	{
		var img = document.createElement('img');
		$(img).bind('load', function() {
			var t = $(this);
			if (!t.data("imageList"))
				t.data("imageList",new Array());
			if (t.attr("src"))
			{
				t.data("imageList").push({src:t.attr("src"),
									width:t.get(0).width,
									height:t.get(0).height});
			}
			if(preload[0])
				this.src = preload.shift();
			else
				callback(t.data("imageList"));
		})
		$(img).bind('error',function(evt)
		{
			var t = $(evt.target);
			if (!t.data("imageList"))
				t.data("imageList",new Array());
			/*t.data("imageList").push({src:t.attr("src"),
								width:0,
								height:0});*/
			if(preload[0])
				this.src = preload.shift();
		})
		$(img).trigger('load');
	}
	
	$.getResourceBaseUri = function()
	{
		if (!$.cmResourceBaseUri)
		{
			var s = $("head>link").attr("href");
			$.cmResourceBaseUri = s.substring(0,s.lastIndexOf("/res/")+5);
		}
		return $.cmResourceBaseUri;
	}
	
	$.require = function(scr)
	{
		if (!$.require[scr])
		{
			$.require[scr] = true;
			var scriptBase = $.getResourceBaseUri() + "js/lib/";
			$("head").append("<scr" + "ipt type=\"text/javascript\" src=\"" + scriptBase + scr + "\"></script>");
		}
	}
	
	$.showModalCover = function()
	{
		if ($("#cm-modalCover").length==0)
		{
			$(document.body).append('<div id="cm-modalCover">&nbsp;</div>');
			$(window).resize(function()
			{
				$("#cm-modalCover").width($(window).width());
				$("#cm-modalCover").height($(window).height());
				$("#cm-modalCover").css("top", $("html,body").scrollTop());
			})
			$(window).scroll(function()
			{
				if ($("#cm-modalCover").is(":visible"))
				{
					$("#cm-modalCover").width($(window).width());
					$("#cm-modalCover").height($(window).height());
					$("#cm-modalCover").css("top", $("html,body").scrollTop());
				}
			})
		}
		$("#cm-modalCover").width($(window).width());
		$("#cm-modalCover").height($(window).height());
		$("#cm-modalCover").css("top", $("html,body").scrollTop());
		$("#cm-modalCover").show();
	}
	 
	$.showLoader = function(modal)
	{
		if ($("#cm-wait").length==0)
			$(document.body).append("<div id='cm-wait'><img src='" + $.getResourceBaseUri() + "img/loader_white.gif'/>Attendere..</div>");
		var l = $("#cm-wait");
		l.css({"left":Math.floor($(window).width()/2-l.width()/2),
						"top":Math.floor($(window).height()/2-l.height()/2)+$("html,body").scrollTop()});	
		l.show();
		
		if (modal)
			$.showModalCover();
	}
	
	$.hideLoader = function()
	{
		$("#cm-wait").hide()
		$("#cm-modalCover").hide();
	}
	
	$.alert = function(msg, callback)
	{
		$.showPopupMessage({"message":msg, "callback":callback})
	}
	
	$.showPopupMessage = function(options)
	{
		if (options.callback)
			$.showPopupMessage.callback = options.callback;
		var l = $("#cm-popupMessage");
		if (l.length==0)
		{
			$(document.body).append("<div id='cm-popupMessage' class='cm-curvy'><table><tr><td></td></tr></table><p class='btn'><a href='#close' class='cm-curvy'>Ok</a></div>");
			l = $("#cm-popupMessage");
			l.find(".btn a").click(function(e)
			{
				e.stopPropagation();
				$(this).closest("#cm-popupMessage").hide();
				$("#cm-modalCover").hide();
				if ($.showPopupMessage.callback)
				{
					$.showPopupMessage.callback();
					delete $.showPopupMessage.callback;
				}
				return false;
			})
		}

		l.find("td").html(options.message);
		l.show();
		l.initGui();
		l.css({"left":Math.floor($(window).width()/2-l.width()/2),
						"top":Math.floor($(window).height()/2-l.height()/2)+$("html,body").scrollTop()});	
		$.showModalCover();
	}
	
	$.openInlineDetail = function()
	{
		if ((document.location.hash+"").indexOf("#d=")==0)
		{
			var duri = (document.location.hash+"").split("#d=")[1];
			if ($.trim(duri).length>0)
			{
				$("body").append("<a class='cm-temp-det' style='display:none' href='" + duri + "'>#</a>");
				$(".cm-temp-det").cminlineDetail();
				$(".cm-temp-det").trigger("click");
			}
		}
	}
	
	$.fn.initGui = function()
	{
		// cufon
		Cufon.replace(".cm-fancyTitle"); 
		$(this).find(".cm-fancyTitle").show();
		
		// setup plugins	
		for (var p in PLUGIN_SET)
		{
			$.fn[PLUGIN_PREFIX + p] = PLUGIN_SET[p];
			$(this).find("." + PLUGIN_PREFIX + "-" + p).each(function()
			{
				$(this)[PLUGIN_PREFIX + p]();
			})
		}
	}
	
	// to be removed
	$(document).ready(function()
	{
		$("html").initGui();
	});
	
	$(window).load(function()
	{
		$.windowLoaded = true;
		$.openInlineDetail();
	})
	
})(jQuery);
