﻿/*
Ressource:
http://blog.tamalwhite.com/2007/3/6/re-how-to-create-digg-comment-style-sliding-divs-with-javascript-and-css

Handler examples:
- Slide('mydiv').down();
- Slide('mydiv',{duration:2}).down();
- Slide('mydiv',{onComplete:function(){alert('The DIV is up.');}}).up();
*/
	
var comments = function(){
	return {
		load:function(url){
			ajax.load(url,'comments_new_ajax',false)
		},
		sld:function(){
			slider('com0').down();
		}
	};
}();

var slideInUse = new Array();
var slideAtClose = true;
var slidePadding = 0;

function slider(objId){
	var elm = objId+'_body';
	this.obj = document.getElementById(elm);
	this.up = function(){
		if(this.obj.style.display=='block'){
			Slide(elm,{onComplete:function(){}}).up();
		}
	}
	this.down = function(){
		if(this.obj.style.display=='none' || this.obj.style.display==''){
			Slide(elm,{onComplete:function(){}}).down();
		}
	}
	this.toogle = function(){
		if(this.obj.style.display=='block'){
			Slide(elm,{onComplete:function(){}}).up();
		}
		if(this.obj.style.display=='none'){
			Slide(elm,{onComplete:function(){}}).down();
		}
	}
	return this;
}

function Slide(objId, options){
	this.obj = document.getElementById(objId);
	this.duration = 0.6;
	
	// Get container height (modified workaround)
	if(!slideAtClose){
		this.obj.style.display = 'block';
		this.height = parseInt(this.obj.offsetHeight-slidePadding);
		this.obj.style.display = 'none';
	}else{
		if(this.obj.style.display == 'none'){
			this.obj.style.display = 'block';
			this.height = parseInt(this.obj.offsetHeight-slidePadding);
			this.obj.style.display = 'none';
		}else if(this.obj.style.display == 'block'){
			this.obj.style.display = 'block';
			this.height = parseInt(this.obj.offsetHeight-slidePadding);
		}
	}

	if(typeof options!='undefined'){this.options = options;}else{this.options = {};}
	if(this.options.duration){this.duration = this.options.duration;}
		
	this.up = function(){
		this.curHeight = this.height;
		this.newHeight = '1';
		if(slideInUse[objId] != true){
			var finishTime = this.slide();
			window.setTimeout("Slide('"+objId+"').finishup("+this.height+");",finishTime);
		}
	}
	
	this.down = function(){
		this.newHeight = this.height;
		this.curHeight = '1';
		if(slideInUse[objId] != true){
			this.obj.style.height = '1px';
			this.obj.style.display = 'block';
			this.slide();
		}
	}
	
	this.slide = function(){
		slideInUse[objId] = true;
		var frames = 30 * duration; // Running at 30 fps

		var tIncrement = (duration*1000) / frames;
		tIncrement = Math.round(tIncrement);
		var sIncrement = (this.curHeight-this.newHeight) / frames;

		var frameSizes = new Array();
		for(var i=0; i < frames; i++){
			if(i < frames/2){
				frameSizes[i] = (sIncrement * (i/frames))*4;
			} else {
				frameSizes[i] = (sIncrement * (1-(i/frames)))*4;
			}
		}
		
		for(var i=0; i < frames; i++){
			this.curHeight = this.curHeight - frameSizes[i];
			window.setTimeout("document.getElementById('"+objId+"').style.height='"+Math.round(this.curHeight)+"px';",tIncrement * i);
		}
		
		window.setTimeout("delete(slideInUse['"+objId+"']);",tIncrement * i);
		
		if(this.options.onComplete){
			window.setTimeout(this.options.onComplete, tIncrement * (i-2));
		}
		
		return tIncrement * i;
	}
	
	this.finishup = function(height){
		this.obj.style.height = height + 'px';
		this.obj.style.display = 'none';
	}
	
	return this;
}