/********** GESTIONE DELLE GALLERIE (PARTE SUPERIORE MENU) **********/
// Setting degli elementi scrollable.
function setScrollable(div){
	
	var itemsNumber = 0;
	var itemsSize = 0;
	var itemsWidth = 0;
	
	div.scrollable();

	var api = div.data("scrollable");
	
	if(api)
		var itemsNumber = api.getSize();
	//alert(itemsNumber);
	
	var itemsSize = div.width();
	//alert(itemsSize);
	
	var itemsWidth = itemsNumber*itemsSize;
	//alert(itemsWidth);
	
	div.children().css("width", itemsWidth);
}

// Funzione che collega le varie gallerie alla funzione di scroll.
function setScrollGalleries(){
	
	var divs_to_scroll = $(".scrollable").filter(":visible");
	
	setScrollable(divs_to_scroll);
	
	var low_scrollGallery = $("#low-scr");
	if(low_scrollGallery) {
		setScrollable(low_scrollGallery);
	}
	
	var video_scrollGallery = $("#video-scr");
	var immagini_scrollGallery = $("#img-scr");
	var audio_scrollGallery = $("#audio-scr");
	var docs_scrollGallery = $("#docs-scr");
	
	if(video_scrollGallery) {
		setScrollable(video_scrollGallery);
	}
	
	if(immagini_scrollGallery) {
		setScrollable(immagini_scrollGallery);
	}
	
	if(audio_scrollGallery) {
		setScrollable(audio_scrollGallery);
	}
	
	if(docs_scrollGallery) {
		setScrollable(docs_scrollGallery);
	}
}

// Funzione di fix per IE7.
function slideFix(){
	
	var currentBrowser = $.browser;
	if(currentBrowser.msie && currentBrowser.version == "7.0") {
		
		$(".slide a img").css({"vertical-align":"baseline"});
		
		$(".slide").each(function(){	
			
			var slideHeight = $(this).height();
			var slideImg = $(this).find("img");
			var imgHeight = slideImg.height();
			
			var marginTop = (slideHeight-imgHeight)/2;
			slideImg.css({"margin-top":marginTop+"px"});
		});
	}
}

/**************************************************/

/********** FUNZIONI DI GESTIONE DEI MENU **********/
// Funzione di gestione del menu nella parte superiore della pagina (#libreria/#primopiano).
function switchingMenu() {
	
	var btn_libreria = $("#btn-libreria");
	var btn_primo_piano = $("#btn-primo-piano");
	
	var libreria = $("#libreria");
	libreria.find("iframe").css("display","block"); //Fix for Chrome.
	
	var primo_piano = $("#primo-piano");
	
	var buttons = new Array(btn_libreria, btn_primo_piano);
	
	$.each(buttons, function(){
		
		$(this).click(function(){
			
			$(this).siblings().removeClass("active");
			$(this).addClass("active");
		});
	});
	
	btn_libreria.click(function(){
		
		primo_piano.fadeOut("slow", function(){
			libreria.fadeIn("slow");
			libreria.find("iframe").css("display","block");
			
			setScrollable($("#libreria .scrollable"));
		});
		return false;
	});
	
	btn_primo_piano.click(function(){
		
		libreria.fadeOut("slow", function(){
			primo_piano.fadeIn("slow");
			primo_piano.find("iframe").css("display","block");
			
			setScrollable($("#primo-piano .scrollable"));
		});
		return false;
	});
}

// Funzione di gestione dei tab menu.
function tabMenu() {
	
	var activateTabId;
	
	$(".tab-content").hide(); //Hide all content
	$(".tab-content:first").show(); //Show first tab content
	
	//On Click Event
	$("#tabs ul li a").click(function(e) {
		
		e.preventDefault();
		
		if($(this).hasClass("active") != true) {
		
			$("#tabs ul li a").removeClass("active"); 
			$(this).addClass("active"); 
			
			activateTabId = $(this).attr("href");
			
			$(".tab-content").hide();
			
			$(activateTabId).fadeIn("slow");
		} 
		
		return false;
	});
}

// Setting dei menu.
function setMenus(){
	
	// Gestione del menu nella parte superiore della pagina.
	var primo_piano = $("#primo-piano");
	primo_piano.hide();
	
	switchingMenu();
	tabMenu();
}

/**************************************************/

/********** GESTIONE "READ MORE" **********/
function setReadMore(){
		
	var btn_readmore = $("#read-more");
	var btn_closemore = $("#close-more");
	
	btn_closemore.hide();
	btn_readmore.show();
		
	btn_readmore.click(function(){
		
		$("#short-div").hide();
		$("#long-div").fadeIn("slow");
		btn_readmore.hide();
		btn_closemore.show();
			
		return false;
	});	
		
	btn_closemore.click(function(){
	
		$("#long-div").hide();
		$("#short-div").fadeIn("slow");
		btn_closemore.hide();
		btn_readmore.show();	
		
		return false;
	});
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
} //trimma una stringa
    
String.prototype.stripHtml = function() {
	return this.replace(/(<([^>]+)>)/ig,"");
} //toglie i tag html da una stringa

String.prototype.linearize = function() {
	return this.replace(/\n/g,"");
} //toglie gli a capo
    
String.prototype.smartTruncateAt = function(at) {
	var truncated = this.substring(0, at);
	
	var trunc_arr = truncated.match(/^(.{0,})\s+\S{0,}$/);
	
	if (trunc_arr && trunc_arr.length > 0) {
		truncated = trunc_arr[1];
	} 
	
	return truncated;
} //tronca una stringa lineare allo spazio (\s) più prossimo al valore di at (restituisce quindi frasi intere, tranne che se non viene trovato uno spazio)

function abstractExpand (btn) {
	
	var jqbtn = $(btn);
	var truncated_span = $(btn).parent('span');
	var full_span = truncated_span.next('span');
	truncated_span.css( "display", "none");
	full_span.fadeIn();
	jqbtn.css("display","none");
	
	$(".comments").css({"height":"auto"});
	setColumnsBg($(".content"));
	
}

function toExpandableAbstract(str, at, div) {
	
	if(!str || !at) return;
	
	var string_to_reduce = str;
	
	if(div == "commento") {
		
		var comment_info = null;

		var comment_indexOf = str.indexOf("div class");
		
		if(comment_indexOf == -1){
			
			comment_indexOf = str.indexOf("DIV class");
			string_to_reduce  = str.substring(0, comment_indexOf-1);
			comment_info = str.substring(comment_indexOf, str.length);
		
		} else {
			string_to_reduce  = str.substring(0, comment_indexOf-1);
			comment_info = str.substring(comment_indexOf, str.length);
		}
	}

	if(div != "corporate-descr")
		string_to_reduce = string_to_reduce.trim().linearize().stripHtml();
		
	if(string_to_reduce.length <= at) {
		
		if((div == "commento") && (comment_info != null)) {
			string_to_reduce = string_to_reduce + "<"+comment_info;
		} else if(div != "commento"){
			
			$("#read-more").hide();
			$("#close-more").hide();	
		} else return string_to_reduce;
	}
	
	else {
			
		var trimstrippedstr = string_to_reduce;
		var reducedstr = trimstrippedstr.smartTruncateAt(at);
		
		if(div == "commento") {
			var new_str = "<span class=\"truncated_content\">"+reducedstr+" [...] <a href=\"#\" onClick=\"abstractExpand(this);return false;\">Visualizza altro</a></span><span class=\"full_content\">"+string_to_reduce+"</span>";
			
			if(comment_info != null) 
				new_str = new_str + "<"+comment_info;
			
			return new_str;
			
		} else {
			
			setReadMore();
			lastTag = "";
			
			if(div == "corporate-descr"){
				var firstTagChar = reducedstr.lastIndexOf("<");
				var lastTagChar = reducedstr.lastIndexOf(">");
				var lastTag = reducedstr.substring(firstTagChar+1,lastTagChar+1);
				if((lastTag != null) && (lastTag.indexOf("/") == -1) && (lastTag.indexOf("p") == -1)) lastTag = "</"+lastTag;
			}
			
			return "<div id=\"short-div\">"+reducedstr+lastTag+"[...]</div><div id=\"long-div\">"+string_to_reduce+"</div>";
		}
	}
	
} //crea un abstract espandibile da un testo e appende un pulsante per espandere il tutto. Il testo intero rimane in uno span con classe 'truncated_content', il testo in abstract rimane in uno span con classe 'full_content'

/**************************************************/

function setColumnsBg(group) {
	
	var maxHeight = 0;
	var childrenHeight = 0; 
	
	group.each(function(){
		
		$(this).find(".resize").each(function() {
			
			var thisHeight = $(this).height();
			//alert(thisHeight);
			if(thisHeight > maxHeight) {
				maxHeight = thisHeight;
			}
			
			if($(this).children(".resize-part").length != 0){
				
				$(this).children(".resize-part").each(function(){
					
					childrenHeight += $(this).height();		
				});
			}
			
		});
		
		$(this).find(".resize").height(maxHeight);
		
		if(childrenHeight < maxHeight) {
			
				var offset = maxHeight - childrenHeight;
				
				var last_child_height = $(this).find(".resize-part:last").height();
				var new_lastchild_height = last_child_height + offset;
				
				$(this).find(".resize-part:last").height(new_lastchild_height);
		}
		
		if($(".archive").length != 0){
			
			if($(".tagcloud").length != 0) {
			
				$(".tagcloud").parent().parent().find(".entry").css({"padding":"10px 0"});
				$(".tagcloud").css({"padding":"10px"});
			}
		}

	});
}

