// ### scrolling show/hide div.
// ### Usage: slidedown(objname) or slideup(objname) or ToggleSlideDiv(objname)
// ### Your div needs to be have the styles, display:none; and overflow:hidden; and a height: to start.
var timerlen = 2; // Speed at which the div fades
var slideAniLen = 200; // Speed of the slider

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();
var scrOfX = 0;
var scrOfY = 0;

var IE = document.all?true:false;

var tempX = 0;
var tempY = 0;

// Must set div position:fixed, otherwise uncomment getScrollXY()
function centerDiv(divID,definedPageTop) {
	var pageTop;
	var divWidth = document.getElementById(divID).style.width != '' ? document.getElementById(divID).style.width.replace('px','') : document.getElementById(divID).offsetWidth;
	var divHeight = document.getElementById(divID).style.height != '' ? document.getElementById(divID).style.height.replace('px','') : document.getElementById(divID).offsetHeight;

	window.onresize = function() {
		centerDiv(divID,definedPageTop);
	}
	
	// Uncomment below if your if is position:absolute
	//getScrollXY();
	var scrollbarWidth = getScrollbarWidth();
	if (window.innerWidth) {
		pageLeft = (window.innerWidth - divWidth - scrollbarWidth)/2;
		if (pageLeft < 0) pageLeft = 0;
		if (definedPageTop != undefined && definedPageTop != '') {
 			pageTop = scrOfY + definedPageTop;
		} else  {
			pageTop = (window.innerHeight - divHeight)/2  + scrOfY;
		}
		if (pageTop < 0) pageTop = 0;
		document.getElementById(divID).style.left = pageLeft + "px";
		document.getElementById(divID).style.top = pageTop + "px";
	} else if (document.documentElement) { // IE6+
		pageLeft = (document.documentElement.clientWidth - document.getElementById(divID).offsetWidth - scrollbarWidth)/2;
		if (pageLeft < 0) pageLeft = 0;
		if (definedPageTop != '')
			pageTop = scrOfY + definedPageTop;
		else
			pageTop = (document.documentElement.clientHeight - document.getElementById(divID).offsetHeight)/2 + scrOfY;

		if (pageTop < 0) pageTop = 0;
		if (document.getElementById) {
			document.getElementById(divID).style.left = pageLeft + "px";
			document.getElementById(divID).style.top = 30 + scrOfY + "px";
		} else {
			document.all[divID].style.left = pageLeft + "px";
			document.all[divID].style.top = pageTop + "px";
		}
	} else if (document.body) { // older IEs
		pageLeft = (document.body.clientWidth - document.getElementById(divID).style.width.replace('px',''))/2;
		if (pageLeft < 0) pageLeft = 0;
		if (definedPageTop != '')
			pageTop = scrOfY + definedPageTop;
		else
			pageTop = (document.body.clientHeight - document.getElementById(divID).style.height.replace('px',''))/2  + scrOfY;

		if (pageTop < 0) pageTop = 0;;
		document.all[divID].style.left = pageLeft - scrollbarWidth + "px";
		document.all[divID].style.top = pageTop + "px";
	}
}

// Requires getMouseXY - See notes for that function
function floatDiv(divID) {
	var padding = 25;
	var pageTop = IE ? document.documentElement.scrollTop : window.pageYOffset;

	document.getElementById(divID).style.display = 'block';
	var objHeight = document.getElementById(divID).offsetHeight;
	var objWidth = document.getElementById(divID).offsetWidth;

	if (document.innerWidth)
		var windowWidth = document.innerWidth;
	else if (document.documentElement)
		var windowWidth = document.documentElement.clientWidth;

	if (document.innerHeight)
		var windowHeight = document.innerHeight;
	else if (document.documentElement)
		var windowHeight = document.documentElement.clientHeight;

	if ((tempX + objWidth) > windowWidth)
		document.getElementById(divID).style.left = windowWidth - (objWidth + getScrollbarWidth() + padding) + 'px';
	else if (tempX < padding)
		document.getElementById(divID).style.left = padding + 'px';
	else
		document.getElementById(divID).style.left = tempX - padding + 'px';

	if ((tempY - objHeight - padding) < pageTop)
		document.getElementById(divID).style.top = tempY + 2*padding + 'px';
	else
		document.getElementById(divID).style.top = tempY - (objHeight + padding) + 'px';
}

// Need to add a mousemove listener to your page. Uncomment the two lines below
//if (!IE) document.addEventListener("mousemove",GetMouseXY,false);
//document.onmousemove = GetMouseXY;
function getMouseXY(e) {
	if (IE) { // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.documentElement.scrollLeft;
		tempY = event.clientY + document.documentElement.scrollTop;
	}
	else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX;
		tempY = e.pageY;
	}  
	if (tempX < 0){tempX = 0;}
	if (tempY < 0){tempY = 0;}  
//	document.Show.MouseX.value = tempX;
//	document.Show.MouseY.value = tempY;
	return true;
}

