var isIe = (document.all);
var isGecko = !isIe;

Object.extend(Element, {
  getRect: function(element) {
    var rect = Element.getDimensions(element);
		rect.left = rect.top = 0;
		
		pos = Element.getPosition(element);

		rect.left = pos.left;
		rect.top = pos.top;
		
		return rect;
  },
  
  getPosition: function(element) {
    element = $(element);
		
		var left = 0, top = 0;

		if (element.offsetParent) {
			left = element.offsetLeft;
			top = element.offsetTop;
			
			while (element = element.offsetParent) {
				left += element.offsetLeft;
				top += element.offsetTop;
			}
		}
		
		return {left: left, top: top};
  },
   
  getRelativePosition: function(element) {
    element = $(element);
		
		var left = element.offsetLeft || 0;
		var top = element.offsetTop || 0;

		if (element.offsetParent) {
			//left += element.offsetLeft || 0;
			//top += element.offsetTop || 0;
			
			while (element = element.offsetParent) {
        if(element.tagName=='BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
				
				left += element.offsetLeft || 0;
				top += element.offsetTop || 0;
			}
		}
		
		return {left: left, top: top};
  }
});


Object.extend(window, {
  getDimensions: function() {
		var width=0,height=0;
		
		if (window.innerWidth){
			width = window.innerWidth-16;
			height = window.innerHeight-16;
		}
		else {
			width = document.body.offsetWidth-20;
			height = document.body.offsetHeight-20;
		}
		
		return {width: width, height: height};
  }
});

Object.extend(Element, {

	centerOn: function(element1, element2){
		element1 = $(element1);
		element2 = $(element2);
		
		var rect1 = Element.getRect(element1);
		var rect2 = Element.getRect(element2);
		
		rect1.left = rect2.left - ((rect2.width - rect1.width)/2);
		rect1.top = rect2.top - ((rect2.height - rect1.height)/2);
		
		Element.setPosition(element1, rect1.left, rect1.top);
	},

	centerOnSimple: function(element1, element2){
		Element.centerOnSimple2(element1, element2, null);
	},
		
	centerOnSimple2: function(element1, element2, keepInsideElement){
		element1 = $(element1);
		element2 = $(element2);
			
		var d1 = Element.getDimensions(element1);
		var d2 = Element.getDimensions(element2);
		
		var p2 = Element.getRelativePosition(element2);
		
		var left = p2.left - ((d1.width - d2.width)/2);
		var top = p2.top - ((d1.height - d2.height)/2);
		
			
		if (keepInsideElement != null){
			var dmx = Element.getDimensions(keepInsideElement);

			if (left < 0){
				left = 0;
			}
			else if (left+d1.width > dmx.width) {
				left = dmx.width - d1.width;
			}
			
			
			if (top < 0){
				top = 0;
			}
			else if (top+d1.height > dmx.height) {
				top = dmx.height - d1.height;
			}
		}
		
		Element.setPosition(element1, left, top);
	},
	
	
	setPosition: function(element, left, top){
		var element = $(element);

		if (isGecko){ 
			element.style.left = left+'px';
			element.style.top = top+'px';
	  }
		else if (isIe){
			element.style.left = left;
			element.style.top = top;
		}
	},
	
	setSize: function(element, width, height){
		var element = $(element);

		if (isGecko){ 
			element.style.width = width+'px';
			element.style.height = height+'px';
	  }
		else if (isIe){
			element.style.width = width;
			element.style.height = height;
		}
	}
});


function trim(value){
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   var obj = /  /g;
   while (temp.match(obj)) { temp = temp.replace(obj, " "); }
   return temp;
}

var loaded_libraries = {};

function require(libraryName) {
	if (loaded_libraries[libraryName] == null){
  	document.write('<script type="text/javascript" src="'+libraryName+'" onerror="alert(\'Error loading \' + this.src);"></script>');
  	loaded_libraries[libraryName] = 1;
  }
}


function ShowHelpTip(anchor, helpId){
	Element.show(helpId);
  
  Event.observe(anchor, 'mouseout', function() {
  	Element.hide(helpId);
  });
}