/********** GESTIONE DEI RISULTATI DELLA RICERCA **********/
// Funzione per il calcolo dei margini delle descrizioni (float l/r)
function calculateMargin(container, domElToCalc, domElToAlign, domIndex, pCounter, additionalMargin) {
	
	var midContainerWidth = (container.width())/2;
	
	var domElToCalc_margin_arraystr = domElToCalc.eq(domIndex).css("margin-left").split("px");
	var domElToCalc_margin = parseInt(domElToCalc_margin_arraystr[0]);
	
	var containerMarginLeft = container.position().left;
	var domElToCalc_offset = containerMarginLeft + additionalMargin + domElToCalc_margin + Math.round(domElToCalc.eq(domIndex).position().left);
	
	// 8 è il numero di elementi per pagina. Si può parametrizzare facilmente in caso di bisogno.
	var elementToShowIdx = pCounter*8 + domIndex;
	
	if(domElToCalc_offset < midContainerWidth){
		
		domElToAlign.eq(elementToShowIdx).css({"margin-left":domElToCalc_offset});
		
	} else {
		domElToCalc_margin_arraystr = domElToCalc.eq(elementToShowIdx).css("margin-right").split("px");
		domElToCalc_margin = parseInt(domElToCalc_margin_arraystr[0]);
		
		var domElToCalc_width = domElToCalc.eq(elementToShowIdx).width();
		
		domElToCalc_offsetright = (container.width() - domElToCalc_offset) - domElToCalc.eq(elementToShowIdx).width();
		//alert(domElToCalc_offsetright);
		
		domElToAlign.eq(elementToShowIdx).css({"float":"right"});
		domElToAlign.eq(elementToShowIdx).css({"text-align":"right"});
		domElToAlign.eq(elementToShowIdx).css({"margin-right":domElToCalc_offsetright+(containerMarginLeft*2)});
	}
	
	domElToAlign.eq(elementToShowIdx).show();
}

// Funzione di gestione delle descrizioni.
function setDescriptions(){
	
	var slides_container = $(".slideshow");
	
	var descriptions_array = $(".descr");	
	var slides_array = $(".results-container .slide");
	
	var leftarrow_width = $(".arrow").outerWidth(true);
	
	var page_counter = 0;
	var pages = Math.ceil(slides_array.length/8);
	
	descriptions_array.hide();
	
	calculateMargin(slides_container, slides_array, descriptions_array, 0, page_counter, leftarrow_width);
	
	$(".right").click(function(){
		
		if(page_counter < pages)
			page_counter++;
			
		//alert(page_counter);
	});
	
	$(".left").click(function(){
		
		if(page_counter >= 1)
			page_counter--;
		
		//alert(page_counter);
	});
	
	slides_array.mouseover(function(){
		
		descriptions_array.hide();
		
		var slide_index = $(this).index();
		
		calculateMargin(slides_container, slides_array, descriptions_array, slide_index, page_counter, leftarrow_width);
	});
}

/**************************************************/

/********** FUNZIONI DI GESTIONE POPUNDER **********/
function openPopunder(btn) {
	
	var btn_id = btn.attr("id");
	
	switch(btn_id){
		
		case "difetti":
		
			//$("#div-difetti").fadeIn("slow");
			fakebox.message( $("#div-difetti").html(),630,260);
			break;
			
		default: 
			
			var video_url = btn.attr("video:url");
		
			$("#popunder-video").html("<object width=\"640\" height=\"390\"><param name=\"movie\" value=\"http://www.youtube.com/v/cosoeqM8MQQ?fs=1&amp;hl=it_IT\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"" + video_url + "&autoplay=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"640\" height=\"480\"></embed></object>");
		
			$("#div-video").fadeIn("slow");
			
			break;
			
	}
	
}

function closePopunder(){
	
	$(".btn-close").click(function(){
			
			if($(this).parents("#div-video"))
				$("#popunder-video").html("");
				
			 $(".popunder").fadeOut("slow");
	});	
}

/**************************************************/

/********** COMMENTI: ALLINEAMENTO LAST VERSION **********/

function postAttivitaComment(form) {
	
	var jqform = $(form);
	var txtarea = jqform.find("textarea").eq(0);
	var btn = jqform.find("a.attivitasubmit");
	if(btn.hasClass("loading")) return;
	
	btn.addClass("loading");
	
	var url = form.action;
	
	var parameters = jqform.serialize();
	
	$.ajax({
	  	url: url,
	  	type: "POST",
	  	data: parameters,
		success: function(response){
	  		if(response.toString().trim() == "true") {
	  			txtarea.val("");
				usertabs.update("attivita");	
			} 
		},
		error: function() {
			alert("Spiacenti: si è verificato un errore durante la registrazione del commento.\nProvare a ricaricare la pagina o riprovare più tardi.");
	  	},
		complete: function(){
			btn.removeClass("loading");
		}
	});
}

function loadComments(page) {
	
	var comments_container = $(".comments");
	//alert("Loading...");
	comments_container.css({'height':'auto'});
	
	var no_comments = $("#no-comments"); /* Su Piemme attuale non viene gestito con un p nell'html, è una response della chiamata ajax; allineare la classe della response a quella */
	no_comments.hide();					 /* dell'html */
	
	if(comments_container.length == 0) {
		//alert("comments_container.length è 0");
		return;
	} else {
		
		//alert("comments_container.length è diverso da 0");
		var ajax_loading = $("#loading");
		
		var url = comments_container.attr("bs:url");
		//var url = "prova_commenti.html"; // html di prova per simulare la response
		
		//alert(url);
		
		var parameters = {
			"id" : comments_container.attr("bs:id"),
			"class" : comments_container.attr("bs:class")
		}
		
		//se viene passata la page vuol dire che è stato cliccato il paginatore (se no è il loadComments di default all'onDomReady)
		if(page != null) {
			parameters["page"] = page;
		}
	
		//se esiste l'attributo bs:hidden viene passato anche il parametro hidden=true (si tratta dei libri fuori catalogo) 
		if(comments_container.attr("bs:hidden")) {
			parameters["hidden"] = comments_container.attr("bs:hidden");
		}
		
		comments_container.css("display","none");
		
		$.ajax({
			
		  url: url,
		  type: "POST",
		  data: parameters,
		  success: function(response){
		  	
		  	if(response.length == 0) {
		  		//alert("if");
		  		 $("#loading").after("<p class='no-comments' id='no-comments'><em>Non sono ancora stati inseriti commenti.</em><br/>Scrivi tu il primo&hellip;</p>");
		  	} else {
			   
			   $("#comment-list").html(response);
			   
			   var showmore = comments_container.find(".commento");
			    
			    for(var i = 0; i < showmore.length; i++) {
			    	var str = showmore.eq(i).html();
			    	showmore.eq(i).html( toExpandableAbstract(str, 500, "commento") );
				}

		  	}
		   
		   	comments_container.fadeIn("slow", function(){
		   		
		   		comments_container.parents(".content").find(".resize").css({'height':'auto'});
		   		setColumnsBg(comments_container.parents(".content"));
		   	});
		   	
		  },
		  
		  error: function() {
		    comments_container.html("<p class='no-comments'><em>Si è verificato un errore durante il caricamento dei commenti.</em><br />Provare a ricaricare la pagina.</p>");
		  },
		  
		  complete: function(){
		    ajax_loading.hide();
		  }	
		});
	}
}

/********** FINE ALLINEAMENTO **********/

// Validazione form dei commenti.
function validateCommentForm(cform){
	
	// Hiding various
	var comments_container = $(".comments");
	
	$("#thanks").hide();
	
	if($(".my-piemme").length == 0) {
		$("#privacy-offerte").hide();
		$("#privacy-terzi").hide(); 
	
		$("#privacy-condizioni").click(function(){
		
			//alert("Checking...");	
			comments_container.css({'height':'auto'});
		
			$("#privacy-offerte").slideDown("slow");
			$("#privacy-terzi").slideDown("slow",function(){
			
				setColumnsBg(comments_container.parents(".content"));
			});
		
			//setColumnsBg(comments_container.parents(".content"));
		});
	}
	
	cform.submit(function(){
		
		comments_container.css({'height':'auto'});
		setColumnsBg(comments_container.parents(".content"));
	});
	
	cform.validate({
		
		submitHandler: function(){
				
			var thanks = $("#thanks");
			var add = $("#add");
				
			add.fadeOut("slow");
				cform.fadeOut("slow", function(){
				thanks.fadeIn("slow");	
			});
				
			var url =  cform.attr("action");
			//alert(url);
			var data = cform.serialize();
				
			$.ajax({
				type: 'POST',
				url: url,
				data: data,
				success: function(response) {
					thanks.html(response);
				},
				error: function() {
					thanks.html("Spiacenti: si è verificato un errore durante la registrazione del commento.<br/>Provare a ricaricare la pagina o riprovare più tardi.");
				}
				
			});	// ajax
				
			return false;
		}
		
		
	}); // validate
	
}

