var FSCMP
if (!FSCMP) {FSCMP={theObjects:[]}}


addLoader(function() {FSCMP.postLoad()})

FSCMP.postLoad=function() {
	for(var i=0;i<this.theObjects.length;i++) {
		if (this.theObjects[i].postInit) {this.theObjects[i].postInit()}	
	}
}
FSCMP.addTheObject=function(o) {
	this.theObjects[this.theObjects.length]=o	
}

if (!FSCMP.Collapse) {FSCMP.Collapse={}}

FSCMP.Collapse = function(element, opts) {
	this.varName=""
	this.extra=[]
	this.page=""
	this.element=$(element)
	this.openClass="collapseopen"
	this.closeClass="collapseclose"
	this.skipClass="noSkipClassDefined"
	
	this.enableAnimation = true
	
	this.canClose=false
	
	this.defaultPanel=1
	this.currentPanel = null
	
	this.animator = null
	this.duration = 500
	
	this.hasFocus = null
	
	this.useFixedPanelHeights = true
	this.fixedPanelHeight = 0
	
	this.panels=[]
	FSCMP.Collapse.setOptions(this, opts, true)
	
}

FSCMP.Collapse.prototype.postInit=function() {
	if (this.element) {
		this.attachBehaviors()
	} else {
	}
}

FSCMP.Collapse.setOptions = function(obj, optionsObj, ignoreUndefinedProps) {
	if (!optionsObj) {return}
	for (var optionName in optionsObj) 	{
		if (ignoreUndefinedProps && optionsObj[optionName] == undefined) {continue}
		obj[optionName] = optionsObj[optionName];
	}
};

FSCMP.Collapse.prototype.attachBehaviors = function() {
	this.panels = this.getElementChildren(this.element)
	for (var i = 0; i < this.panels.length; i++) 	{
		this.initPanel(this.panels[i], i == this.defaultPanel)
	}
}

FSCMP.Collapse.prototype.getElementChildren = function(element) {
	var children = []
	var child = element.firstChild
	while (child) {
		if (child.nodeType == 1 && child.className!=this.skipClass) {
				children.push(child)
		}
		child = child.nextSibling
	}
	return children
}
FSCMP.Collapse.prototype.initPanel = function(panel, isDefault) {
	var content = this.getPanelContent(panel)
	if (isDefault) 	{
		this.currentPanel = panel
		sc(panel,this.openClass,this.closeClass)
	} else 	{
		sc(panel,this.closeClass,this.openClass)
		if (content) {content.style.height = "0px"}
	}
	var tab=$t(panel,"DIV")
	if (tab[0]) {
		var self = this
		$ae(tab[0], "click", function(e) { return self.onPanelClick(panel) }, false)
	}
}
FSCMP.Collapse.prototype.getPanelContent = function(panel) {
	if (!panel) {
		return null
	} else {
		return this.getElementChildren(panel)[1]
	}
}
FSCMP.Collapse.prototype.onPanelClick = function(panel) {
	if (panel != this.currentPanel) {
		var content = this.getPanelContent(panel)
		if (content.innerHTML=="") {
			sc(content,"loading")
			var self=this
			var ex=""
			for (var i=0;i<this.extra.length;i++) {ex=ex+"&"+this.extra[i]}
			callAction(new Array("P",this.onPanelLoaded,this.page,"id="+panel.id+ex,"T"))
		}
		this.openPanel(panel)
	} else {
		if (this.canClose) {this.closePanel(panel)}
	}
}
FSCMP.Collapse.prototype.onPanelLoaded = function(m,x,u,nfo) {
	var v=nfo.split("&")
	var opts=[]
	for(var i=0;i<v.length;i++) {
		var opt=v[i].split("=")
		opts[opt[0]]=opt[1]
	}
	var panel=$(opts["id"])
	if (panel) {
		var content = FSCMP.Collapse.prototype.getPanelContent(panel)
		sc(content,"","loading")
		if(m) {
			content.innerHTML=x	
		} else {
			content.innerHTML=""	
		}
	}
}
FSCMP.Collapse.prototype.closePanel = function(panel) {
	var panelA=this.currentPanel
	if( panelA ) {contentA = this.getPanelContent(panelA)}
	if (this.enableAnimation) 	{
		if (this.animator) {this.animator.stop()}
		this.animator = new FSCMP.Collapse.PanelAnimator(this, null, { duration: this.duration })
		this.animator.start()
	} else	{
		if(contentA) {contentA.style.height = "0px"}
	}
	if(panelA) {sc(panelA,this.closeClass,this.openClass)	}
	this.currentPanel = null
}

