/* Duplicates of Prototype for main site */
var PythonEvent = {
	"observe" : function(element, eventName, handler) {
		if (element.addEventListener) {
      element.addEventListener(eventName, handler, false);
    } else if (element.attachEvent) {
      element.attachEvent("on" + eventName, handler);
    }
	},
	"stop" : function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
	},
	"element" : function(event) {
    return event.target || event.srcElement;
  },
  "fromElement" : function(event) {
		return event.toElement || event.relatedTarget;
  },
  "toElement" : function(event) {
		return event.fromElement || event.relatedTarget;
  },
  "isMouseLeave" : function(event) {
		// To be called when responding to mouse out calls, returns whether this was a bubbled up mouseout from an inner division
		var tg = PythonEvent.element(event);
		var reltg = PythonEvent.toElement(event);
		while (reltg != tg && reltg.nodeName != 'BODY')
		{
			reltg = reltg.parentNode;
			if (tg == reltg)
				return false;
		}
		return true;
  },
  "isMouseEnter" : function(event) {
		// To be called when responding to mouse over calls, returns whether this was bubbled up mouseover from an inner division
		var tg = PythonEvent.element(event);
		var reltg = PythonEvent.fromElement(event);
		while (reltg != tg && reltg.nodeName != 'BODY')
		{
			reltg = reltg.parentNode;
			if (tg == reltg)
				return false;
		}
		return true;
  }
}

var PythonWindow = {
	"viewportHeight" : function() { 
    var height = 0;
    if (window.innerHeight) {
			height = window.innerHeight;
    }
    else if (document.documentElement) {
			height = document.documentElement.clientHeight;
    }
    else {
			height = document.body.clientHeight;
    }
    
    return height;
	},
	
	/*
	 * How far we're scrolled down the viewport
   */
	"scrollPosition" : function() {
    var scrollY, scrollX;
    
		if (self.pageYOffset) {
			scrollX = self.pageXOffset;
			scrollY = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop) {
			scrollX = document.documentElement.scrollLeft;
			scrollY = document.documentElement.scrollTop;
		}
		else if (document.body) {
			scrollX = document.body.scrollLeft;
			scrollY = document.body.scrollTop;
		}	
		
		return [scrollX, scrollY];
	}
}

var PythonElement = {
	"get" : function(id) {
		var element =  document.getElementById(id);

		if (element.id != id) {
			var elements = document.all[id];
			for (var i=0; i < elements.length; i++) {
				if (elements[i].id == id) {
					element = elements[i];
					break;
				}
			}
		}
		return element;
	},
	"getStyle" : function (element, property) {
		if (document.defaultView && document.defaultView.getComputedStyle) {
    	return document.defaultView.getComputedStyle(element, null)[property];
  	} 
  	else if (element.currentStyle) {
    	return element.currentStyle[property];
  	} 
  	else {
    	return element.style[property];
  	}
	},
	"getPageOffsetTop" : function(element) {
		var curTop = element.offsetTop; 
		while(element.offsetParent) 
		{
			curTop = curTop + (element.offsetParent.offsetTop); 
			element = element.offsetParent; 
		} 
		return curTop;
	},
	"getPageOffsetLeft" : function(element) {
		var curleft = element.offsetLeft; 

		while(element.offsetParent) 
		{
			curleft = curleft + (element.offsetParent.offsetLeft); 
			element = element.offsetParent; 
		} 
		return curleft; 
	}
	
}
