// inc/utils.js
// Andrew J. Miller
// emch13d
// 2007-08-13

//-----------------------------------------------------------
function Expander(th)
{
	var div;
	var divs = th.parentNode.getElementsByTagName('div');
	for (var i = 0; i < divs.length; i++)
		if (divs[i].className == 'exinset')
		{
			div = divs[i];
			break;
		}
	var img;
	var imgs = th.parentNode.getElementsByTagName('img');
	for (var i = 0; i < divs.length; i++)
		if (imgs[i].className == 'exinset')
		{
			img = imgs[i];
			break;
		}
		
	if (div.style.visibility == 'visible' || div.style.display == 'block')
	{
		img.src = imgExpand.src;
		//div.style.visibility = 'hidden';
		div.style.display = 'none';
	}
	else
	{
		img.src = imgCollapse.src;
		//div.style.visibility = 'visible';
		div.style.display = 'block';
	}	

}

//-----------------------------------------------------------
function GetStyleProp(el, prop)
{
	var val = '';
	if (el.style[prop] && el.style[prop].length > 0)
	{
		val = el.style[prop];
	}
	else
	{
		if (el.currentStyle)
			val = el.currentStyle[prop];
		else
			val = window.getComputedStyle(el,null)[prop];
	}

	return val;
}

//-----------------------------------------------------------
function GetOffsetHeight(el)
{
	if (el.offsetHeight)
	{
		return el.offsetHeight;
	}
	else
	{
		return (parseInt(GetStyleProp(el, 'height')) + 
		parseInt(GetStyleProp(el, 'borderTopWidth')) +
		parseInt(GetStyleProp(el, 'borderBottomWidth')) + 
		parseInt(GetStyleProp(el, 'paddingTop')) + 
		parseInt(GetStyleProp(el, 'paddingBottom')));
	}
}

//-----------------------------------------------------------
function GetNonContentHeight(el)
{
	return (parseInt(GetStyleProp(el, 'borderTopWidth')) +
	parseInt(GetStyleProp(el, 'borderBottomWidth')) + 
	parseInt(GetStyleProp(el, 'paddingTop')) + 
	parseInt(GetStyleProp(el, 'paddingBottom')));
}
//-----------------------------------------------------------
function DragElement(el, evt)
{
	evt = NormalizeEvent(evt);
	var x = parseInt(GetStyleProp(el, 'left'));
	var y = parseInt(GetStyleProp(el, 'top'));
	var dx = evt.clientX - x;
	var dy = evt.clientY - y;
	
	SetEventListener(document, "mousemove", DragElementMoveHandler, true);
	SetEventListener(document, "mouseup", DragElementUpHandler, true);
	
	StopEventPropagation(evt);
	
	PreventEventDefault(evt);
	
	function DragElementMoveHandler(evt)
	{
		evt = NormalizeEvent(evt);
		el.style.left = (evt.clientX - dx) + "px";
		el.style.top = (evt.clientY - dy) + "px";
		StopEventPropagation(evt);
	}
	
	function DragElementUpHandler(evt)
	{
		evt = NormalizeEvent(evt);
		UnSetEventListener(document, "mousemove", DragElementMoveHandler, true);
		UnSetEventListener(document, "mouseup", DragElementUpHandler, true);
		StopEventPropagation(evt);
	}
}

//-----------------------------------------------------------
function SetEventListener(el, eventType, handler, captures)
{
	if (el.addEventListener)
		el.addEventListener(eventType, handler, captures);
	else
		el.attachEvent(('on' + eventType), handler);
}

//-----------------------------------------------------------
function UnSetEventListener(el, eventType, handler, captures)
{
	if (el.addEventListener)
		el.removeEventListener(eventType, handler, captures);
	else
		el.detachEvent(('on' + eventType), handler);
}

//-----------------------------------------------------------
function StopEventPropagation(evt)
{
	if (evt.stopPropagation)
		evt.stopPropagation();
	else
		evt.cancelBubble = true;
}

//-----------------------------------------------------------
function PreventEventDefault(evt)
{
	if (evt.preventDefault) 
		evt.preventDefault();
	else
		evt.returnValue = false;
}

//-----------------------------------------------------------
function NormalizeEvent(evt)
{
	return (evt) ? evt : window.event;
}


//----------------------------------------------------------------------------
//   Javascript fix for Safari's inability to link to named anchors 
//   (or ids of elements) inside 
//   elements with overflow: auto set
//  
//   see http://blog.deconcept.com/code/overflowsafari/overflowsafari.html
//   for more information
//  
//   by Geoff Stearns ( geoff @ deconcept.com )
//  
//  
//  Modified by AJM 2008-08-29

// the id of the element with overflow: auto set, in this case the div
//var targBox = "box";

function scrollDivToAnchorInit(targBoxId) 
{
	if (navigator.userAgent.indexOf("Safari") > -1) 
	{
		var targBox = document.getElementById(targBoxId);
		if (document.getElementById) 
		{
		
			// get list of anchor targets in the targBox and make an index.
// 			var batags = targBox.document.getElementsByTagName('A');	
// 			var indx = [];
// 			for (var i=0; i < batags.length; i++)
// 			{	
// 				if (batags[i].name)
// 					indx[batags[i].name] = batags[i];
// 			}
			
			var atags = document.getElementsByTagName("A");
			for (var i=0;i<atags.length;i++) 
			{
				var ca = atags[i];
				//alert(ca.href + ' ' + ca.href.indexOf("#"));
				if (ca.href.indexOf("#") > -1) 
				{
					ca.onclick = function() {
						scrollDivToAnchor(document.getElementById(this.href.split("#")[1]),targBox);
					}
				}
			}
		}
		targBox.scrollTop = 0;
	}
}

//----------------------------------------------------------------------------
function scrollDivToAnchor(a, b) 
{
	b.scrollTop = absPosY(a) - absPosY(b);
}


//----------------------------------------------------------------------------
function absPosY(el)
{
	var p = el.offsetParent;
	var off = el.offsetTop;
	while (p.offsetParent)
	{
		off += p.offsetTop;
		p = p.offsetParent;
	}
	return off;
}

//----------------------------------------------------------------------------
function absPosX(el)
{
	var p = el.offsetParent;
	var off = el.offsetLeft;
	while (p.offsetParent)
	{
		off += p.offsetLeft;
		p = p.offsetParent;
	}
	return off;
}

//----------------------------------------------------------------------------
function SetInnerHTML(el, content)
{
	//el.insertAdjacentHTML('BeforeEnd', content);
	el.innerHTML = content;
// 	var d = document.createElement('div');
// 	d.style.height = '2000px';
// 	d.innerHTML = content;
// 	el.appendChild(d);
}
	
//------------------------------------------------------------------------------



