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();
};

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)

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

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");
}

function toExpandableAbstract(str, at) {
	if(!str || !at) return;
	
	var trimstrippedstr = str.trim().linearize().stripHtml();
	
	var reducedstr = trimstrippedstr.smartTruncateAt(at);
	
	if(trimstrippedstr.substring(0,at).length == trimstrippedstr.length) {
		return str;
	}
	
	return "<span class=\"truncated_content\">"+reducedstr+" [...] <a href=\"#\" class=\"btn_abstractexpand\" onClick=\"abstractExpand(this);return false;\">Visualizza altro</a></span><span class=\"full_content\">"+str+"</span>";      
} //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 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 "registrationcard":
				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("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();
						
						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 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("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("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 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 = $("div.commenti").eq(0);
	if(comments_container.length == 0) return;
	
	var url = comments_container.attr("bs: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");
	comments_container.addClass("loading");
	
	$.ajax({
	  url: url,
	  type: "POST",
	  data: parameters,
	  success: function(response){
	    comments_container.html(response);
	    
	    var showmore = comments_container.find("div.commento");
	    
	    for(var i = 0; i < showmore.length; i++) {
	    	var str = showmore.eq(i).html();
	    	showmore.eq(i).html( toExpandableAbstract(str, 1000) );
		}
	    
	    comments_container.fadeIn("slow");
	  },
	  error: function() {
	    comments_container.html("<span style='color:#c00'>Si è verificato un errore durante il caricamento dei commenti.<br />Provare a ricaricare la pagina.</span>");
	  },
	  complete: function(){
	    comments_container.removeClass("loading");
	  }
	});
}

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

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){
    		card.fadeOut("normal", function() {
    			stackedhost.html(response);
    			shieldUserTab(usertab_div, false);
    			usertabs.manageMores(tab);
    			usertabs.load("attivita");
			});
        },
	    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");
				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("div.votebox");
		votable.unbind();
		votable.removeClass("votable");
		var scaledpos = votable.css("backgroundPosition");
		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 = {
			"oggetto[class]" 	: votable.attr("bs:class"),
			"oggetto[id]" 		: votable.attr("bs:id"),
			"voto[scala]" 		: votable.attr("bs:scala"),
			"voto[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 tooltippeds = $(".tooltipped");
	var tooltip = $(".tooltip").eq(0);
	
	var tooltiparrow = tooltip.find("b.tooltiparrow");
	var tooltipcontent = tooltip.find("div.tooltipcontent");
	if(tooltip.length == 0) return;
	
	tooltip.mouseover(function() {
		$(this).css("display","block");
	});
	tooltip.mouseout(function() {
		$(this).css("display","none");
	});
	
	tooltippeds.mouseout(function() {
		tooltip.css("display","none");
	});
	
	tooltippeds.mouseover(function() {
		var element = $(this);
		var element_class = element.attr("bs:class");
		var element_id = element.attr("bs:id");
		
		var element_offset = element.offset();
		var elementparent = $(this).parent("div");
		var elementparent_offset = elementparent.offset();
		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");
		
		if(tooltip.attr("bs:id") == "" || tooltip.attr("bs:id") != element_id) {
			tooltip.attr("bs:id",element_id);
		
			//verifica che nel tooltip_store non sia gia' stato storato questo contenuto (evita chiamate inutili per contenuti gia' richiesti)
			var existingcontent = null;
			var tooltip_store_key = element_class+"-"+element_id;
			for(var prop in tooltip_store) {
				if(tooltip_store_key == prop) {
					existingcontent = tooltip_store[prop];
					break;
				}
			}
			
			if(existingcontent != null) {
				//se nel tooltip_store e' gia' stato storato questo contenuto, aggiorna il tooltip con quest'ultimo...
				tooltipcontent.html(existingcontent);
			} else {
				//altrimenti occorrera' fare la richiesta ajax...
				$.ajax({
				  url: tooltip.attr("bs:url"),
				  type: "POST",
				  data: {"id":element_id, "class":element_class },
				  success: function(response){
				    tooltipcontent.html(response);
				    //...e la response deve essere anche pushata nel tooltip_store con chiave pari a 'class'-'id'
				    tooltip_store[tooltip_store_key] = response;
				  },
				  error: function() {
				    tooltipcontent.html("<span style='color:#c00'>Nessuna informazione disponibile.</span>");
				  },
				  complete: function(){
				      
				  }
				});  
			} //if-else
		
		} //if id del tooltip è vuota o se è diversa da quella attuale
		
	}); //gestione evento onmouseover
} //initTooltips

