var CONTRACTED = 0;
var EXPANDED = 1;

var timeout = new Array();
var heights = new Array();
var step = new Array();
var status = new Array();
var boxes = new Array();
var toggles = new Array();
var delay = 15;
var easeOffset = 120;

var minStep = 1;
var maxStep = 15;

function init(id) {
	var ext = document.getElementById(id);
	if (ext==undefined) {
		return;
	}
	
	var els = ext.getElementsByTagName("DIV");
	for (var i = 0; i < els.length; i++) {
		if ( els[i].className.indexOf("box-cont") != -1 ) {
			boxes[id] = els[i];
		} else if( els[i].className == "nascosto" ) {
			toggles[id] = els[i];
		}
	}
	
	if ( boxes[id].clientHeight > 350 ) {
		contract(id, false);
	}
	
}

function toggle(id) {
	if (status[id] == CONTRACTED) {
		expand(id, true);
	} else if (status[id] == EXPANDED) {
		contract(id, true);
	}
}

function expand(id, animate) {
	if ( animate == undefined ) {
		animate = true;
	}
	
	status[id] = EXPANDED;
	
	clearTimeout(timeout[id]);
	
	var box = boxes[id];

	var els = box.getElementsByTagName("P");
	for (var i = 1; i < els.length; i++) {
		els[i].style.display="block";
		
	}
	
	/*var els = ext.getElementsByTagName("DIV");
	for (var i = 0; i < els.length; i++) {
		if ( els[i].className.indexOf("box-cont") != -1 ) {
			box = els[i];
			break;
		}
	}*/
	
	if (animate) {
		step[id] = minStep;
		var funct = expandAnim(box, id);
		timeout[id] = setInterval( funct, delay );
	} else {
		box.style.height = "";
	
		toggles[id].className="chiudi";
	}

}

function expandAnim(box, id) {
	return( function() {
		if (box.clientHeight >= heights[id]-easeOffset && step[id] > minStep) {
			step[id] -= 1;
		}
		else if(step[id] < maxStep) {
			step[id] += 1;
		}
		box.style.height = "" + (parseInt(box.style.height) + step[id]) + "px";
		if ( box.clientHeight >= heights[id] ) {
			clearTimeout(timeout[id]);
	
			toggles[id].className="chiudi";
			
		}
		
	} );
}

function contract(id, animate) {
	if ( animate == undefined ) {
		animate = true;
	}
	
	/*var ext = document.getElementById(id);
	if (ext==undefined) {
		return;
	}*/
	
	status[id] = CONTRACTED;
	
	clearTimeout(timeout);
	
	
	
	var box = boxes[id];
	
	/*var els = ext.getElementsByTagName("DIV");
	for (var i = 0; i < els.length; i++) {
		if ( els[i].className.indexOf("box-cont") != -1 ) {
			box = els[i];
			break;
		}
	}*/
		
	heights[id] = box.clientHeight;
	if(box.style.height == ""){
		box.style.height = ""+(box.clientHeight - 80)+"px"
	}
	box.style.overflow = "hidden";
	
	if (animate) {
		step[id] = minStep;
		var funct = contractAnim(box, id);
		timeout[id] = setInterval( funct, delay );
	} else {
		box.style.height = "220px";
		var els = box.getElementsByTagName("P");
		for (var i = 1; i < els.length; i++) {
			els[i].style.display="none";
			
		}
				
		toggles[id].className="continua";
	}
	
}

function contractAnim(box, id) {
	return( function() {
		if (parseInt(box.style.height) <= 225+easeOffset && step[id] > minStep) {
			step[id] -= 1;
		}
		else if(step[id] < maxStep) {
			step[id] += 1;
		}
		
		box.style.height = "" + (parseInt(box.style.height) - step[id]) + "px";
		if ( parseInt(box.style.height) <= 225 ) {
			clearTimeout(timeout[id]);
				
			toggles[id].className="continua";
			
			var els = box.getElementsByTagName("P");
			for (var i = 1; i < els.length; i++) {
				els[i].style.display="none";
				
			}
			
		}
		
	} );
}
