/**
 * Uncompressed version of the accordion script by Michael Leigeber
 * all credits go to him. This script is available for any personal or commercial
 * projects.
 *
 * See: http://www.leigeber.com/2009/03/accordion/
 **/ 
var TINY={};

function T$(i){return document.getElementById(i)}
function T$$(headerElementTagName,p){return p.getElementsByTagName(headerElementTagName)}

TINY.accordion=function(){
	
	//constructor
	function slider(id){
		this.id              = id;
		this.headerElements  = [];
		this.sectionElements = [];
	}

	//init
	slider.prototype.init=function(/* string ul id */ ulId, /* string header element name */ headerElementTagName , /* boolean: open independently */ openIndependently, /* integer index of open tab */ activeElementIndex, /* string class for active header */ activeHeaderClassname){
		var listElements           = T$(ulId);
		var i                      = x = 0;
		var listItems              = [];
		this.activeHeaderClassname = activeHeaderClassname || '' ;
		var action = false;

		/* strip textnodes from listElements */
		var n                  = listElements.childNodes;
		var l                  = n.length;
		this.openIndependently = openIndependently || false;
		for(i;i<l;i++){
			if(n[i].nodeType!=3){
				listItems[x]=n[i];
				x++;				
			}
		}		
		this.numberOfListItems=x;

		for(i=0;i<this.numberOfListItems;i++){
			var listItem            = listItems[i];

			/* get header elements */
			this.headerElements[i]  = headerElement  = T$$(headerElementTagName,listItem)[0];

			/* get section elements */
			this.sectionElements[i] = sectionElement = T$$('div',listItem)[0];

			/* add onclick function to header */
			headerElement.onclick=new Function(this.id+'.headerElementOnClick(false,this, '+action+')');

			if(activeElementIndex==i){
				/* this is the active element */
				headerElement.className     = this.activeHeaderClassname;
				sectionElement.style.height = 'auto';
				sectionElement.unfolded     = 1
			}else{
				/* this is not the active element */
				sectionElement.style.height = 0;
				sectionElement.unfolded     = -1;
			}
		}
	};

	slider.prototype.headerElementOnClick=function(doOpen,clickedHeaderElement){
		if (slider.prototype.action == true)
		{
			/* loop over all list items */
			for(var i=0;i<this.numberOfListItems;i++){
				var headerElement        = this.headerElements[i];
				var sectionElement       = this.sectionElements[i];
				var sectionElementHeight = sectionElement.style.height;
				sectionElementHeight     = sectionElementHeight=='auto' ? 1 : parseInt(sectionElementHeight);
				clearInterval(sectionElement.interval);
	
				if((sectionElementHeight!=1&&sectionElement.unfolded==-1)&&(doOpen==1||headerElement==clickedHeaderElement)){
					/* element is closed but should be opened */
					sectionElement.style.height = '';
					sectionElement.maxHeight    = sectionElement.offsetHeight;
					sectionElement.style.height = sectionElementHeight+'px';
					sectionElement.unfolded     = 1;
					headerElement.className     = this.activeHeaderClassname;
					animate(sectionElement,1);
				}else if(sectionElementHeight>0&&(doOpen==-1||this.openIndependently||headerElement==clickedHeaderElement)){
					sectionElement.unfolded = -1;
					headerElement.className = '';
					animate(sectionElement,-1);
				}
			}
		}
	};

	slider.prototype.toggleSection = function(sectionNumber){
	var headerElement = this.headerElements[sectionNumber];
	slider.prototype.action = true;
	headerElement.onclick(true, headerElement);
	slider.prototype.action = false;
	}

	function animate(sectionElement){
		sectionElement.interval=setInterval(function(){slide(sectionElement)},10)
	}

	function slide(sectionElement){
		var offsetHeight = sectionElement.offsetHeight;
		
		var dHeight      = sectionElement.unfolded==1 ? sectionElement.maxHeight-offsetHeight : offsetHeight;

		sectionElement.style.height  = offsetHeight+(Math.ceil(dHeight/10)*sectionElement.unfolded)+'px';
		sectionElement.style.opacity = offsetHeight/sectionElement.maxHeight;
		sectionElement.style.filter  = 'alpha(opacity='+offsetHeight*100/sectionElement.maxHeight+')';
		
		if((sectionElement.unfolded==1&&offsetHeight>=sectionElement.maxHeight)||(sectionElement.unfolded!=1&&offsetHeight==1)){
			if(sectionElement.unfolded==1){
				sectionElement.style.height='auto';
			}
			
			clearInterval(sectionElement.interval)
		}
	}

	return{slider:slider}
}();