/**************************************************/

//var activateTabId;

var google_conversion_id = 1042495337;
var google_conversion_language = "it";
var google_conversion_format = "1";
var google_conversion_color = "ffffff";
var google_conversion_label = "Zw0mCJmzRhDp7ozxAw";

var messages_url = "/mypiemme/profilo/messages";
var messages_userbox_url = "/responses/messages_userbox.html";

var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

var tooltip_store = {};

var bookmarklabels = {
	"add_book" 				: 	["Aggiungi il libro ai tuoi preferiti", "E' un tuo preferito"],
	"add_author" 			: 	["Aggiungi l'autore ai tuoi preferiti", "E' un tuo preferito"],
	"add_friend" 			: 	["Aggiungi agli amici", "E' un tuo amico"],
	"add_friend2"			: 	["Diventa amico", "E' un tuo amico"],
	"switch_bookmark"		:	["Aggiungi ai preferiti", "Rimuovi dai preferiti"],
	"remove_card"			:	[], 
	"dummy"					:	null
};

$.fn.unwrap = function () {
  return this.each(function(){ $(this.childNodes).insertBefore(this); }).remove();
};

if (typeof console == "undefined") var console = { log: function() {} };

function trackDownload(url) {
	if(typeof(bsTracker) == "object" && typeof(pmTracker) == "object") {
		bsTracker._trackPageview("/downloads/"+url);
		pmTracker._trackPageview("/downloads/"+url);
	} 
}

function trackOutgoing(url) {
	if(typeof(bsTracker) == "object" && typeof(pmTracker) == "object") {
		bsTracker._trackPageview("/outgoing/"+url);
		pmTracker._trackPageview("/outgoing/"+url);
	} 
}

function trackBol(product_name, category, price, sku, url) {
	if(typeof(bsTracker) == "object" && typeof(pmTracker) == "object") {

		pmTracker._addTrans(
			"0", // Order ID
			"0", // Affiliation
			price, // Total
			"0", // Tax
			"0", // Shipping
			"CASALE MONFERRATO", // City
			"PIEMONTE", // State
			"ITALY" // Country
		);
		
		pmTracker._addItem(
			"0", // Order ID
			sku, // SKU
			product_name, // Product Name
			category, // Category
			price, // Price
			"1" // Quantity
		);
		
		pmTracker._trackTrans();
		
		window.open(url);

	}
}

function initValidator() {
	if($.validator == null) return;
	
	//$.validator.setDefaults({submitHandler: function(theform) {theform.submit();}});
	
	$.validator.addMethod("labelledsearch", function(value, element, params) {
		if(value.toLowerCase() == params.toLowerCase() || value.replace(/\s+/gi,"") == "") {
			return false;
		}
		return true;
	}, "Inserire una chiave di ricerca");
	
	//accetta lettere minuscole, numeri, '_' e '-'
	$.validator.addMethod("az_AZ_09", function(value, element, params) {
		var re = /[^a-zA-Z0-9]/g;
		if(value.match(re)) {
			//element.value = element.value.replace(re,"");
			return false;
		}
		return true;
	}, "Questo campo accetta solo lettere dell'alfabeto e numeri");
	  
	
	$.validator.addMethod("watermarkrequired", function(value, element, params) {
		var obj = $(element);
		if(obj.val() == obj.attr("bs:watermark") || obj.val() == "") {
			return false;  
		}
		return true;
	}, "");
	
	$.validator.addMethod("ajaxed_verify", function(value, element, params) {
		
		var url = params["url"];
		
		var ajaxloader = params["ajaxloader"];
		var ajaxloader_exists = (ajaxloader && ajaxloader.length > 0);
		
		if(ajaxloader_exists) {
			ajaxloader.css("display","block");
		}
		
		var is_true = false;
		
		var jqform = $(element).parents('form').eq(0);
		var parameters = jqform.serialize();
		
		$.ajax({
		  	url: url,
		  	type: "POST",
		  	async:false,
		  	data: parameters,
			success: function(response){
				if(response.toString().trim() == "true") {
					is_true = true;
				} 
			},
			error: function() {
				alert("Spiacenti: si è verificato un errore durante la registrazione dei dati.\nProvare a ricaricare la pagina o riprovare più tardi.");
		  	},
			complete: function(){
				if(ajaxloader_exists) {
					ajaxloader.css("display","none");
				}		
			}
		});
		
		return is_true;
		
	});
}

function validateForms( one_specific_form ) {

	//può essere passato a validateForms un singolo form ("dom form", non un jqueryform). Se è così, verrà validato solo quello.
	if(one_specific_form) {
		var allforms = $(one_specific_form);
	} else {
		var allforms = $("form");
	}
	for(var i = 0; i < allforms.length; i++) {
		var singleform = allforms.eq(i);
		var singleform_submit = singleform.attr("bs:submit");
		switch(singleform_submit) {
			case "usertabs_attivita":
				singleform.validate({
					submitHandler : function(form) {
						postAttivitaComment(form);
					}
				});
			break;
			
			case "usertabs_amici":
				singleform.validate({
					submitHandler : function(form) {
						usertabs.filter("amici");
					}
				});  
			break;    
			
			case "logincard":
				singleform.validate({
					submitHandler : function(form) {
						cardLogin(form);
					}
				});  
			break; 
			
			case "searchform":
				singleform.validate({
					submitHandler: function(form) {
						window.location = "/ricerca/" + encodeURIComponent($('#'+form.id + " #q").val());
					}
				});
			break;
			
			case "registrationcard":
				
				$("#privacy-condizioni").find("input:checkbox:checked").attr("checked", false);
				$("#privacy-offerte").hide();
				$("#privacy-terzi").hide(); 
	
				$("#privacy-condizioni").click(function(){
		
					$("#privacy-offerte").slideDown("slow");
					$("#privacy-terzi").slideDown("slow",function(){
					});
				});
				
				singleform.validate({
					/*submitHandler : function(form) {
					},*/
					success : function(label) {
						var related_field = label.prev("input[name='nickname']").eq(0);
						if(related_field.length > 0) {
							label.addClass("good").text("Ok!")	
						} 
					},
					messages : {
						"nickname" : {
							"required" : "Scegliere un Nickname",
							"minlength" : "Il Nickname deve essere di almeno 3 caratteri",
       						"ajaxed_verify" : "Questo nickname non è più disponibile"
       					}
     				},
					onkeyup : false,
					onfocusout: false
				});  
			break;
			
			case "edit_userdatafragment":
				singleform.validate({
					submitHandler : function(form) {
						var jqform = $(form);
						var btn_submit = jqform.find("a.userdatasubmit");
						var editcard_div = $("div.editcard");
						var expandable_div = jqform.parents("div.userdata").eq(0);
						var btn_userdata_expand = $("a.btn_userdata_expand");
						shieldUserTab(editcard_div, true);
						btn_submit.addClass("loading");
						$.ajax({
						  	url: form.action,
						  	type: "POST",
						  	data: jqform.serialize(),
							success: function(response){
								jqform.find(".emptyaftersubmit").val("");
								expandable_div.fadeOut("normal", function() {
									expandable_div.removeClass("expanded");
									btn_userdata_expand.removeClass("mod_close");
									btn_userdata_expand.html("Modifica");
								});
								showMessage(response);
							},
							error: function(response) {
								showMessage(response.responseText);
							},
							complete: function(){
								btn_submit.removeClass("loading");
								shieldUserTab(editcard_div, false);
								
							}
						});
					}
					
				});  
			break;
			
			case "post_image_crops":
				singleform.validate({
					submitHandler : function(form) {
						var jqform = $(form);
					
						var cropdata = jqform.serialize();
						
						//alert(cropdata);
						
						var avatar_img = $("div.userdata img.avatar_img");
						var avatar_img_field = $("div.userdata input[name='avatar_img']");
						 
						avatar_img.addClass("loading").attr("src","");
						
						$.ajax({
						  	url: form.action,
						  	type: "POST",
						  	data: cropdata,
							success: function(response) {
								avatar_img.css("display","none").attr("src",response).fadeIn("slow");
								fakebox.hide("cropping_window");
								avatar_img_field.val(response);
								//se hai cambiato l'avatar deve cambiare anche nell'elenco delle attività e dei commenti.
								usertabs.load('attivita');
								usertabs.load('commenti');
								//deve inoltre cambiare all'interno della tab attività ( vicino al form per inserire un commento ) e in alto a destra nel boxino a fianco al logo. 
								$(".avt_refresh").attr("src",response);
							},
							error: function(response) {
								$("div.userdata img.avatar_img")
								showMessage(response.responseText);
							},
							complete: function(){
								avatar_img.removeClass("loading");
								
								//btn_submit.removeClass("loading");
								//shieldUserTab(editcard_div, false);
							}
						});
						
					}
				});
			
			break;
			
			default:
			  singleform.validate({
			    submitHandler : function(theform) {
			      theform.submit();
			    }
			  });  
		}
	}
}

