var resizeDivInterval;

function openCloseDiv(_divId,_closedWidth,_closedHeight,_openWidth,_openHeight,_rate,linkSpanCloseId,linkSpanOpenId){
	
	// get the reference to the div
	var div = document.getElementById(_divId);
	//alert(div.style.height + " = " + _openHeight+"px\n\n"+div.style.width + " = " + _openWidth+"px");
	
	clearInterval(resizeDivInterval);
	
	// assign variables for setInterval
	divId = _divId;
	openHeight = _openHeight;
	openWidth = _openWidth;
	closedHeight = _closedHeight;
	closedWidth = _closedWidth;
	rate = _rate;
	
	//alert(div.style.height + " = " + openHeight+"px\n\n"+div.style.width + " = " + openWidth+"px");
	
	// remove 'px' from height values so we can compare them as numbers
	var currentHeight = Number(div.style.height.substr(0,div.style.height.indexOf("px")));
	var currentWidth = Number(div.style.width.substr(0,div.style.width.indexOf("px")));
	
	// get refs to link spans
	linkSpanOpen = document.getElementById(linkSpanOpenId);
	linkSpanClose = document.getElementById(linkSpanCloseId);
	
	// if the 'closed' link is showing
	if(linkSpanClose.style.display!="none"){
		// start closing
		resizeDivInterval = setInterval("resizeDiv(divId,closedHeight,closedWidth,rate)",10);
		// switch the open/close links over
		linkSpanOpen.style.display = "inline";
		linkSpanClose.style.display = "none";
	}else{
		// start opening
		resizeDivInterval = setInterval("resizeDiv(divId,openHeight,openWidth,rate)",10);
		// switch the open/close links over
		linkSpanOpen.style.display = "none";
		linkSpanClose.style.display = "inline";
	}
}

function resizeDiv(divId,targetHeight,targetWidth,rate){
	
	// get the reference to the div
	var div = document.getElementById(divId);
	// remove 'px' from height values so we can compare them as numbers
	var currentHeight = div.style.height.substr(0,div.style.height.indexOf("px"));
	var currentWidth = div.style.width.substr(0,div.style.width.indexOf("px"));
	// set pixel snapping distance
	var snapDistance = 1;
	
	// change height if a targetHeight has been passed
	if(targetHeight!=""){
		if(currentHeight!=targetHeight){
			var newHeight = (Number(currentHeight) + Number((targetHeight-currentHeight)/rate));
			div.style.height = newHeight+"px";
			// snap to pixel
			if(newHeight<targetHeight && newHeight+snapDistance>targetHeight) div.style.height = targetHeight+"px";
			if(newHeight>targetHeight && newHeight-snapDistance<targetHeight) div.style.height = targetHeight+"px";
		}
	}
	// change width if a targetWidth has been passed
	if(targetWidth!=""){
		if(currentWidth!=targetWidth){
			var newWidth = (Number(currentWidth) + Number((targetWidth-currentWidth)/rate));
			div.style.width = newWidth+"px";
			// snap to pixel
			if(newWidth<targetWidth && newWidth+snapDistance>targetWidth) div.style.width = targetWidth+"px";
			if(newWidth>targetWidth && newWidth-snapDistance<targetWidth) div.style.width = targetWidth+"px";
		}
	}
	
	
	// remove the interval function when finished
	if((targetHeight=="" || div.style.height==targetHeight+"px") && (targeWidth=="" || div.style.width==targetWidth+"px")){
		clearInterval(resizeDivInterval);
	}
	
}
