function returnObject(reference) {
  if(reference != undefined) {
    if (reference.id || typeof(reference) == 'object') {
      return reference;
    } else {
      return document.getElementById(reference);   
    } 
  } else {
      alert("returnObject: Missing Parameter 1 or null");
      return false;
  }
}

function returnEvent(event) {
  if (event == undefined) {
    return window.event;
  } else {
    return event;    
  }
}

function alertEventVars(event) {
 // return an array containing event parameters. 
	event = returnEvent(event);
	// Finish this
    alert('Event Type: ' + event.type);
	return false;
}

function elementSize(obj) {
  obj = returnObject(obj);
  var size = new Array();
  size[0] = obj.offsetWidth;
  size[1] = obj.offsetHeight;
  return size;
}

function elementCssPosition(obj) {
	alert('HIHO!');
	obj = returnObject(obj);
	pos = new Array();
	pos[0] = $(obj).css('left');
	pos[1] = $(obj).css('top');
	if(pos[0].indexOf('px')) {
		pos[0].replace('px','');
		pos[0].valueOf();
	}
}

function elementPosition(obj) {
  // Returns the position of any element 
  obj = returnObject(obj);
  var curleft = 0;
  var curtop = 0;
	if (obj) {
	  if (obj.offsetParent) {
		  do {
		  	if(obj.offsetLeft != undefined && obj.offsetLeft != NaN && obj.offsetLeft) {
		  	  curleft += obj.offsetLeft;
		  	}
		  	if(obj.offsetTop != undefined && obj.offsetTop != NaN && obj.offsetTop) {
			  curtop += obj.offsetTop;
		  	}
		  } while (obj = obj.offsetParent);
	  } else if (obj.offsetLeft != undefined) {
		  	  curleft = obj.offsetLeft;
			  curtop = obj.offsetTop;
	  } else {
	  	return elementCssPosition(obj);
	  }
	var result = new Array();
	result[0] = curleft;
	result[1] = curtop;
	return result;
	}
	else { 
		//alert("elementPosition(): Missing First Argument"); 
	}
}


function setPosition(obj,xy) {
  obj = returnObject(obj);
  obj.style.left = xy[0];
  obj.style.top = xy[1];
  return true;
}

function setSize(obj,xy) {
 obj = returnObject(obj);
 if(xy[0] != false) {
   obj.style.width = xy[0];
 } 
 if(xy[1]  != false) {
   obj.style.height = xy[1];
 }
 return true;
}

function elementOffset(obj1,obj2) {
  // Finds the XY offset of two elements.
  obj1 = returnObject(obj1);
  obj2 = returnObject(obj2);
  obj1 = elementSize(obj1);
  obj2 = elementSize(obj2);
  return sizeOffset(obj1,obj2);
}

function mouseOffset(event,obj) {
  obj = returnObject(obj);
  event = returnEvent(event);
  pos1 = mousePosition(event);
  pos2 = elementPosition(obj);
  return sizeOffset(pos2,pos1);
  // returns the mouse offset
}

function mouseDocumentOffset(event) {
  event = returnEvent(event);
  mouse = mousePosition(event);
  return sizeOffset(documentSize,mouse);
}

function elementDocumentOffset(obj) {
  obj = returnObject(obj);
  pos1 = elementPosition(obj);
  return sizeOffset(documentSize,pos1);
}

function mousePosition(event) {
    var event = returnEvent(event);
    var mouseXy = new Array();
	mouseXy[0] = 0;
	mouseXy[1] = 0;
	if (event.pageX || event.pageY) {
		mouseXy[0] = event.pageX;
		mouseXy[1] = event.pageY;
    return mouseXy;
	}
	else if (event.clientX || event.clientY) {
    scrollXy = scrollOffset();
    mouseXy[0] = event.clientX + scrollXy[0];
    mouseXy[1] = event.clientY + scrollXy[1];
	}
}

function sizeOffset(xy1,xy2) {
  // Returns the offset of xy1 - xy2!
  offset = new Array();
  offset[0] = 0;
  offset[1] = 0;
  if((xy1 != null) && (xy2 != null)) {
    offset[0] = xy1[0] - xy2[0];
    offset[1] = xy1[1] - xy2[1];
    return offset;
  } else {
   return false;   
  }    
}

function sizeOffsetCenter(xy1,xy2) {
  // Returns the offset of 1/2(xy1) - 1/2(xy2)!
  offset = new Array();
  offset[0] = 0;
  offset[1] = 0;
  if((xy1 != null) && (xy2 != null)) {
    offset[0] = (xy1[0] / 2) - (xy2[0] /2);
    offset[1] = (xy1[1] / 2) - (xy2[1] /2);
    return offset;
  } else {
   return false;   
  }  
}





function documentSize() {
 // Returns the inner dimensions of the document.
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    document[0] = window.innerWidth;
    document[1] = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    documentWidth = document.documentElement.clientWidth;
    documentHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    documentWidth = document.body.clientWidth;
    documentHeight = document.body.clientHeight;
  return[documentWidth,documentHeight];
  }
}


function scrollPosition() {
  scrollXy[0] = 0;
  scrollXy[1] = 0;
  if (self.pageYOffset) {  // Not IE
	  scrollXy[0] = self.pageXOffset;
	  scrollXy[1] = self.pageYOffset;
  }
  else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
	  scrollXy[0] = document.documentElement.scrollLeft;
	  scrollXy[1] = document.documentElement.scrollTop;
  }
  else if (document.body) { // Other Explorer
	  scrollXy[0] = document.body.scrollLeft;
	  scrollXy[1] = document.body.scrollTop;
  } else {
   return false;
  }
  return scrollXy;
}

function returnEventObject(event) {
  event = returnEvent(event);
  // In the event object 'target' is the object that is being moused over while 'currentTarget' is the element that had an event listener attached to it! - you usually want currentTarget!!!!!!!!!
  if (event.currentTarget) { 
    object = event.currentTarget; 
  } else if (event.srcElement) { 
    object = event.srcElement; 
  } else if (event.target) {
  	object = event.target;
  }
  return object;
}

function debug(event) {
  if(debug) {
    var scroll = scrollPosition();
    var selected = returnSelected(event);
    var elementSize = elementSize(selected);
    var elementPos = elementPosition(selected);
    var mouseOffset = mouseOffset(event, selected);
    var mousePos = mousePosition(event);
    var docSize = documentSize();
    alert("DOCUMENT XY: (" + docSize[0] + ")" + " (" + docSize[1] + "\n" +
		  "SCROLL XY: (" + scroll[0] + ")" + " (" + scroll[1] + "\n" +
		  "MOUSE XY: (" + mousePos[0] + ")" + " (" + mousePos[1] + "\n" +
		  "MOUSE Offset XY: (" + mouseOffset[0] + ")" + " (" + mouseOffset[1] + "\n" +
		  "ELEMENT: (" + selected.id + ")" + "\n" +
		  "ELEMENT SIZE: (" + elementSize[0] + ")" + " (" + elementSize[1] + "\n" +
		  "ELEMENT XY: (" + elementPos[0] + ")" + " (" + elementPos[1] + "\n"
		 )
  }
}