function Browser() {}

Browser.agent = navigator.userAgent.toLowerCase();
Browser.appVer = navigator.appVersion.toLowerCase();

var agt = Browser.agent;

Browser.is_ie	  = ((Browser.agent.indexOf("msie") != -1) && (Browser.agent.indexOf("opera") == -1));
Browser.is_opera  = (Browser.agent.indexOf("opera") != -1);
Browser.is_mac	  = (Browser.agent.indexOf("mac") != -1);
Browser.is_mac_ie = (Browser.is_ie && Browser.is_mac);
Browser.is_win_ie = (Browser.is_ie && !Browser.is_mac);
Browser.is_gecko  = (navigator.product == "Gecko");

Browser.is_minor = parseFloat(Browser.appVer);
Browser.is_major = parseInt(Browser.is_minor);

Browser.is_opera = (agt.indexOf("opera") != -1);
Browser.is_opera7 = (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1);

var iePos  = Browser.appVer.indexOf('msie');
if (iePos !=-1) {
	Browser.is_minor = parseFloat(Browser.appVer.substring(iePos + 5,Browser.appVer.indexOf(';',iePos)));
	Browser.is_major = parseInt(Browser.is_minor);
}

Browser.is_khtml  = (Browser.is_safari || Browser.is_konq);

Browser.is_gecko = ((!Browser.is_khtml)&&(navigator.product)&&(navigator.product.toLowerCase()=="gecko")) ? true : false;
Browser.is_gver = 0;
if (Browser.is_gecko) Browser.is_gver = navigator.productSub;

Browser.is_moz   = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                    (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                    (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                    (Browser.is_gecko) && 
                    ((navigator.vendor=="") || (navigator.vendor=="Mozilla")));

if (Browser.is_moz) {
	Browser.is_moz_ver = (navigator.vendorSub) ? navigator.vendorSub : 0;
	if(!(Browser.is_moz_ver)) {
		Browser.is_moz_ver = agt.indexOf('rv:');
		Browser.is_moz_ver = agt.substring(Browser.is_moz_ver + 3);
		Browser.is_paren   = Browser.is_moz_ver.indexOf(')');
		Browser.is_moz_ver = Browser.is_moz_ver.substring(0, Browser.is_paren);
	}
	Browser.is_minor = Browser.is_moz_ver;
	Browser.is_major = parseInt(Browser.is_moz_ver);
}
Browser.is_konq = false;
var kqPos = agt.indexOf('konqueror');
if (kqPos !=-1) {                 
	 Browser.is_konq  = true;
	 Browser.is_minor = parseFloat(agt.substring(kqPos + 10,agt.indexOf(';',kqPos)));
	 Browser.is_major = parseInt(Browser.is_minor);
}   

Browser.is_ie   = ((iePos!=-1) && (!Browser.is_opera) && (!Browser.is_khtml));
Browser.is_ie3  = (Browser.is_ie && (Browser.is_major < 4));

Browser.is_ie4   = (Browser.is_ie && Browser.is_major == 4);
Browser.is_ie4up = (Browser.is_ie && Browser.is_minor >= 4);
Browser.is_ie5   = (Browser.is_ie && Browser.is_major == 5);
Browser.is_ie5up = (Browser.is_ie && Browser.is_minor >= 5);
    
Browser.is_ie5_5  = (Browser.is_ie && (agt.indexOf("msie 5.5") !=-1));
Browser.is_ie5_5up =(Browser.is_ie && Browser.is_minor >= 5.5);

Browser.is_ie6   = (Browser.is_ie && Browser.is_major == 6);
Browser.is_ie6up = (Browser.is_ie && Browser.is_minor >= 6);

Browser.stopEvent = function(ev) {
	ev || (ev = window.event);
	if (Browser.is_ie) {
		ev.cancelBubble = true;
		ev.returnValue = false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

Browser.addEvent = function(el, evname, func) {
	if (el.attachEvent) {
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { 
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
};

Browser.removeEvent = function(el, evname, func) {
	if (el.detachEvent) {
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) {
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

Browser.behaveAsButton = function(el) {
	Browser.addEvent(el, "mousedown", Browser.stopEvent);
	if (Browser.is_ie) {
		el.setAttribute("unselectable", true);
	}
};

browser = new Browser();

Browser.addClass = function(el, sClassName) {
	if (!(el && el.className)) {
		return;
	}
	var s = el.className;
	var newClasses = s.split(" ");
	for (var i = 0; i < newClasses.length; i++) {
		if (newClasses[i] == sClassName) {
			return false;
		}
	}
	newClasses.push(sClassName);
	el.className = newClasses.join(" ");
	return true;
}

Browser.removeClass = function(el, sClassName) {
	if (!(el && sClassName)) {
		return false;
	} 
	if (!el.className) {
		return true;
	}
	var s = el.className;
	var oldClasses = s.split(" ");
	var newClasses = new Array();
	for (var i = 0; i < oldClasses.length; i++) {
		if (oldClasses[i] != sClassName) {
			newClasses.push(p[i]);
		}
	}
	el.className = newClasses.join(" ");
	return true;
}

if (Browser.is_ie4) {
	document.getElementById = function(sId) {
		return document.all[sId];
	}
}

Browser.getEventSource = function(oElement) {
    var target;
    if (Browser.is_ie) {
        var event = window.event;
        target = event.srcElement
    } else {
        target = oElement;
    }
	return target;
}

Browser.getOffsetLeft = function(oElement) {
	if (typeof oElement == "object") {
		 if (oElement.offsetParent != null) {
			return oElement.offsetLeft + Browser.getOffsetLeft(oElement.offsetParent);
		} else {
			return oElement.offsetLeft;
		}
	} else {
		return 0;
	}
}

Browser.getOffsetTop = function(oElement) {
	if (typeof oElement == "object") {
		 if (oElement.offsetParent != null) {
			return oElement.offsetTop + Browser.getOffsetTop(oElement.offsetParent);
		} else {
			return oElement.offsetTop;
		}
	} else {
		return 0;
	}
}

Browser.makeCompatible = function(oElement) {
    if (!Browser.is_ie || Browser.is_ie5up) {
		return;
	}
	oElement.attachEvent = function(sEvent, fFunction) {
        this[sEvent] = fFunction;
    }
}