function cardLogin(form) {
	var jqform = $(form).eq(0);
	var url = jqform.attr("action");
	
	var parameters = jqform.serialize();
	
	$.ajax({
	  	url: url,
	  	type: "POST",
	  	data: parameters,
		success: function(response){
			var trimmedresponse = response.toString().trim(); 
	  		if(trimmedresponse == "login") {
				window.location.reload();
			} else if (trimmedresponse == "password_ko") {
				var validator = jqform.validate();
          		validator.showErrors ({"password": "Spiacenti: la password immessa non è valida!"});
			} else if (trimmedresponse.indexOf("form") != -1) {
				jqform.fadeOut("normal", function() {
					jqform.after(trimmedresponse);
					var added_form = jqform.next("form").eq(0);
					//jqform.remove();
					validateForms(added_form.get(0));
				});
			}
		},
		error: function() {
			alert("Spiacenti: si è verificato un errore durante la registrazione del commento.\nProvare a ricaricare la pagina o riprovare più tardi.");
	  	},
		complete: function(){
			//btn.removeClass("loading");
		}
	});
}

function submitForm(theform) {
	$(theform).validate();
	$(theform).submit();
}

function checkChangesOnExpand(currently_expanded) {
	//accetta come argomento il div attualmente espanso (da cui ricavare gli storedvalues);
	if(currently_expanded && currently_expanded.length > 0) {
		var storedvalues = currently_expanded.get(0).storedvalues;
		var actualvalues = currently_expanded.find("form").serialize();
		if(storedvalues != actualvalues) {
			return false;
		}
	}	
	return true;	
}

function makeExpandables() {
	
	var expanded = $(".expanded");
	var expanded_divs = expanded.next("div.toggable");  
	expanded_divs.css("display","block");
	expanded.click(function() {
		var current = $(this);
		current.unbind();
		current.removeClass("expanded");
		current.addClass("collapsed");
		current.next("div.toggable").slideUp("fast", function() {
		  
		  makeExpandables();
		});
		
	})
	
	var collapsed = $(".collapsed");
	var collapsed_divs = expanded.next("div.toggable");
	collapsed.click(function() {
		var current = $(this);
		current.unbind();
		current.removeClass("collapsed")
		current.addClass("expanded")
		current.next("div.toggable").slideDown("fast", function() {
			makeExpandables();
	  	});
	})
	
	//espandibili e collassabili nell'account edit
	var btn_userdata_expand = $("a.btn_userdata_expand");
	btn_userdata_expand.click(function() {
		
		var btn = $(this);
		
		//trova il div attualmente espanso...
		var currently_expanded = $("div.userdata.expanded").eq(0);
		
		
		//...se nulla è stato cambiato nel form che si trova all'interno del div espanso, trova il nuovo div da espandere
		if(checkChangesOnExpand(currently_expanded)) {
			
			var expandableparent = btn.nextAll("div.userdata").eq(0);
			btn_userdata_expand.removeClass("mod_close");
			btn_userdata_expand.html("Modifica");
			
			//se il nuovo div da espandere è quello già aperto lo chiude, altrimenti lo apre (e setta i valori del form all'apertura) e chiude quello precedentemente aperto
			if(expandableparent.get(0) == currently_expanded.get(0)) {
				expandableparent.removeClass("expanded").css("display","none");
			} else {
				currently_expanded.removeClass("expanded").css("display","none");
				expandableparent.slideDown("fast", function() {
					expandableparent.addClass("expanded");
					btn.addClass("mod_close");
					btn.html("<span>Chiudi</span>")
					expandableparent.get(0).storedvalues = expandableparent.find("form").serialize();
				});
			}
		} else {
		//...altrimenti manda il messaggio dicendo che è stato cambiato qualcosa e se si vogliono salvare i dati
			//$(".swfupload").css("visibility","hidden");
			
			fakebox.message( $("div.editcard div.somethingchanged").html(),630,260, null, function() {
				//$(".swfupload").css("visibility","");
			});
		}
		
		return false;
	});
}

function shieldUserTab(div, turn_on) {
	
	if(turn_on == true) {
		
		div.storedcssposition = div.css("position");
		div.css("position","relative");
		div.append("<div class=\"usertab_shield\"></div>")
		var shield = div.find(".usertab_shield");
		if(IE6) {
			var filter = div.find("select.usertab_filter");
			if(filter.length > 0) {
				filter.css("visibility","hidden");
			}
		}
		
		var paddings_lr = parseInt(div.css("paddingLeft"))+parseInt(div.css("paddingRight"));
		var paddings_tb = parseInt(div.css("paddingTop"))+parseInt(div.css("paddingBottom"));
		
		shield.css("width", (paddings_lr+div.width())+"px");
		shield.css("height", (paddings_tb+div.height())+"px");
		shield.css("opacity","0.3");
		shield.css("display","block");
		
	} else {
		
		var shield = div.find(".usertab_shield");
		shield.remove();
		if(IE6) {
			var filter = div.find("select.usertab_filter");
			if(filter.length > 0) {
				filter.css("visibility","visible");
			}
		}
		if(div.storedcssposition) {
			div.css("position", div.storedcssposition);
		} else {
			div.css("position","static");
		}
	}
}

function deleteListedObject(obj, url) {
	
	var jqobj = $(obj);
  	var card = jqobj.parents(".listbox").eq(0);
  	var stackedhost = jqobj.parents("div.stackhost").eq(0);
  	var usertab_div = jqobj.parents("div.usertab").eq(0);
  	var tab = usertabs.getTab(usertab_div.attr("bs:id"));
  	
  	//var url = card.attr("bs:deleteurl");
  	
  	if(jqobj.hasClass("loading")) return;
  	
  	jqobj.addClass("loading");
	shieldUserTab(usertab_div, true);
	
	$.ajax({
    	url: url,
    	type: "POST",
    	data: tab.parameters,
    	success: function(response){
    		//alert(response);
    		card.fadeOut("normal", function() {
    			stackedhost.html(response);
    			shieldUserTab(usertab_div, false);
    			usertabs.manageMores(tab);
			});
        },
	    error: function() {
	    	alert("Si è generato un errore durante il salvataggio dei dati. Si prega di riprovare più tardi");
	    	jqobj.removeClass("loading");
	    	shieldUserTab(usertab_div, false);
	    }
  	});
}

function closeListedObject(obj, url) {
	
	var jqobj = $(obj);
  	var card = jqobj.parents(".listbox").eq(0);
  	
  	if(jqobj.hasClass("loading")) return;
  	
  	jqobj.addClass("loading");
	
	$.ajax({
		
    	url: url,
    	type: "POST",
    	//data: tab.parameters,
    	success: function(response){
    		card.slideUp("normal", function() {
				card.remove();
			});
		},
	    error: function() {
	    	alert("Si è generato un errore durante il salvataggio dei dati. Si prega di riprovare più tardi");
	    	jqobj.removeClass("loading");
	    }
  	});
}

function bookMark(el, url) {
	
	var jqel = $(el);
	var related_tab = jqel.attr("bs:tab");
	var tab = jqel.parents('div.usertab').eq(0)
	var current_tab = null;
	if(tab.length > 0) {
		current_tab = tab.attr("bs:id"); 
	}
	
	if(jqel.hasClass("loading")) return;
	
	jqel.addClass("loading");
	
	$.ajax({
		
		url: url,
		type: "POST",
		//data: parameters,
		success: function(response){
			if(response) {
				jqel.removeClass("loading");
				//alert(response);
				jqel.replaceWith(response);
				//tenterà  di fare l'update della tab attività. Giunti ad usertabs.update, se la tab non esiste perchè ad es. siamo in una pagina senza tabs, vi sarà un return.
				usertabs.update("attivita");
				if (current_tab && current_tab != related_tab || !current_tab) {
					usertabs.load(related_tab);
				}	
			} else {
				alert("Si è generato un errore durante il salvataggio dei dati. Si prega di riprovare più tardi");
			}
		}, //end of success
		error: function() {
			alert("Si è generato un errore durante il salvataggio dei dati. Si prega di riprovare più tardi");
		}
	}); //end of ajax call
}


function activateVoter(activator) {
	
	var voterparent = $(activator).parents("div.votebox");
	var voter = voterparent.find("img")
	var span = voterparent.find("span")
	
	span.css("display","none"); 
	voter.addClass("votable");
	voter.css("backgroundPosition","-80px").css("display","none");
	voter.fadeIn(2000);
	
	initVoters();
}

