// JavaScript Document

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

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 initValidator() {
  if($.validator == null) return;
  $.validator.setDefaults({
    submitHandler: function(theform) {
      theform.submit();
      
    }
  });
}

function validateForms() {
  $("#searchform").validate();
  $(".commentiform").validate();
  $("#form").validate();

  
  //frms.validate();
}

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

function showDetails(detail) {
  if(detail.indexOf("au_") == 0) {
    //se e' un autore, occorre prima nascondere la trama e le schede degli altri eventuali autori
    $(".autore[id!=detail]").fadeOut();
    $("#trama").fadeOut();
  } else {
      //se e' una trama autore, occorre prima nascondere tutte le schede degli autori
      $(".autore").fadeOut();
  }
  $("#"+detail).fadeIn();
}

function hideDetails(detail) {
  $("#"+detail).fadeOut();
}


///nuove aggiunte... ci provo - marco


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

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","-120px").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 = (24*(5+Math.ceil(pos / 24)))-240
		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 = {
			"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","-120px");
	});
}

function contentSlider_vetrina() {
	var slider_vetrina = $("#cslider_vetrina"); 
	if(slider_vetrina.length > 0) {
		slider_vetrina.jFlow({
			//slides: "#cslides_vetrina",
			//playstop: "#cplaystop_vetrina",
			width: "720px",
			height: "250px",
			duration: 400
		});
		
		$("#cslides_vetrina").fadeIn();
		$(".csilderbuttons").fadeIn();
	}
}

function contentSlider_evidenza() {
	var slider_evidenza = $("#cslider_evidenza"); 
	if(slider_evidenza.length > 0) {
		slider_evidenza.jFlow({
			//slides: "#cslides_evidenza",
			//playstop: "#cplaystop_evidenza",
			width: "720px",
			height: "250px",
			duration: 400
		});
		
		$("#cslides_evidenza").fadeIn();
		$(".csilderbuttons").fadeIn();
	}
}


$(document).ready(function(){
	
	contentSlider_vetrina();
	contentSlider_evidenza();
  	loadComments();
	initVoters();
	initValidator();
  	validateForms();
	

  
 /* $(".jflowbox").css("display","block");
	$("#cslider").jFlow({
		slides: "#cslides",
		playstop: "#cplaystop",
		width: "470px",
		height: "352px",
		duration: 400
	});     */

	if($('#mycarousel').length > 0)
		$('#mycarousel').jcarousel({scroll:3});
  

});
