﻿
// These variable are for the vertical sliding methods
var timerlen = 1;
var slideAniLen = 550;
var timerID = new Array();    
var obj = new Array();
var endLength = new Array();
var moving = new Array();
var dir = new Array();
var startTime = new Array();

// This object slide the elements vertically (top to bottom)
function VerticalSlide(ObjectToSlide)
{
    this.ToggleSlide(ObjectToSlide);
}

/*
    This function sees if object is shown, slide up or if object is hidden, slide down
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.ToggleSlide = function (objname)
{	
	if(document.getElementById(objname).style.display == "none")
	{
		// div is hidden, so let's slide down
		this.SlideDown(objname);
	}
	else
	{
		// div is not hidden, so slide up
		this.SlideUp(objname);
	}
};

/*
    This function slides the object down
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.SlideDown = function (objname)
{   
	if(moving[objname])
		return;

	if(document.getElementById(objname).style.display != "none")
		return; // cannot slide down something that is already visible

	moving[objname] = true;
	dir[objname] = "down";
	this.StartSlide(objname);
};

/*
    This function slides the object up
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.SlideUp = function (objname)
{
    if(moving[objname])
		return;

	if(document.getElementById(objname).style.display == "none")
		return; // cannot slide up something that is already hidden

    moving[objname] = true;
	dir[objname] = "up";
	this.StartSlide(objname);
};

/*
    This function start slidings the object
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.StartSlide = function (objname)
{
    obj[objname] = document.getElementById(objname);
    
    if(dir[objname] == "up")
    {
        obj[objname].style.height = obj[objname].offsetHeight;
        obj[objname].style.overflow = "hidden";
        endLength[objname] = parseInt(obj[objname].style.height);
    }
    else
    {
        obj[objname].style.display="block";
        changeOpac(0, objname);
        obj[objname].style.height = obj[objname].offsetHeight;
        obj[objname].style.overflow = "hidden";
        endLength[objname] = parseInt(obj[objname].style.height);
        obj[objname].style.display="none";
        changeOpac(100, objname);
        
    }
	startTime[objname] = (new Date()).getTime();
    
    
	if(dir[objname] == "down")
		obj[objname].style.height = "1px";
		
	obj[objname].style.display = "block";

	timerID[objname] = setInterval('VerticalSlide.prototype.SlideTick(\'' + objname + '\');',timerlen);
};

/*
    This function checks if the time since the slide started has passed
    the define value for slideAniLen if it hasn't keep sliding
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.SlideTick = function (objname)
{
    
    var elapsed = (new Date()).getTime() - startTime[objname];
    
	if (elapsed > slideAniLen)
		this.EndSlide(objname)
	else 
	{
	    var d =Math.round(elapsed / slideAniLen * endLength[objname]);
		if(dir[objname] == "up")
			d = endLength[objname] - d;
			
	    obj[objname].style.height = d + "px";
	    
	    /*if(obj[objname].style.height.replace('%','')-1 > 0)
		obj[objname].style.height = (obj[objname].style.height.replace('%','')-1) + "%";
		
		if(obj[objname].style.height.replace('%','') == 50)
		{
		alert(obj[objname].style.height);
		alert(obj[objname].style.overflow);
		}*/
	}
	return;
};

/* 
    This function ends the sliding
    Parameters
        objname - name of object to slide
*/
VerticalSlide.prototype.EndSlide = function (objname)
{
	clearInterval(timerID[objname]);
 
	if(dir[objname] == "up")
		obj[objname].style.display = "none";
    else
        obj[objname].style.display = "block";
 
	obj[objname].style.height = endLength[objname] + "px";
    obj[objname].style.overflow = "visible";
 
	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(endLength[objname]);
	delete(obj[objname]);
	delete(dir[objname]);

	return;
};


function changeOpac(opacity, id) {
        var object = document.getElementById(id).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";
    }