function initVoters() {
	
	var votables = $(".votable");
	votables.mousemove(function(e) {
		var votable = $(this);
		var pos = (e.pageX - votable.offset().left);
		var scaledpos = (16*(5+Math.ceil(pos / 16)))-160;
		votable.css("backgroundPosition", scaledpos+"px");
	});
	
	votables.click(function(e) {
		var votable = $(this);
		var votableparent = votable.parent(".votebox");
		votable.unbind();
		votable.removeClass("votable");
		var scaledpos = votable.css("backgroundPosition");
		if(scaledpos == null) scaledpos = votable.css("background-position-x"); //fix for IE.
		var scaledwidth = votable.css("width");
		scaledwidth = 1 * scaledwidth.substr(0, scaledwidth.indexOf("px"));
		var votation = (scaledwidth + (1 * scaledpos.substr(0, scaledpos.indexOf("px")))) / (scaledwidth / (1 * votable.attr("bs:scala")));
		votable.fadeOut();
		var url = votable.attr("bs:url");
		
		var parameters = {
			"to[class]" 				: votable.attr("bs:class"),
			"to[id]" 					: votable.attr("bs:id"),
			"action[data][scala]" 		: votable.attr("bs:scala"),
			"action[data][voto]" 		: votation
		}
		
		$.ajax({
			url: url,
			type: "POST",
			data: parameters,
			success: function(response){
			  
			  votableparent.html(response);
			  votableparent.css("display","none");
			  votableparent.fadeIn(3000);
			  
			},
			error: function() {
			  votableparent.html("Si è verificato un errore nella registrazione del voto.")
			}
		});
	});
	
	votables.mouseout(function() {
		var votable = $(this);
		votable.css("backgroundPosition","-80px");
	});
}


function initTooltips() {
	
	var tooltips = $(".tooltip");
	if(tooltips.length == 0) return;

	var tooltippeds = $(".tooltipped");
	
//	var tooltiparrow = tooltip.find("b.tooltiparrow");
//	var tooltipcontent = tooltip.find("div.tooltipcontent");
//	if(tooltip.length == 0) return;
	
	tooltips.mouseover(function() {
		$(this).css("display","block");
	});
	
	tooltips.mouseout(function() {
		$(this).css("display","none");
	});
	
	tooltippeds.mouseout(function() {
		tooltips.css("display","none");
	});
	
	tooltippeds.mouseover(function() {

		var element = $(this);
		var element_id = element.attr("bs:id");

		var element_offset = element.offset();
		var elementparent = $(this).parent("div");
		var elementparent_offset = elementparent.offset();
		
		var tooltip = $('#' + element_id);
		var tooltiparrow = tooltip.find("b.tooltiparrow");
		tooltip.css("left", 10 + elementparent_offset.left + "px");
		tooltip.css("top",  element_offset.top + element.height() + "px");
		tooltiparrow.css("marginLeft", (element_offset.left + (0.3*element.width()) - elementparent_offset.left) + "px");
		tooltip.css("display","block");
		
	}); //gestione evento onmouseover
} //initTooltips

var usertabs = {
	tabs : [],
	
	getTab : function(idx) {
		if(idx == null) {
	    	idx = 0;
	  	}
	  
		if(typeof(idx) == "number") {
			var counter = 0;
			for(var prop in this.tabs) {
		  		if(counter == idx) {
					return this.tabs[prop];
				}
				counter++;
			}
		} else if(typeof(idx) == "string") {
				return this.tabs[idx];
		}
	},
	
	setTabParameters : function(idx, paramname, paramvalue) {
		var tab = this.getTab(idx);
		if(!tab) return;
		 
		tab.parameters[paramname] = paramvalue;
	},
		
	checkPresence : function() {
		var tabscontainer = $("ul.usertabs");
		return (tabscontainer.length > 0);
	},
	
	setActualTab : function(tab) {
		$("ul.usertabs li a.active").removeClass("active");
		tab.addClass("active");
		//alert("tab.host: " + tab.host.html());
		tab.host.fadeIn();
	},
	
	clearinputfilter : function(idx) {
		this.filter(idx, null, true);	
	},
	
	filter : function(idx, preventload, clearinputfilter) {
		var tab = this.getTab(idx);
		if(!tab) return;
		
		var filter = tab.host.find(".usertab_filter");
		
		if(filter.length > 0) {
			this.setTabParameters(idx, filter.attr("name"), filter.val());
		
			//azzera il valore del filtro solo se trattasi di un input e solo se è stato passato clearinputfilter pari a true.
			if(clearinputfilter && filter.get(0).tagName.toLowerCase() == "input") {
				watermarkInputs(filter);
				this.setTabParameters(idx, filter.attr("name"), "");
			}
		}
		
		this.setTabParameters(idx, "page", "");
		if(preventload != true) {
			this.load(idx);
		}
	},
	
	//update si occupa di porre in cima alla tab "attività" le nuove entries, viene chiamato ricorsivamente ogni tot secondi
	//oppure nella tab "attività" mostra più entries (le precedenti) appendendole in fondo allo stack, in questo caso è chiamato da appendprevs che gli passa il parametro showprevs a true
	update : function(idx, showprevs) {
		
		var tab = this.getTab(idx);
		if(!tab) return;
		
		//mette la tab in stato di loading con apposita icona ajax-loader
		var tab_ico = tab.find("b");
		var tab_ico_bckpos = tab_ico.css("background-position");
		if(typeof(tab_ico_bckpos) === "undefined") tab_ico_bckpos = tab_ico.css("background-position-x") + " " + tab_ico.css("background-position-y");
		tab_ico.addClass("loading");		
		tab_ico.css("backgroundPosition","left top");
  		
		var current_entries = tab.stackhost.find("div.stackedentry");
		
		var updateparameters = {};
		//i parametri da passare sono costituiti da:
		//A) tutti i filtri della tab...
		for (var prop in tab.parameters) {
			updateparameters[prop] = tab.parameters[prop];
		}
		
		//B) ..la data dell'ultima entry attualmente disponibile in basso  + "update=prev" (se è un append), oppure la data della prima entry in alto +"update=next" (se è un prepend)...
		if (showprevs == true && current_entries.length > 0) {
			//è un append di entries precedenti in fondo allo stack di quelle già  visualizzate. Viene passata la data dell'ultima id in basso.
			updateparameters["date"] 	= current_entries.eq( current_entries.length-1 ).attr("bs:date");
			updateparameters["update"] 	= "prev";  
		} else if (!showprevs && current_entries.length > 0) {
			//è un prepend in cima alla tab "attività" delle nuove entries
			updateparameters["date"] = current_entries.eq(0).attr("bs:date");
			updateparameters["update"] 	= "next";
		}
		
		var dummydate = new Date();
		updateparameters["dummypar"] = dummydate.getTime(); 
		
		$.ajax({
			url: tab.attr("bs:url"),
			type: "POST",
			data: updateparameters,
			success: function(response){
				if(showprevs == null) {
				
					//è un update in cima
					tab.stackhost.prepend("<div class=\"tempwrapper\">"+response+"</div>");
					var tempwrapper_div = tab.stackhost.find("div.tempwrapper");
					
					tempwrapper_div.slideDown("slow", function() {
						usertabs.manageMores(tab, true);
						tempwrapper_div.unwrap();
					});
					
										
					
				} else {
					
					//è un append in fondo
					tab.stackhost.append("<div class=\"tempwrapper\">"+response+"</div>");
					var tempwrapper_div = tab.stackhost.find("div.tempwrapper");
					
					tempwrapper_div.fadeIn("normal", function() {
						usertabs.manageMores(tab, true);
						tempwrapper_div.unwrap();
					});
					
						
				};
				if(tab.id == "attivita") {
					if(!IE6) {
						tab.stackhost.find("abbr.timeago").timeago();
					}
				}
			},
			error: function() {
				//alert("E' accaduto un errore durante il caricamento. Si prega di riprovare più tardi.");
			},
			complete: function(){
				tab_ico.removeClass("loading");
				tab_ico.css("backgroundPosition",tab_ico_bckpos);
				if(showprevs != null) {
					tab.host.find("a.showprevs").removeClass("loading");
				} 
				//tab.stackhost.find("div.tempwrapper").fadeIn();
			}
		});
	},
	
	//pone l'icona "visualizza le attività precedenti" in stato di loading e chiama update passandogli showprevs a true.
	appendprevs : function(idx) {
		var tab = this.getTab(idx);
		if(!tab) return;
		
		//mette l'icona del "vedi le attività precedenti" in stato di loading
		var showprevs_ico = tab.host.find("a.showprevs");
		showprevs_ico.addClass("loading");
		this.update(idx, true);
	},	
	
	show : function(idx, page) {
		
		//alert("idx: " + idx);
		var tab = this.getTab(idx);
		if(!tab) return;
		
		var allhosts = $("div.usertab");
		allhosts.css("display","none");
		
		var current_entries = tab.stackhost.find("div.stackedentry");
		
		if(current_entries.length == 0) {
			//se la tab che si vuole visualizzare non ha entries, occorrerà caricarle, se ne occupa load.
			this.load(idx, page, true);
		} else {
			this.setActualTab(tab);
		}
	},
	
	page : function(idx, page) {
		this.load(idx, page, true);
		return false;
	},
	
	manageMores : function(tab, new_entries_only) {
		if(new_entries_only == true) {
			var showmore = tab.stackhost.find("div.tempwrapper .showmore");
		} else {
			var showmore = tab.stackhost.find(".showmore");
		}
			
		for(var i = 0; i < showmore.length; i++) {
	    	var str = showmore.eq(i).html();
	    	showmore.eq(i).html( toExpandableAbstract(str, 200, "commento") );
		}
	},
	
	load : function ( idx, page, showtabafterload ) {
		var tab = this.getTab(idx);
		if(!tab) return;
		
		//mette la tab in stato di loading con apposita icona ajax-loader
		var tab_ico = tab.find("b");
		var tab_ico_bckpos = tab_ico.css("background-position");
		if(typeof(tab_ico_bckpos) === "undefined") tab_ico_bckpos = tab_ico.css("background-position-x") + " " + tab_ico.css("background-position-y");
		
		tab_ico.addClass("loading");		
		tab_ico.css("backgroundPosition","left top");
  		
  		if(page != null) {
	   		this.setTabParameters( idx , "page", page );
	  	}
	  	
		$.ajax({
			url: tab.attr("bs:url"),
			type: "POST",
			data: tab.parameters,
			success: function(response){
				tab.stackhost.html(response);
				usertabs.manageMores(tab);
			},
			error: function() {
				console.log = "E' accaduto un errore durante il caricamento. Si prega di riprovare più tardi.";
				return false;
				
			},
			complete: function(){
				//se non è un reload in background, mette la tab in stato di actual, rimuove lo stato di loading e ripristina l'icona giusta per quella tab.
				tab_ico.removeClass("loading");
				tab_ico.css("backgroundPosition",tab_ico_bckpos);
				
				
				var stackedentries = tab.stackhost.find("div.stackedentry");
				
				
				if(showtabafterload == true && stackedentries.length > 0) {
					usertabs.show(idx, page);
				} else if(showtabafterload == true)  {
					usertabs.setActualTab(tab);
					tab.host.fadeIn();
				}
				
				//se è stata caricata la tab attività, occorre lanciare il setInterval per l'update in tempo reale delle attività 
				if(tab.id == "attivita") {
					if (!IE6) {
						tab.stackhost.find("abbr.timeago").timeago();
					}
					clearInterval(tab.refresher);
					tab.refresher = setInterval(	function() {usertabs.update(idx);}, 120000 );
				}
			}
		});
	},
	
	init : function() {
		
		var tablinks = $("ul.usertabs li a");
		var hosts = $("div.usertab");
		for(var i = 0; i < tablinks.length; i++) {
			var idx = tablinks.eq(i).attr("bs:id").toString();
			this.tabs[ idx ] = tablinks.eq(i);
			this.tabs[ idx ].parameters = {}; //"ids[]":['ciao','pippo']};
			this.tabs[ idx ].id = idx;
			for(var j = 0; j < hosts.length; j++) {
				if(hosts.eq(j).attr("bs:id") == idx) { 
					//alert("hosts.eq(j): " + hosts.eq(j).html());
					 this.tabs[ idx ].host = hosts.eq(j);
					 break;
				}
			} 
			//this.tabs[ idx ].host = $("div.usertab."+idx);
			//alert(this.tabs[ idx ].host.html());
			this.tabs[ idx ].stackhost = this.tabs[ idx ].host.find(".stackhost");
			//alert(this.tabs[ idx ].host.find(".stackhost"));
		}
		this.show('attivita');
	}
}

