//  Sniff.js
//  Version 2.1
// Modified by John Bell to include browser sniffing and branching utilities

function sniff(){
	var exclude=1;
	var agt=navigator.userAgent.toLowerCase();
	var win=0;var mac=0;var lin=1;
	if(agt.indexOf('win')!=-1){win=1;lin=0;}
	if(agt.indexOf('mac')!=-1){mac=1;lin=0;}
	var lnx=0;if(lin){lnx=1;}
	var ice=0;
	var ie=0;var ie4=0;var ie5=0;var ie6=0;var com=0;var dcm;
	var op5=0;var op6=0;var op7=0;
	var ns4=0;var ns6=0;var ns7=0;var mz7=0;var kde=0;var saf=0;
	if(typeof navigator.vendor!="undefined" && navigator.vendor=="KDE"){
		var thisKDE=agt;
		var splitKDE=thisKDE.split("konqueror/");
		var aKDE=splitKDE[1].split("; ");
		var KDEn=parseFloat(aKDE[0]);
		if(KDEn>=2.2){
			kde=1;
			ns6=1;
			exclude=0;
			}
		}
	else if(agt.indexOf('webtv')!=-1){exclude=1;}
	else if(typeof window.opera!="undefined"){
		exclude=0;
		if(agt.indexOf("opera/5")!=-1||agt.indexOf("opera 5")!=-1){op5=1;}
		if(agt.indexOf("opera/6")!=-1||agt.indexOf("opera 6")!=-1){op6=1;}
		if(agt.indexOf("opera/7")!=-1||agt.indexOf("opera 7")!=-1){op7=1;}
		}
	else if(typeof document.all!="undefined"&&!kde){
		exclude=0;
		ie=1;
		if(typeof document.getElementById!="undefined"){
			ie5=1;
			if(agt.indexOf("msie 6")!=-1){
				ie6=1;
				dcm=document.compatMode;
				if(dcm!="BackCompat"){com=1;}
				}
			}
		else{ie4=1;}
		}
	else if(typeof document.getElementById!="undefined"){
		exclude=0;
		if(agt.indexOf("netscape/6")!=-1||agt.indexOf("netscape6")!=-1){ns6=1;}
		else if(agt.indexOf("netscape/7")!=-1||agt.indexOf("netscape7")!=-1){ns6=1;ns7=1;}
		else if(agt.indexOf("gecko")!=-1){ns6=1;mz7=1;}
		if(agt.indexOf("safari")!=-1 || (typeof document.childNodes!="undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined")){mz7=0;ns6=1;saf=1;}
		}
	else if((agt.indexOf('mozilla')!=-1)&&(parseInt(navigator.appVersion)>=4)){
		exclude=0;
		ns4=1;
		if(typeof navigator.mimeTypes['*']=="undefined"){
			exclude=1;
			ns4=0;
			}
		}
	if(agt.indexOf('escape')!=-1){exclude=1;ns4=0;}
	if(typeof navigator.__ice_version!="undefined"){exclude=1;ie4=0;}
	
	return {exclude:exclude,win:win,mac:mac,lin:lin,ice:ice,ie:ie,ie4:ie4,ie5:ie5,ie6:ie6,com:com,dcm:dcm,op5:op5,op6:op6,op7:op7,ns4:ns4,ns6:ns6,ns7:ns7,mz7:mz7,kde:kde,saf:saf};
}

browsers = sniff();

browsers.addEventListener = function(eventName, object, eventFunction, bubble){
	if(browsers.ie){
		object.attachEvent("on"+eventName, eventFunction);
	} else {
		object.addEventListener(eventName, eventFunction, bubble);
	}
}

browsers.removeEventListener = function(eventName, object, eventFunction, bubble){
	if(browsers.ie){
		object.detachEvent("on"+eventName, eventFunction);
	} else {
		object.removeEventListener(eventName, eventFunction, bubble);
	}
}

browsers.mousePosition = function(e){
	if(browsers.ns6==1){
		var x = e.pageX;
		var y = e.pageY;
	}
	if(browsers.ie5==1){
		var x = event.clientX + document.body.scrollLeft;
		var y = event.clientY + document.body.scrollTop;
	}
	return {x:x, y:y};
}

browsers.stopBubbling = function(e){
	if(browsers.ie){
		window.event.cancelBubble = true;
	} else {
		e.stopPropagation();
	}
}

browsers.calculatedStyle = function(divName, propertyName){
	if(browsers.ns6==1){
        if (propertyName == "visibility") {
	    	var propertyValue = document.getElementById(divName).style.visibility;
	    	return (propertyValue == "") ? "inherit" : propertyValue;
		}
		if (propertyName == "clip") {
	    	var propertyValue = document.getElementById(divName).style.clip;
	    	if (propertyValue == "") {
				return {top:0, right: browsers.calculatedStyle(divName, "width"), bottom: browsers.calculatedStyle(divName, "height"), left: 0};
			}
			return propertyValue;
		}
		if (propertyName == "zIndex") {
	    	propertyValue = document.getElementById(divName).style.zIndex;
	    	return (propertyValue == "") ? "inherit" : propertyValue;
		}
		var propertyValue = document.defaultView.getComputedStyle(document.getElementById(divName), "").getPropertyValue(propertyName);
		return (propertyValue == "") ? FALSE : propertyValue;
    }
	if(browsers.ie5==1){
		if (propertyName == "width") return eval("document.getElementById('"+divName+"').offsetWidth");
		if (propertyName == "height") return eval("document.getElementById('"+divName+"').offsetHeight");
		if (propertyName == "top") return eval("document.getElementById('"+divName+"').offsetTop");
		if (propertyName == "left") return eval("document.getElementById('"+divName+"').offsetLeft");
		if (propertyName == "clip") {
	    	var propertyValue = eval("document.getElementById('"+divName+"').style.clip");
			if (propertyValue == "") {
				return {top:0, right: browsers.calculatedStyle(divName, "width"), bottom: browsers.calculatedStyle(divName, "height"), left: 0};
	    	}
			return propertyValue;
		}
		var propertyValue = eval("document.getElementById('"+divName+"').currentStyle."+propertyName);
		return (propertyValue == "") ? FALSE : propertyValue;
    }
}