FSCMP.Collapse.prototype.openPanel = function(panel) {
	var panelA=this.currentPanel
	var panelB=panel
	if (!panelB || panelA == panelB) {return}

	var contentA
	if( panelA ) {contentA = this.getPanelContent(panelA)}
	
	var contentB = this.getPanelContent(panelB)
	if (!contentB) {return}

	if (!this.useFixedPanelHeights)	{// && !this.fixedPanelHeight
		if (contentA) {this.fixedPanelHeight = (contentA.offsetHeight) ? contentA.offsetHeight : contentA.scrollHeight;}
	}

	if (this.enableAnimation) 	{
		if (this.animator) {this.animator.stop()}
		this.animator = new FSCMP.Collapse.PanelAnimator(this, panelB, { duration: this.duration })
		this.animator.start()
	} else	{
		if(contentA) {contentA.style.height = "0px"}
		contentB.style.height = (this.useFixedPanelHeights?this.fixedPanelHeight:contentB.scrollHeight) + "px";
	}

	if(panelA) {sc(panelA,this.closeClass,this.openClass)	}

	sc(panelB,this.openClass,this.closeClass)
	this.currentPanel = panelB
}

FSCMP.Collapse.PanelAnimator=function(theObj, panel, opts) {
	this.timer = null
	this.interval = 0
	this.stepCount = 0

	this.fps = 0
	this.steps = 10
	this.duration = 500
	this.onComplete = null

	this.panel = panel
	//this.panelToOpen = theObj.getElement(panel)
	this.panelData = []

	FSCMP.Collapse.setOptions(this, opts, true)

	if (this.fps > 0) {
		this.interval = Math.floor(1000 / this.fps);
		this.steps = parseInt((this.duration + (this.interval - 1)) / this.interval);
	} else {
		if (this.steps > 0) {this.interval = this.duration / this.steps}
	}

	//var panels = accordion.getPanels()
	for (var i = 0; i < theObj.panels.length; i++) {
		var p = theObj.panels[i]
		var c = theObj.getPanelContent(p)
		if (c)	{
			var h = c.offsetHeight
			if (h == undefined) {h = 0}
			if (p == panel || h > 0) {
				var obj = new Object
				obj.panel = p
				obj.content = c
				obj.fromHeight = h
				obj.toHeight = (p == panel) ? (theObj.useFixedPanelHeights ? theObj.fixedPanelHeight : c.scrollHeight) : 0
				obj.increment = (obj.toHeight - obj.fromHeight) / this.steps
				obj.overflow = c.style.overflow
				this.panelData.push(obj)

				c.style.overflow = "hidden"
				c.style.height = h + "px"
			}
		}
	}
}

FSCMP.Collapse.PanelAnimator.prototype.start = function() {
	var self = this;
	this.timer = setTimeout(function() { self.stepAnimation(); }, this.interval)
}

FSCMP.Collapse.PanelAnimator.prototype.stop = function() {
	if (this.timer) {
		clearTimeout(this.timer)
		if (this.stepCount < this.steps) {
			for (i = 0; i < this.panelData.length; i++) {
				obj = this.panelData[i]
				obj.content.style.overflow = obj.overflow
			}
		}
	}
	this.timer = null
}

FSCMP.Collapse.PanelAnimator.prototype.stepAnimation = function() {
	++this.stepCount

	this.animate()

	if (this.stepCount < this.steps) {
		this.start()
	} else  {
		if (this.onComplete) {this.onComplete()}
	}
}

FSCMP.Collapse.PanelAnimator.prototype.animate = function() {
	var i, obj

	if (this.stepCount >= this.steps) {
		for (i = 0; i < this.panelData.length; i++) {
			obj = this.panelData[i]
			if (obj.panel != this.panel) {	obj.content.style.height = "0px"}
			obj.content.style.overflow = obj.overflow;
			obj.content.style.height = obj.toHeight + "px";
		}
	} else	{
		for (i = 0; i < this.panelData.length; i++) {
			obj = this.panelData[i]
			obj.fromHeight += obj.increment
			obj.content.style.height = obj.fromHeight + "px"
		}
	}
}