var timerlen = 5;
var slideAniLen = 250;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var initHeight = new Array();
var elemState = new Array();
var moving = new Array();
var dir = new Array();

function slidedown(objname,buttonname){
        if(moving[objname])
                return;

        obj[buttonname] = document.getElementById(buttonname);
		//if(document.getElementById(objname).style.display != "none")
          //      return; // cannot slide down something that is already visible

        moving[objname] = true;
        dir[objname] = "down";
		obj[buttonname].className = "less";
        startslide(objname,buttonname);
}

function slideup(objname,buttonname){
        if(moving[objname])
                return;

        obj[buttonname] = document.getElementById(buttonname);
		//if(document.getElementById(objname).style.display == "none")
          //      return; // cannot slide up something that is already hidden

        moving[objname] = true;
        dir[objname] = "up";
		obj[buttonname].className = "more";
        startslide(objname,buttonname);
}

function startslide(objname,buttonname){
        obj[objname] = document.getElementById(objname);
		

		//obj[buttonname].backgroundPosition = "20px right";
		//alert(obj[buttonname].backgroundPosition);
		//setStyle(obj[buttonname],"background-position","20px right");
		//alert(getStyle(obj[buttonname],"background-position"));
		

		initHeight[objname] = parseInt(getStyle(obj[objname],"min-height"));
		//endHeight[objname] = parseInt(obj[objname].style.height);
        //endHeight[objname] = parseInt(obj[objname].style.maxHeight);;
		//endHeight[objname] = parseInt(getStyle(obj[objname],"height"));
		endHeight[objname] = parseInt(getStyle(obj[objname],"max-height"));// - 150;
		endHeight[objname] = parseInt(obj[objname].scrollHeight);
		//endHeight[objname] = obj[objname].offsetHeight;

        startTime[objname] = (new Date()).getTime();
		
		//alert(obj[objname].style.height);
		//alert(obj[objname].style.width + "hh");
		//alert(endHeight[objname]);

        if(dir[objname] == "down"){
                //obj[objname].style.height = "1px";
        }

        //obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname){
        var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen) {
                endSlide(objname);
		}
        else {
			  var d;
              if(dir[objname] == "up") {
                d =Math.round(elapsed / slideAniLen * (initHeight[objname]-endHeight[objname]));
				obj[objname].style.height = (endHeight[objname] + d) + "px";
                       // d = endHeight[objname] - d;
			  } else {
				d =Math.round(elapsed / slideAniLen * (endHeight[objname]-initHeight[objname]));
				obj[objname].style.height = (initHeight[objname] + d) + "px";
			  }
        }

        return;
}

function endSlide(objname){
        clearInterval(timerID[objname]);

        //if(dir[objname] == "up")
          //      obj[objname].style.display = "none";

        if(dir[objname] == "up") {
			obj[objname].style.height = initHeight[objname] + "px";
		} else {
			obj[objname].style.height = endHeight[objname] + "px";
		}
		
		//alert(obj[objname].offsetHeight);
		//alert(obj[objname].clientHeight);
		//alert(obj[objname].scrollHeight);
		//alert(obj[objname].style.height);
			 
        delete(moving[objname]);
        delete(timerID[objname]);
        delete(startTime[objname]);
        delete(endHeight[objname]);
        delete(obj[objname]);
        delete(dir[objname]);

        return;
}


function toggleSlide(objname, buttonname){
	if (elemState[objname] == "close" || elemState[objname] == undefined) {
		slidedown(objname,buttonname);
		elemState[objname] = "open";
	} else {
		slideup(objname,buttonname);
		elemState[objname] = "close";
	}
/*  if(document.getElementById(objname).style.display == "none"){
    // div is hidden, so let's slide down
    slidedown(objname);
  }else{
    // div is not hidden, so slide up
    slideup(objname);
  }*/
}


function getStyle(el, style) {
   if(!document.getElementById) return;
   
     var value = el.style[toCamelCase(style)];
   
    if(!value)
        if(document.defaultView)
            value = document.defaultView.
                 getComputedStyle(el, "").getPropertyValue(style);
       
        else if(el.currentStyle)
            value = el.currentStyle[toCamelCase(style)];
     
     return value;
}

function setStyle(el, styleName, val) {
   if(!document.getElementById) return;
   
    if ( (el.style[toCamelCase(styleName)]) == undefined ) {
        if(document.defaultView)
            document.defaultView.getComputedStyle(el, "").styleName = val;
        else if(el.currentStyle)
            el.currentStyle[toCamelCase(styleName)] = val;
	} else {
		el.style[toCamelCase(styleName)] = val;
	}
   
}

/** toCamelCase(input)
 * Converts string input to a camel cased version of itself.
 * For example:
 * toCamelCase("z-index"); // returns zIndex
 * toCamelCase("border-bottom-style"); // returns borderBottomStyle.
 */
function toCamelCase(s) {
	for(var exp = toCamelCase.exp; 
		exp.test(s); s = s.replace(exp, RegExp.$1.toUpperCase()) );
	return s;
}
toCamelCase.exp = /-([a-z])/;