function watermarkInputs(singleinput) {
	//di norma questa funzione prende tutti gli input che hanno un attr 'bs:watermark' e assegna loro come valore il valore di bs:watermark
	//se però viene passato un singleinput (singolo input - oggetto jquery), l'attribuzione del valore verrà fatta solo per quel singolo input.
	//il caso del singleinput si verifica ad esempio nella tab amici, quando devi resettare il filtro (vedi il metodo filter dell'oggetto usertabs quando viene passato 'clearinputfilter')
	var inputs = (singleinput ? singleinput : $("input"));
	
	for(var i = 0; i < inputs.length; i++) {
		var curr_input = inputs.eq(i);
		
		if((curr_input.attr("type") == "text" || curr_input.attr("type") == "password") && curr_input.attr("bs:watermark")) {
		  curr_input.val(curr_input.attr("bs:watermark"));
		  
		  curr_input
		  .focus(function() {
		    var obj = $(this);
		    if(obj.val() == obj.attr("bs:watermark")) {
		      obj.val("");
		    } 
		  })
		  .blur(function() {
		    var obj = $(this);
		    if(obj.val() == "") {
		      obj.val(obj.attr("bs:watermark"));
		    }
		  })
		}
	} 
}

function showMessage(htmlfragment, userbox) {
	/*var pathdiv = $("div.path");
	if(pathdiv.length == 0) {
		pathdiv = $("div.container_12 div.grid_6:first-child").eq(0);
		if(pathdiv.length == 0) {
			return;
		} 
	}*/
	
	var pathdiv = $(".header").eq(0);
	
	if(htmlfragment.trim() != "") {
		if(userbox) {
			var userbox = $("div.user-container").eq(0);
			userbox.html(htmlfragment);
		} else {
			pathdiv.before(htmlfragment);
			pathdiv.prev()
			.prepend("<a class=\"btn_close\" onclick=\"$(this).parent().fadeOut('slow');\">Chiudi X</a>")
			.css("display","none")
			.fadeIn();
			
		}
	}	 
}

function msgCheck( userbox ) {
	if(userbox) {
		//carico i messaggi per refreshare la userbox
		$.ajax({
			url: messages_userbox_url,
			type: "POST",
			success: function(response){
				showMessage(response, true)
			},
			error: function() {},
			complete: function(){}
		}); //end ajax call per messaggi nella userbox
	}
	
	//carico i messaggi da appendere dopo il pathdiv
	$.ajax({
		url: messages_url,
		type: "POST",
		success: function(response){
			showMessage(response);
		},
		error: function() {},
		complete: function(){}
	}); //end ajax call per messaggi da impilare dopo il pathdiv
}


function dateWidget(field) {
	this.ymd = new Array();
	this.date = field.val();
	this.id = field.attr("id");
	
	this.select_dd = null;
	this.select_mm = null;
	this.select_yy = null;
	
	this.checkDate = function() {
		
		var testdate = new Date( 1*this.ymd[0], (1*this.ymd[1] - 1) , 1*this.ymd[2] );
		if (this.ymd[0] && this.ymd[1] && this.ymd[2]) {
			if(testdate.getDate() != 1*this.ymd[2]) {
				$(this.select_dd).css("display","none").css("background","#f00").fadeIn(2000, function() {this.style.backgroundColor = "#fff"});
				$(this.select_mm).css("display","none").css("background","#f00").fadeIn(2000, function() {this.style.backgroundColor = "#fff"});
				$(this.select_yy).css("display","none").css("background","#f00").fadeIn(2000, function() {this.style.backgroundColor = "#fff"});
				
				this.ymd[2] = testdate.getDate();
				
				this.ymd[1] = testdate.getMonth()+1;
				
				this.ymd[0] = testdate.getFullYear();
			}
			
			field.val(this.ymd[0]+"-"+(1*this.ymd[1] < 10 ? "0"+1*this.ymd[1] : 1*this.ymd[1])+"-"+(1*this.ymd[2]< 10 ? "0"+1*this.ymd[2] : 1*this.ymd[2])) 
		} else if ( (!this.ymd[0] || this.ymd[0] == "") && (!this.ymd[1] || this.ymd[1] == "") && (!this.ymd[2] || this.ymd[2] == "")) {
			field.val("");
		} else {
			field.val("-");
		}
		
		this.setSelects();	
		 
	}; //end checkDate function
	
	this.setSelects = function() {
		if(this.ymd.length == 0) return;
		if(this.ymd[0]) {
			for(var i = 0; i < this.select_yy.options.length; i++) {
				if(this.select_yy.options[i].value == this.ymd[0]) {
					this.select_yy.options[i].selected = true;
					break;
				}
			}
		}
		if(this.ymd[1]) {
			this.select_mm.options[ 1*this.ymd[1] ].selected = true;
		}
		if(this.ymd[2]) {
			this.select_dd.options[ 1*this.ymd[2] ].selected = true;
		}
	}; //end this.setSelects function
	
	this.init = function() {
		if(this.date != "") {
			this.ymd = this.date.split("-");
		}
		//INIZIO PROCEDURA CREAZIONE DOM SELECTS
			//anno - inietta la select
			this.select_yy = document.createElement("select");	//select_dd.setAttribute("name","...");
			this.select_yy.setAttribute("id",this.id+"_yy");
			var ycounter = 0; 
			var ynow = new Date().getFullYear();
			for(var yy = ynow+1; yy >= 1900; yy--) {
				var yyval = yy;
				var yytext = yyval;
				if (ycounter == 0) {
					yyval = "";
					yytext = "anno";
				}  
				this.select_yy.options[ycounter] = new Option( yytext , yyval );
				ycounter++;
			}
			field.parent().prepend(this.select_yy);
			
			//mese - inietta la select
			this.select_mm = document.createElement("select");	//select_dd.setAttribute("name","...");
			this.select_mm.setAttribute("id",this.id+"_mm");
			for(var mm = 0; mm <= 12; mm++) {
				var mmval = mm
				var mmtext = mmval;
				if (mm == 0) {
					mmval = "";
					mmtext = "mm";
				} else if (mm < 10) {
					mmval = "0"+mm;
					mmtext = "0"+mm;
				} 
				this.select_mm.options[mm] = new Option( mmtext , mmval );
			}
			field.parent().prepend(this.select_mm);
			
			//giorno - inietta la select
			this.select_dd = document.createElement("select");	//select_dd.setAttribute("name","...");
			this.select_dd.setAttribute("id",this.id+"_dd");
			for(var dd = 0; dd <= 31; dd++) {
				var ddval = dd
				var ddtext = ddval;
				if (dd == 0) {
					ddval = "";
					ddtext = "gg";
				} else if (dd < 10) {
					ddval = "0"+dd;
					ddtext = "0"+dd;
				} 
				this.select_dd.options[dd] = new Option( ddtext , ddval );
			}
			field.parent().prepend(this.select_dd);
			
			this.setSelects();
			this.manageEvents();	
    	//FINE PROCEDURA CREAZIONE DOM SELECTS
	}; //end this.init function
	
	this.manageEvents = function() {
		if(!this.select_dd || !this.select_mm || !this.select_yy) {
			return;
		}
		
		var datewidget = this;
		
		this.select_dd.onchange = function() {
			datewidget.ymd[2] = this.options[ this.selectedIndex ].value;
			datewidget.checkDate(); 
		};
		this.select_mm.onchange = function() {
			datewidget.ymd[1] = this.options[ this.selectedIndex ].value;
			datewidget.checkDate();
		};
		this.select_yy.onchange = function() {
			datewidget.ymd[0] = this.options[ this.selectedIndex ].value;
			datewidget.checkDate();
		};
	
	} //end this.manageEvents function
	
}