function getScrollbarWidth() {
	// Get inner width of browser without scrollbar
	document.body.style.overflow = 'hidden';
	var width = document.body.clientWidth;
 
	// Set browser to have scrollbar
	document.body.style.overflow = 'scroll';
 
	// Get width different from original browser width without scrollbar
	width -= document.body.clientWidth;

	// For IE
	if(!width) width = document.body.offsetWidth-document.body.clientWidth;
 
	// Reset overflow
	document.body.style.overflow = '';
 
	return width;
}

// Get the scroll ordinates
function getScrollXY() {
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	}
}

// ### The following functions are for disabling a page
function disablePage(yourDiv, reloadDiv, iOpacity) {
	if (iOpacity == undefined) iOpacity = 60;
	if (yourDiv != '') {
		document.getElementById(yourDiv).style.zIndex = 101;
		ShowHideDiv(yourDiv,'block');
	}
	var docHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
	var blurDiv = document.createElement("div");
	document.getElementsByTagName("body")[0].appendChild(blurDiv);
	blurDiv.id = "blurDiv";
	blurDiv.style.cssText = "position:absolute; top:0; right:0; z-index:100; width:100%; height:"+docHeight+"px; background-color: #000; opacity:" + (iOpacity/100) + "; filter:alpha(opacity=" + iOpacity + ")";
	if (yourDiv != '') {
		blurDiv.onclick = function() {
			enablePage(yourDiv, reloadDiv);
		}
	}
//	document.body.style.overflow='hidden';
//	document.documentElement.style.overflow='hidden';
}

function enablePage(yourDiv, reloadDiv) {
	var blurDiv = document.getElementById("blurDiv");
	blurDiv.parentNode.removeChild(blurDiv);
	if (yourDiv) {
		if (reloadDiv)	ajax.get('/cm_run/blankpage.htm',yourDiv);
		ShowHideDiv(yourDiv,'none');
	}
//	document.body.style.overflow='auto';
//	document.documentElement.style.overflow='auto';
}
// ### End disabling page functions

function InsertText(field,text) {
	myField = document.getElementById(field);

	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = ' ' + text + ' ';
	} else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos) + ' ' + text + ' ' +  myField.value.substring(endPos, myField.value.length);
		myField.focus();
	} else {
		myField.value += ' '+text+' ';
		myField.focus();
	}
}

// ### The following functions are for a sliding div
function slidedown(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";
	startslide(objname);
}
 
function slideup(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";
	startslide(objname);
}

function startslide(objname) {
	obj[objname] = document.getElementById(objname);
 
	endHeight[objname] = parseInt(obj[objname].style.height);
	startTime[objname] = (new Date()).getTime();
 
	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 = Math.round(elapsed / slideAniLen * endHeight[objname]);
		var f = elapsed / slideAniLen;

		if (dir[objname] == "up") {
			d = endHeight[objname] - d;
			f = 1 - f;
		} 

		obj[objname].style.height = d + "px";
		obj[objname].style.opacity = f;
		obj[objname].style.filter = 'alpha(opacity='+(f*100)+')';
		document.getElementById(objname).value=f;
	}
 
	return;
}

function endSlide(objname) {
	clearInterval(timerID[objname]);
 
	if(dir[objname] == "up"){
		obj[objname].style.display = "none";
		obj[objname].style.opacity = 0;
		obj[objname].style.filter = 'alpha(opacity='+(0)+')';
	}
	else{
		obj[objname].style.opacity = 1;
		obj[objname].style.filter = "";
	} 

	obj[objname].style.height = endHeight[objname] + "px";
 
	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(endHeight[objname]);
	delete(obj[objname]);
	delete(dir[objname]);
 
	return;
}

function toggleSlideDiv(divID) {
	if (document.getElementById(divID).style.display == 'block')
		slideup(divID);
	else
		slidedown(divID);
}

// Use this function with onload if you have a dynamic height div
function initSlideDiv(objName) {
	var divStatus;

	// Get original div display setting
	if (document.getElementById(objName).style.display == "block")
		divStatus = "block";
	else
		divStatus = "none";

	// Unhide div
	ShowHideDiv(objName,'block');

	// Get height
	document.getElementById(objName).style.height=parseInt(document.getElementById(objName).offsetHeight)+'px';
	if (document.getElementById(objName).offsetHeight > slideAniLen) slideAniLen=parseInt(document.getElementById(objName).offsetHeight);

	// Reset div display
	ShowHideDiv(objName,divStatus);
}
// ### End sliding div functions

// ### Non scrolling show/hide div. Your div needs a style setting of either display:none; or display:block to start.
function ShowHideDiv(divID,force) {
  if (document.getElementById(divID).style.display == 'block' && force != 'block')
    document.getElementById(divID).style.display = 'none';
  else if (document.getElementById(divID).style.display == 'none' && force != 'none')
    document.getElementById(divID).style.display = 'block';
}