function contentSlider() {
	var slider = $("#cslider"); 
	if(slider.length > 0) {
		slider.jFlow({
			slides: "#cslides",
			playstop: "#cplaystop",
			width: "460px",
			height: "294px",
			duration: 400
		});
		
		$("#cslides").fadeIn();
		$(".csilderbuttons").fadeIn();
	}
}

function nextThumb(el) {
	var element = $(el);
	//fa scomparire il thumb che ha classe "actual"
	var actualthumb = element.find("div.actual");
	if (actualthumb.length == 0) {
		actualthumb = element.children("div.thumb").eq(0); 
	}
	actualthumb.removeClass("actual");
	actualthumb.css("display","none");
	//fa apparire il div immediatamente successivo (se non esiste ricomincia da 0)
	var nextthumb = actualthumb.next("div.thumb");
	if (nextthumb.length == 0) {
		nextthumb = element.find("div.thumb").eq(0);
	}
	nextthumb.css("display","block");
	nextthumb.addClass("actual");
}
function youThumbs() {
	var youthumbs = $("a.youthumb");
	if (youthumbs.length == 0) return;
	
	var thumbs = youthumbs.find("div.thumb:first");
	
	//se esistono dei "div.thumb" interni a un "a.youthumb"...
	if(thumbs.length != 0) { 
		//...trova il primo "div.thumb" interno a un "a.youthumb" e gli assegna la classe "actual" (= visibile)...
		thumbs.addClass("actual");
		//...e gestisce l'onmouseover/onmouseout su tutti gli "a.youthumb"
		youthumbs.hover(
		  function() {
		    //mouseOVER: all'onmouseover all'elemento viene legato un interval che chiama ricorsivamente "nextThumb"
		    var element = $(this).get(0);
		    var el = this;
		    clearInterval(element.itt);
		    element.itt = setInterval( function() {
		      nextThumb(el);
		    }, 1000 )
		  }, 
		  function () {
		    //mouseOUT: all'onmouseout viene killato l'interval specifico di quell'elemento (la funzione "nextThumb" non verrà più chiamata)
		    var element = $(this).get(0);
		    clearInterval(element.itt);
		  }
		)
	} //if
}

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.actual").removeClass("actual");
		tab.addClass("actual");
		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() {
						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) {
		
		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) );
		}
	},
	
	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) { 
					 this.tabs[ idx ].host = hosts.eq(j);
					 break;
				}
			} 
			//this.tabs[ idx ].host = $("div.usertab."+idx);
			this.tabs[ idx ].stackhost = 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;
		} 
	}
	
	if(htmlfragment.trim() != "") {
		if(userbox) {
			var userbox = $("div.topwelcome").eq(0);
			userbox.html(htmlfragment);
		} else {
			pathdiv.after(htmlfragment);
			pathdiv.next()
			.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();
				
				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.widget.errormessage("Errore durante l'upload<br />riprovare più 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'
	});

}


$(document).ready(function () {
		
	makeExpandables();
	loadComments();
	initVoters();
	initTooltips();
	initValidator();
	initHomeRecentActivities();
	watermarkInputs();
	validateForms();
	contentSlider();
	youThumbs();
	initDateWidgets();
	
	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();

});