function initDateWidgets() {
	var dateinputs = $("input.datewidget");
	if(dateinputs.length == 0) {
		return;
	}
	for(var i = 0; i < dateinputs.length; i++) {
		new dateWidget(dateinputs.eq(i)).init();
	}
}

function cropWidget( imgurl, cropping_box, preview_box, form ) {

	//this widget works with jquery.
	//prevede una imgurl, un div che funge da cropping_box, uno che funge da preview_box
	//prevede un save_btn all'interno del quale vengono inseriti i parametri delle coords. 
	//Il save_btn DEVE avere l'attributo bs:coords={}, dopodichè il cropWidget provvederÃ  ad aggiornare questi valori, che poi sono quelli che vengono spediti quando si salva; ovvero x,y,w,h,resizew,resizeh 
	
	this.measures = { left : 0, top : 0, width : 0, height : 0, resize_width: 0, resize_height : 0 };
	
	this.showPreview = function(coords, widget) {
		var forminputs = form.find("input");
		
		if (parseInt(coords.w) > 0) {
			var rx = this.measures.resize_width / coords.w;
			var ry = this.measures.resize_height / coords.h;
			
			preview_box.find("img#preview").css({
				width: 	Math.round(rx * this.measures.width)+"px",
				height: Math.round(ry * this.measures.height)+"px",
				marginLeft: "-" + Math.round(rx * coords.x)+"px",
				marginTop: "-" + Math.round(ry * coords.y)+"px"
			});
			
			var params = {
				left : coords.x,
				top : coords.y,
				width : coords.w,
				height : coords.h,
				image_width : this.measures.resize_width,
				image_height: this.measures.resize_height
			}
		
			for(var i = 0; i < forminputs.length; i++) {
				var singleinput = forminputs.eq(i);
				for( prop in params ) {
					if(singleinput.attr("name") == "cropdata["+prop+"]") {
						singleinput.val(params[prop]);
						break;
					}
				}
			}	
		}
	};
	
	this.loadImage = function(imgurl, widget) {
		var img = new Image()
		var jqimg = $(img);
		jqimg.attr("src",imgurl);
		jqimg.load(
			function() {
				
				cropping_box.append(this);
				widget.measures.width = $(this).width();
				widget.measures.height = $(this).height();
				widget.measures.resize_width = preview_box.width();
				widget.measures.resize_height = preview_box.height();
				//alert(preview_box.height());
				
				var imgprev = $(document.createElement("img")).attr("id","preview").attr("src",imgurl);
				
				preview_box.append(imgprev);
				
				$(this).Jcrop(
					{
						onChange: function(coords) {widget.showPreview(coords, widget)},
						onSelect: function(coords) {widget.showPreview(coords, widget)},
						//onSelect: updateCoords,
						aspectRatio : 1,
						setSelect: [ 0, 0, widget.measures.width, widget.measures.height ]	
					}
				);
				
				
								
			}
		);
	
	}
	
	this.loadImage(imgurl, this);
	
}

function openCropDialog(imgurl, uploadwidget) {
	
	//nasconde tutti i pulsanti di swfupload (se no bucano la fakebox)
	//$(".swfupload").css("visibility","hidden"); 
		
	//trova nella pagina il div da cui copiare i dati da iniettare nella fakebox
	var cropping_win_body =	$("#cropping_win_body");
	
	//apre la fakebox e setta la funzione di callback (quando si chiude la fakebox l'uploadwidget deve tornare com'era prima)
	var sample_html = cropping_win_body.html();
	
	fakebox.message(sample_html,720,450, "cropping_window", function() {
		//$(".swfupload").css("visibility","");
		uploadwidget.setResettedLook();
	});
	
	var fbcontent 		= 	$(fakebox.getContent("cropping_window"));
	var fbcropping_box 	= 	fbcontent.find("div#cropping_box").eq(0);
	var fbpreview_box 	= 	fbcontent.find("div#preview_box").eq(0);
	var fbform 			= 	fbcontent.find("form").eq(0);
	
	//nella fakebox è stato iniettato anche un form. Mettiamolo nello stack dei form da validare!
	validateForms( fbform.get(0) );
	
	//crea il pannello per il cropping
	new cropWidget(imgurl, fbcropping_box, fbpreview_box, fbform );
}

function openDeleteProfileDialog() {
	var deleteprofile_win_body =	$("#deleteprofile_win_body");
	//apre la fakebox e setta la funzione di callback (quando si chiude la fakebox l'uploadwidget deve tornare com'era prima)
	fakebox.message(deleteprofile_win_body.html(),720,250, "deleting_window");
	
	var fbcontent = $(fakebox.getContent("deleting_window"));
	var fbform = fbcontent.find("form").eq(0);
	
	//nella fakebox è stato iniettato anche un form. Mettiamolo nello stack dei form da validare!
	validateForms( fbform.get(0) );
}

function uploaderWidget(uploaddiv_id, uploadurl, sizelimit, filetypes, params, callback) {
	//uploaddiv_id: il widget si aspetta di avere un div con div pari a uploaddiv_id con affiancato uno span che fungerà da pulsante "Upload"  
	
	this.progressbar = document.getElementById(uploaddiv_id);
	
	this.message = function(msg) {
		this.setOkLook();
		this.progressbar.innerHTML = msg;
	};
	
	this.setOkLook = function() {
		this.progressbar.style.backgroundColor = "transparent";
		this.progressbar.style.color = "#000";
	};
	
	this.setResettedLook = function() {
		this.progressbar.style.backgroundColor = "transparent";
		this.progressbar.style.backgroundPosition = "-1000px top";
		this.progressbar.style.color = "#000";
		this.progressbar.innerHTML = "";
	};
	
	this.setKoLook = function() {
		this.progressbar.style.backgroundPosition = "-1000px top";
		this.progressbar.style.backgroundColor = "#f00";
		this.progressbar.style.color = "#fff";
	};
	
	this.errormessage = function(msg) {
		this.setKoLook();
		this.progressbar.innerHTML = msg;
	};
	
	this.onProgress = function(file, bytesloaded, bytestotal) {
		this.setOkLook();
		var percent = Math.floor(100*(bytesloaded/bytestotal))
		this.progressbar.innerHTML = percent+"% di "+file.name.substr(0,15)+"...";
		this.progressbar.style.backgroundPosition = (- 1000 + (percent/100*this.progressbar.offsetWidth))+"px top";
	};
	
	this.swfu = new SWFUpload({
		widget : this,
		flash_url : "/js/swfupload.swf",
		upload_url: uploadurl,
		post_params: params,
		file_size_limit : (sizelimit ? sizelimit+" KB" : ""),
		file_types : (filetypes ? filetypes : "*.*"),
		file_upload_limit : 100,
		file_queue_limit : 0,
		custom_settings : {
			progressTarget : uploaddiv_id
		},
		debug: false,

		// Button settings
		button_image_url: "/images/btn_browse.gif",
		button_width: "80",
		button_height: "20",
		button_placeholder_id: "btn_imageupload",
		button_text: '<span class="btn_swfu_upload">Upload...</span>',
		button_text_style: ".btn_swfu_upload { font-size:12px; text-align:center; }",

		file_queued_handler : function() {
			this.settings.widget.message("Il file &egrave; pronto per l'upload...");
		},
		file_queue_error_handler : function(file, errorCode, message) {
			switch (errorCode) {
				case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
					this.settings.widget.errormessage("Il file &egrave; troppo grande.");
				break;
				
				case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
					this.settings.widget.errormessage("Non posso uploadare file di 0 bytes.");
				break;
				
				case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
					this.settings.widget.errormessage("Tipo di file non valido.");
				break;
				
				default:
					this.settings.widget.errormessage("Errore durante l'upload<br />riprovare pi&ugrave; tardi...");
				break;
			}
		},
		file_dialog_complete_handler : function() {
			this.startUpload(); 
		},
		upload_start_handler : function() {},
		upload_progress_handler : function(file, bytesloaded, bytesTotal) {
			this.settings.widget.onProgress(file, bytesloaded, bytesTotal);
		},
		upload_error_handler : function() {
			this.settings.widget.errormessage("Errore durante l'upload<br />riprovare pi&ugrave; tardi...");
		},
		upload_success_handler : function(file, serverdata, response) {
			this.settings.widget.message("Completato "+file.name.substr(0,12)+"...");
			callback(serverdata, this.settings.widget);
		}
		//upload_complete_handler : uploadComplete, //queue_complete_handler : queueComplete
	});

} //updloaderWidget	


