// JavaScript Document

function switchBackgroundImage( element, newBackgroundImage ) {
	element.style.backgroundImage = "url(" + newBackgroundImage + ")";
}

function disableTextSelect( element ) {
	element.onselectstart = function() { return false; };
	element.style.MozUserSelect = "none";
}

//a function that determines whether a block element contains
//the point specified  by px and py in coordinate space
function containsPoint( element, px, py, biasLeft, biasTop, biasRight, biasBottom ) {
	var elAbs  = getAbsolutePosition( element );
	var elWidth = element.offsetWidth;
	var elHeight = element.offsetHeight;
	
	if( !elAbs || !elWidth || !elHeight ) {
		return false;
	}
	
	biasLeft = biasLeft ? biasLeft : 0;
	biasTop = biasTop ? biasTop : 0;
	biasRight = biasRight ? biasRight : 0;
	biasBottom = biasBottom ? biasBottom : 0;
	
	return ( px >= elAbs.x + biasLeft && 
			px <= ( elWidth + elAbs.x - 1 + biasTop ) && 
			py >= elAbs.y + biasTop && 
			py <= ( elHeight + elAbs.y - 1 + biasBottom ) );
}

function getAbsolutePosition( element ) {
	if( !element ) return null;
	
	var posx = 0;
	var posy = 0;
	while( element ) {
		posx += element.offsetLeft;
		posy += element.offsetTop;
		element = element.offsetParent;
	}
	
	return {x:posx, y:posy};
}

function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  
  return {w:myWidth, h:myHeight};
}

function dragElem( elemId, event ) {
	elem = $( elemId );
	if( elem )
		drag( elem, event );
}

function drag( elementToDrag, event ) {
	var startX = event.clientX, startY = event.clientY;
	var origX = elementToDrag.offsetLeft, origY = elementToDrag.offsetTop;
	
	var deltaX = startX - origX, deltaY = startY - origY;
	
	if( document.addEventListener ) {
		document.addEventListener( "mousemove", moveHandler, true );
		document.addEventListener( "mouseup", upHandler, true );
	}
	else if( window.attachEvent ) {
		elementToDrag.setCapture();
		elementToDrag.attachEvent( "onmousemove", moveHandler );
		elementToDrag.attachEvent( "onmouseup", upHandler );
		elementToDrag.attachEvent( "onlosecapture", upHandler );
	}
	else {
		var oldmovehandler = document.onmousemove;
		var olduphandler = document.onmouseup;
		document.onmousemove = moveHandler;
		document.onmouseup = upHandler;
	}
	
	if( event.stopPropagation ) event.stopPropagation();
	else event.cancelBubble = true;
	
	if( event.preventDefault ) event.preventDefault();
	else event.returnValue = false;
	
	function moveHandler(e) {
		if(!e) e = document.event;
		
		elementToDrag.style.left = (e.clientX - deltaX) + "px";
		elementToDrag.style.top = (e.clientY - deltaY) + "px";
		
		if(e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}
	
	function upHandler(e) {
		if(!e) e = window.event;
		
		if( document.removeEventListener) {
			document.removeEventListener( "mousemove", moveHandler, true );
			document.removeEventListener( "mouseup", upHandler, true );
		}
		else if( document.detachEvent ) {
			elementToDrag.detachEvent( "onclosecapture", upHandler );
			elementToDrag.detachEvent( "onmouseup", upHandler );
			elementToDrag.detachEvent( "onmousemove", moveHandler );
			elementToDrag.releaseCapture();
		}
		else {
			document.onmouseup = olduphandler;
			document.onmousemove = oldmovehandler;
		}
		
		if(e.stopPropagation) e.stopPropagation(); 
		else e.cancelBubble = true;
	}
}