/**
 * @author zamborlini
 */
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;

YAHOO.namespace("toggler");

YAHOO.toggler.doToggle = {
	init : function()
	{
		// init per il link base di toggling
		this.toggleLinks = Dom.getElementsByClassName("toggle");
		for (var i = 0; i < this.toggleLinks.length; i++) {
			Event.addListener(this.toggleLinks[i], "click", this.animateElements, this);
		}
	},
	toggleElements : function(e,controlNode,refEl) {
		if(controlNode && refEl) {
			if(Dom.hasClass(refEl,"show")) {
				Dom.removeClass(controlNode,"selected");
				Dom.addClass(controlNode,"unselected");
				Dom.removeClass(refEl,"show");
			} else {
				Dom.addClass(controlNode,"selected");
				Dom.removeClass(controlNode,"unselected");
				Dom.addClass(refEl,"show");
			}
		}
		// to disable control node's default behaviour
		return false;
	},
	animateElements : function(e,obj) {
		// obj = javascript toggle object
		// this = link clicked
		Event.preventDefault(e);

		if(this.rel) {
			  controlNode = this;
		}
		if(typeof(controlNode) == "string") {
			  controlNode = Dom.get(controlNode);
		}

		// objParameters
		// [0] = object id
		// [1] = animation type (fade, slide)
		// [2] = animation duration (seconds)
		var linkClicked = this;
		var objParameters = controlNode.rel.split(",");
		var refEl = Dom.get(objParameters[0]);
		var minH = parseInt(objParameters[3]);
		var maxH = parseInt(objParameters[4]);
		var act = objParameters[5];
		var hideBottom = objParameters[6];
		var objStatus = Dom.hasClass(refEl,"show"); // if true, object is shown
		
		switchClasses = function()
		{
			obj.toggleOtherElements(e,linkClicked,refEl);
			obj.toggleElements(e,linkClicked,refEl);
		}
		
		// se è toggle agisco.
		// se è open + chiuso agisco.
		if((objParameters[5] == "toggle") || (!objStatus && objParameters[5] == "open"))		
		if(objParameters[1] == "fade") 
		{
			if(objStatus == true) {
				// NASCONDO L'ITEM
				var attributes = {
					opacity: { from: 1, to: 0 },
					height: { from: maxH, to: minH}
				}
				var objAnim = new YAHOO.util.Anim(objParameters[0],attributes);
				objAnim.useSeconds = false;
				objAnim.duration = objParameters[2];
				objAnim.onComplete.subscribe(switchClasses);
				
				// SE AVEVA UN BG, lo mostro
				if(hideBottom)
				{
					Dom.setStyle(hideBottom,"display","block");
				}
			
				objAnim.animate();
				
			} else {
				
				// MOSTRO L'ITEM
				Dom.setStyle(objParameters[0],"opacity",0);
				switchClasses();
				var attributes = {
					opacity: { from: 0, to: 1 },
					height: { from: minH, to: maxH}
				}
				var objAnim = new YAHOO.util.Anim(objParameters[0],attributes);
				objAnim.useSeconds = false;
				objAnim.duration = objParameters[2];

				// SE AVEVA UN BG, lo nascondo
				if(hideBottom)
				{
					Dom.setStyle(hideBottom,"display","none");
				}
				
				objAnim.animate();
			}
		} else if (objParameters[1] == "slide") {
				// not implemented yet
		} else {
			// NO ANIMATION - switch classes
			switchClasses();
		}
	},
	toggleOtherElements : function(e,linkClicked,refEl) {
		// toggle selected state of other elements pointing to the same source
		for(var i=0; i<this.toggleLinks.length; i++) {
			var objParameters = this.toggleLinks[i].rel.split(",");
			var linkClickedParameters = linkClicked.rel.split(",");
			
			if(objParameters[0] == linkClickedParameters[0]) {
				if(Dom.hasClass(this.toggleLinks[i],"selected")) {
					Dom.removeClass(this.toggleLinks[i],"selected");
				} else {
					Dom.addClass(this.toggleLinks[i],"selected");
				}
			}
		}
	},
	forceClose : function(obj)
	{
		var id = obj.id;
		var duration = obj.duration;
		var maxH = obj.from;
		var minH = obj.to;
		var control = obj.control;
		var hideBottom = obj.hideBottom;
		
		var refEl = Dom.get(id);
		var controlNode = Dom.get(control);
		var objStatus = Dom.hasClass(refEl,"show"); // if true, object is shown
		
		// se è già chiuso, esco
		if(!objStatus) return false;
		
		Dom.removeClass(refEl,"show");
		Dom.removeClass(controlNode,"selected");
		Dom.addClass(controlNode,"unselected");
	
		var attributes = {
			opacity: { from: 1, to: 0 },
			height: { from: maxH, to: minH}
		}
		var objAnim = new YAHOO.util.Anim(id,attributes);
		objAnim.useSeconds = false;
		objAnim.duration = duration;
		
		// SE AVEVA UN BG, lo mostro
		if(hideBottom)
		{
			Dom.setStyle(hideBottom,"display","block");
		}
	
		objAnim.animate();
	},
	forceOpen : function(obj)
	{
		var id = obj.id;
		var duration = obj.duration;
		var minH = obj.from;
		var maxH = obj.to;
		var control = obj.control;
		
		var refEl = Dom.get(id);
		var controlNode = Dom.get(control);
		var objStatus = Dom.hasClass(refEl,"show"); // if true, object is shown
		
		// se è già aperto, esco
		if(objStatus) return false;
		
		Dom.addClass(refEl,"show");
		Dom.addClass(controlNode,"selected");
		Dom.removeClass(controlNode,"unselected");
		
		var attributes = {
			opacity: { from: 0, to: 1 },
			height: { from: minH, to: maxH}
		}
		var objAnim = new YAHOO.util.Anim(id,attributes);
		objAnim.useSeconds = false;
		objAnim.duration = duration;
	
		objAnim.animate();
	}
}

initPage = function() {
	YAHOO.toggler.doToggle.init();
}

Event.addListener(window,"load",initPage);