function initHomeRecentActivities() {
	var recents_container = $("#home_recent_activities").eq(0);
	if (recents_container.length == 0) return;
	
	var recents_container_dom = recents_container.get(0);
	var url = recents_container.attr("bs:url");
		
	$.ajax({
	  	url: url,
	  	type: "POST",
	  	success: function(response){
	  		recents_container.html(response);
	  		recents_container.css("display","none");
	  		recents_container.fadeIn();
	  	},
		error: function() {
			
	  	},
		complete: function(){
			clearInterval(recents_container_dom.refresher);
			recents_container_dom.refresher = setInterval(	initHomeRecentActivities , 120000 );
		}
	});
}


function mp3Player(elId, mp3File) {

	swfobject.embedSWF("/js/player_mp3_maxi.swf", elId, "60", "20", "8.0.0", false, { 
		'mp3' : mp3File,
		'showslider' : 0,
		'showvolume' : 1,
		'volume' : 200,
		'width' : 60,
		'textcolor' : '666666',
		'buttoncolor' : '282828',
		'buttonovercolor' : 'c32e27',
		'bgcolor1' : 'fbfbfb',
		'bgcolor2' : 'c4c4c4',
		'sliderovercolor' : '333333'
	}, { 
		'bgcolor' : '#ffffff'
	});

}

/******** Fine funzioni per il profilo *********/


/********** GESTONE WIDGET MULTIMEDIA **********/
function setPager(buttonLeft, buttonRight, divToPage, fieldToRefresh){
	
	var divToPage_length = divToPage.children().length;
	//alert("Numero elementi: " + divToPage_length);
	
	var pagingString = "1/" + divToPage_length;
	//alert(pagingString);
	
	fieldToRefresh.text(pagingString);
	
	var page = 1;
	
	buttonLeft.click(function(){
		if($(this).hasClass("disabled") == false) {
			page--;
			fieldToRefresh.text(page+"/"+divToPage_length);
		}
		return false;
	});
	
	buttonRight.click(function(){
		if($(this).hasClass("disabled") == false) {
			page++;
			fieldToRefresh.text(page+"/"+divToPage_length);
		}
		return false;
	});
}

function setMultimediaMenu(){

	var videoItemsDiv = $("#video-items");
	var imgItemsDiv = $("#img-items");
	var audioItemsDiv = $("#audio-items");
	var docsItemsDiv = $("#docs-items");
	
	var btn_video = $("#btn-tab-video");
	var btn_img = $("#btn-tab-img");
	var btn_audio = $("#btn-tab-audio");
	var btn_docs = $("#btn-tab-docs");
	
	var videoItems = videoItemsDiv.children();
	var imgItems = imgItemsDiv.children();
	var audioItems = audioItemsDiv.children();
	var docsItems = docsItemsDiv.children();
	
	var videoPages = videoItems.length;
	var imgPages = imgItems.length;
	var audioPages = audioItems.length;
	var docsPages = docsItems.length;
	
	var videoItemsNumber = videoPages;
	var imgItemsNumber = imgItems.children().length;
	var audioItemsNumber = audioItems.children().length;
	var docsItemsNumber = docsItems.children().length;
	
	btn_video.text("Video ("+videoItemsNumber+")");
	btn_img.text("Immagini ("+imgItemsNumber+")");
	btn_audio.text("Audio ("+audioItemsNumber+")");
	btn_docs.text("Docs ("+docsItemsNumber+")");
}

function setMultimedia(){
	
	setMultimediaMenu();
	
	var video = $("#video");
	var immagini = $("#immagini");
	var audio = $("#audio");
	var docs = $("#docs");
	
	if(video.length != 0){
		setPager($("#video-left-btn"),$("#video-right-btn"),$("#video-items"),$("#video-pag"));
	}
	
	if(immagini.length != 0) {
		setPager($("#img-left-btn"),$("#img-right-btn"),$("#img-items"),$("#img-pag"));
	}
	
	if(audio.length != 0) {
		setPager($("#audio-left-btn"),$("#audio-right-btn"),$("#audio-items"),$("#audio-pag"));
	}
	
	if(docs.length != 0) {
		setPager($("#docs-left-btn"),$("#docs-right-btn"),$("#docs-items"),$("#docs-pag"));
	}
	
	immagini.hide();
	audio.hide();
	docs.hide();
}


function initLinksAcquisto() {
	
	var bottone = $('#links-acquisto-bottone');
	var lista = $('#links-acquisto-lista');
	
	if(bottone.length != 1)
		return;
	
	if(lista.length != 1)
		return;
	
	var list_h = lista.height() + lista.css('padding-top').replace('px', '')*1 + lista.css('padding-bottom').replace('px', '')*1 +2;
	var h = (190 - list_h);
	if(h < -30) h = -30;

	lista.css('top', h + 'px');
	
	if(bottone.length != 0 && lista.length != 0) {
	
			bottone.click(function() {
			
				if($('#links-acquisto-lista').css('display') == 'block')
					$('#links-acquisto-lista').fadeOut();	
				else
					$('#links-acquisto-lista').fadeIn();
			
				return false;
			
			});
			
			$('#links-acquisto-lista').click(function() {
			
				$('#links-acquisto-lista').fadeOut();
			
			});
	
	}//if

}//f


/**************************************************/


$(document).ready(function(){
	
	setMenus();
	setMultimedia();
	
	var item_descr = $("#item-descr").html();
	
	if(item_descr){
		
		var truncated_descr = toExpandableAbstract(item_descr, 500, "item-descr");
		$("#item-descr").html(truncated_descr);
	}
	
	var corporate_descr = $("#corporate-descr").html();
	
	if(corporate_descr){
		
		var truncated_corp_descr = toExpandableAbstract(corporate_descr, 1060, "corporate-descr");
		$("#corporate-descr").html(truncated_corp_descr);	
		
		var corporate_buttons_margin = ($("#corporate-descr").height() + 40) + "px";
		$("#corporate-buttons").css({"top":corporate_buttons_margin});
		
		$("#corporate-buttons > a").click(function(){
			corporate_buttons_margin = ($("#corporate-descr").height() + 35) + "px";
			$("#corporate-buttons").css({"top":corporate_buttons_margin});
		});
	}
	
	var columns_container = $(".content");
	if(columns_container.length != 0) {
		setColumnsBg(columns_container);
	}
		
	closePopunder();
	
	setScrollGalleries();
	
	//Old
	makeExpandables();
	initVoters();
	initTooltips();
	initValidator();
	initHomeRecentActivities();
	watermarkInputs();
	validateForms();
	//youThumbs(); ?
	initDateWidgets();
	initLinksAcquisto();
	
	var archive = $(".archive");
	if(archive.length != 0){
		setDescriptions();	
		slideFix();
	}
	
	$(".popunder-btn").click(function(){
		openPopunder($(this));
	});
	
	$("#q").focus(function(){
		$(this).val("");
	});
	
	if (usertabs.checkPresence()) {
		usertabs.init();
	}
	
	$("div.box_info a.btn_close").click(function() {
	  $(this).parent().fadeOut("slow");
	  return false;
	});
	
	//crea un nuovo uploaderWidget, settando come callback dopo l'upload la funzione openCropDialog (che aprirà  un pannello per eseguire i cropping)
	if ($("div#avatar.uploader").length > 0) {
		uploader_action = $("div#avatar.uploader").eq(0).attr("bs:action");
		new uploaderWidget("avatar", uploader_action, 500, "*.jpg;*.jpeg;*.gif;*.png", null, openCropDialog );
	}
	
	msgCheck();
	
	loadComments();
	var comment_form = $("#comment-form");
	if(comment_form && ($(".my-piemme").length == 0)) {
		validateCommentForm(comment_form);
		$("#privacy-condizioni").find("input:checkbox:checked").attr("checked", false);
	}
	
	
	$('#search').keydown(function(e){
        if (e.keyCode == 13) {
            $(this).parents('form').submit();
            return false;
        }
    });
    
});
