(function(){
/**
 * Copyright (c) 2007 Proximity
 *
 */
var Proximity = window.Proximity = function() {};
var userAgent = navigator.userAgent.toLowerCase();
Proximity.prototype = {
	agent : userAgent,
	browser : {
		version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
		safari: /webkit/.test(userAgent),
		opera: /opera/.test(userAgent),
		netscape: /netscape/.test(userAgent),
		msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
		mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
	},
	getTags : function(oNode,sTag,bImmediate) {
		if(typeof oNode == "object") {
			var tags = oNode.getElementsByTagName(sTag) || [];
			var x = [];
			if(!bImmediate) return tags;
			else{
				for(var i=0,j=tags.length;i<j;i++)
					tags[i].parentNode == oNode ? x.push(tags[i]) : null;
				return x;
			}
		}  
	},
	getID : function(sID) {
		x = document; 
		return x.getElementById(sID) ? x.getElementById(sID) : x.all? x.all(sID) : null;
	},
	getClass : function(oNode,sClassName) {
		var a = [];
		var re = new RegExp('\\b' + sClassName + '\\b');
		var els = this.getTags(oNode,"*");
		for(var i = 0,j = els.length; i < j; i++)
		if(re.test(els[i].className))a.push(els[i]);
		return a;
	},
	addClass : function(oNode,sClassName) {
		if(typeof oNode == "object" && !this.getClass(oNode,sClassName)[0]) {
			oNode.className += (" " + sClassName);
		} 
	},
	removeClass : function(oNode,sClassName) {
		if(typeof oNode == "object") {
			oNode.className = oNode.className.replace(sClassName,"");
		}
	},
	assignFirstChild : function() {
		if(this.browser.msie){
			var ULs = this.getTags(document,"UL");
			for(var i=0,j=ULs.length;i<j;i++)
				this.addClass(this.getTags(ULs[i],"LI")[0],"FirstChild");
		}
	},
	assignLastChild : function() {
		if(this.browser.msie || this.browser.opera){
			var ULs = this.getTags(document,"UL");
			for(var i=0,j=ULs.length;i<j;i++){
				var LIs = this.getTags(ULs[i],"LI",true);
				this.addClass(LIs[LIs.length-1],"LastChild");}}
	},
	popUp : function(sURL,oSpecs,sName) {
		var x = oSpecs;
		var options = "";
		if(!x['left'] && x['width']) options += "left=" + (screen.width - x['width'])/2 +",";
		if(!x['top'] && x['height']) options += "top=" + (screen.height - x['height'])/2 +",";
		for(var y in x)
			options += (y+"="+ x[y] +",");
		var newWin = window.open(sURL,sName ? sName : "",options);
		
		return false;
	},
	externalLinks : function() {
		var links = this.getTags(document,"A");
		for(var i=0,j=links.length;i<j;i++)
			if(/external/.test(links[i].rel)) links[i].target = "_blank"; 
	},
	
	handlers : [],
	registerHandlers : function() {
		this.handlers = arguments;
	},
	executeHandlers : function() {
		var y = this.handlers;
		for(var i=0; i<y.length; i++){
			y[i]();
		}
	}
}

window.ip$ = new Proximity;
})();
