var sniffer = {
	//get browser
	'browser' : function(){
		var browserPass=false;
		var browserName, browserVer;
		//workaround for bad Safari 1x,2x browser detection
		if ($.browser.safari && ($.browser.version < 500) ) {
			browserName = "Safari";
			if ($.browser.version >= 400) {
				browserVer = "2.x";
				browserPass = false;
			} else if($.browser.version >= 3.0 && $.browser.version < 5.0) {
				browserVer = "3.x";
				browserPass = true;
			} else {
				browserVer = "1.x"
			}
		
		} else {
		
			browserName = $.browser.name;
			browserVer = $.browser.version == 0 ? "" : $.browser.version;
			var tail = browserVer.slice(browserVer.indexOf(".")+1);
			tail = tail.replace(/\./g,"x");
			browserNum = parseFloat(browserVer.slice(0,browserVer.indexOf(".")+1)+tail);
	
			browserPass = ( browserName == "msie" && browserNum >= 6 ) || ( browserName == "safari" && browserNum >= 3.00 ) || ( browserName == "firefox" && browserNum >= 3 );
			
			//additional detect for AOL
			var ua = navigator.userAgent;
			if (ua.indexOf('AOL') > -1) {
				browserPass = false;
				browserName = "AOL";
				browserVer = "";
			}
			
			if (browserName == 'msie') {
				browserName = "Internet Explorer";
			} else if (browserName == 'netscape') {
				browserName = "Netscape Navigator";
			} else if (browserName != 'icab' || browserName != 'iphone') {
				browserName = browserName.replace(/^./, browserName.match(/^./)[0].toUpperCase());
			}
		
		}
		return {
			pass : browserPass,
			info : browserName + " " + browserVer
		}
	},
	
	//test cookies
	'cookie' : function(){
		var cookiePass = false;
		$.cookie("sniffer","foo");
		if ($.cookie("sniffer")){
			cookiePass = true;
		}
		$.cookie("sniffer",null);
		return {
			pass : cookiePass
		}
	},
	
	//test flash
	'flash' : function(){
		var flashPass = false;
		var playerVersion = swfobject.getFlashPlayerVersion();
		flashPass = (playerVersion.major >= 9);
		var flashVer = playerVersion.major + "." + playerVersion.minor + "." + playerVersion.release;
		return {
			pass : flashPass,
			info : flashVer
		}
	},
	
	//test java
	'java' : function(){
		var javaPass = false;
		javaPass = ( PluginDetect.isMinVersion('Java','1.4.2.15') >= 0 );
		var javaVer = PluginDetect.getVersion('Java');
		//javaPass = navigator.javaEnabled();
		javaVer = (javaVer != null) ? javaVer.replace(/,/g,".") : ""

		return {
			pass : javaPass,
			info : javaVer
		}
	},
	
	//test OS
	'OS' : function(){
		var OSPass = false;
		var ua = navigator.userAgent;
		if (ua.indexOf('Windows NT 6.0') > -1) {
			OSPass = true;
			thisOS = "Windows Vista";
		} else if (ua.indexOf('Windows NT 5.2') > -1) {
			OSPass = true;
			thisOS = "Windows Server 2003 or Windows XP x64 Edition";
		} else if (ua.indexOf('Windows NT 5.1') > -1) {
			OSPass = true;
			thisOS = "Windows XP";
		} else if (ua.indexOf('Windows NT 5.01') > -1) {
			thisOS = "Windows 2000, Service Pack 1";
		} else if (ua.indexOf('Windows NT 5.0') > -1) {
			thisOS = "Windows 2000";
		} else if (ua.indexOf('Windows NT 4.0') > -1) {
			thisOS = "Windows NT 4.0";
		} else if (ua.indexOf('Win 9x 4.90') > -1) {
			thisOS = "Windows Me";
		} else if (ua.indexOf('Windows 98') > -1) {
			thisOS = "Windows 98";
		} else if (ua.indexOf('Windows 95') > -1) {
			thisOS = "Windows 95";
		} else if (ua.indexOf('Windows CE') > -1) {
			thisOS = "Windows CE";
		} else if (ua.indexOf('Mac OS X') > -1) {
			var macVer = ua.slice(ua.indexOf('Mac OS X')+8);
			macVer = macVer.slice(0,macVer.indexOf(';'));
			macVer = macVer.replace(/_/g,'.');
			
			OSPass = true;
			thisOS = macVer.length > 2 ? "Macintosh OS X " + macVer : "Macintosh OS X";
		} else if (ua.indexOf('Linux') > -1) {
			thisOS = "Linux";
		} else if (ua.indexOf('Unix') > -1) {
			thisOS = "Unix";
		} else {
			thisOS = "Unsupported Operating System";
		}
		
		return {
			pass : OSPass,
			info : thisOS
		}
	},
	
	//test popups
	'popup' : function(){
		var popupPass=false;
		var testPop = window.open("about:blank","","width=100,height=100");
		try {
			testPop.close();
			popupPass=true;
		}
		catch (e) {}
		return {
			pass : popupPass
		}
	},
	
	//text screen
	'screen' : function(){
		var sW = screen.width;
		var sH = screen.height;
		var screenInfo = sW + " x " + sH + " pixels"
		var screenPass = (sW >= 1024 && sH >=768);
		return {
			pass : screenPass,
			w : sW,
			h : sH,
			info : screenInfo
		}
	}
	
}

function fullSniff (idArr) {
	$("table.snifferResults tr").removeClass("warning");
	var primaryFail, secondaryFail = false;
	for (var i=0;i<idArr.length;i++) {
		var currSniff = idArr[i];
		var sniffResult = sniffer[currSniff]();
		var statusHTML;
		var $info = $("#" + currSniff + "Result td.sniffReturn");
		
		if (typeof sniffResult.info != 'undefined'){
			$("#" + currSniff + "Result td.sniffReturn").html(sniffResult.info);
		}
		
		if (sniffResult.pass) {
			statusHTML = "<span class='sniffPass'>Yes</span>";
			switch(currSniff) {
				case 'browser' :
					if (sniffResult.info.match(/Safari/)) {
						$(".ieHelp, .ffHelp").hide();
					}
					if (sniffResult.info.match(/Explorer/)) {
						$(".saHelp, .ffHelp").hide();
					}
					if (sniffResult.info.match(/Firefox/)) {
						$(".saHelp, .ieHelp").hide();
					}
					break;
				case 'cookie' :
					$info.html("Cookies accepted");
					break;
				case 'popup' :
					$info.html("Pop-up windows allowed");
					break;
				case 'flash' :
					$info.html("Installed (Version " + sniffResult.info + ")");
					break;
				case 'java' :
					if (sniffResult.info.length > 0) {
						$info.html("Installed (Version " + sniffResult.info + ")");
					}
					else {
						$info.html("Installed");
					}
					break;
				case 'OS' :
					if (sniffResult.info.match(/Mac/)) {
						$("li.ieLink").hide();
					}
					break;
				case 'screen' :
					$info.html(sniffResult.w + " x " + sniffResult.h + " pixels");
					break;
			}
		}
		else {
			statusHTML = "<span class='sniffFail'>No <a href='#" + currSniff + "Help'>More info</a></span>";
			$("#" + currSniff + "Result").addClass("warning");
			$("#" + currSniff + "Help").css("display","block");
			switch(currSniff) {
				case 'browser' :
					primaryFail = true;
					break;
				case 'cookie' :
					$info.html("Does not allow cookies");
					primaryFail = true;
					break;
				case 'popup' :
					$info.html("Pop-up windows disabled");
					break;
				case 'flash' :
					$info.html("Not installed");
					break;
				case 'java' :
					$info.html("Not installed");
					break;
			}
			secondaryFail = true;
		}
		$("#" + currSniff + "Result td.sniffStatus").html(statusHTML);
	}
	//notification
	$("#sniffNotify").css("display","block");
	if (primaryFail) {
		$("#sniffNotify").html("<h5>Your computer needs to be adjusted to use this site.</h5><p>Click More Info below to address the problems. In a lab? Get help from an administrator.</p>").addClass("notifyFail");
	} else if (secondaryFail) {
		$("#sniffNotify").html("<h5>You can still use this site, but some features may not work correctly.</h5><p>Click More Info below to address the problems. In a lab? Get help from an administrator.</p>").addClass("notifyWarn");
	} else  {
		$("#sniffNotify").html("<h5>Your computer is fully compatible.</h5><p>You can use this site without any changes.</p>").addClass("notifyPass");
	}
	
	//add curvy corners for r3a
	if ($("#sniffNotify .notifyInner").length < 1) {
		$("#sniffNotify").wrapInner("<div class='notifyInner'></div>").corner({
			tl: { radius: 7 },
			tr: { radius: 7 },
			bl: { radius: 7 },
			br: { radius: 7 },			 
			antiAlias: true,
			autoPad: false,
			validTags: ["div"] 
		});
	}
	
}

function quickSniff(idArr) {
	var sniffPass=true;
	var warningHTML = "";
	var hasClose=false;
	for (var i=0;i<idArr.length;i++) {
		var currSniff = idArr[i];
		var sniffResult = sniffer[currSniff]();
		
		if (!sniffResult.pass) {
			switch(currSniff) {
				case 'browser' :
					warningHTML += "<p class='notfline'><span class='notfHeader'>Please use a supported browser.</span>";
					if(!hasClose){warningHTML+='<span class="notfClose" onclick="javascript:$(\'#sniffNotify\').hide();">close this message</span>';hasClose=true;}
					warningHTML+="</p>";
					break;
				case 'cookie' :
					warningHTML += "<p class='notfline'><span class='notfHeader'>Make sure your browser accepts cookies.</span>";
					if(!hasClose){warningHTML+='<span class="notfClose" onclick="javascript:$(\'#sniffNotify\').hide();">close this message</span>';hasClose=true;}
					warningHTML+="</p>";
					break;
				case 'flash' :
					warningHTML += "<p class='notfline'><span class='notfHeader'>Please update your Flash plug-in.</span>";
					if(!hasClose){warningHTML+='<span class="notfClose" onclick="javascript:$(\'#sniffNotify\').hide();">close this message</span>';hasClose=true;}										
					warningHTML+="</p>";
					break;
				case 'popup' :
					warningHTML += "<p class='notfline'><span class='notfHeader'>Make sure your pop-up blocker is turned off.</span>";
					if(!hasClose){warningHTML+='<span class="notfClose" onclick="javascript:$(\'#sniffNotify\').hide();">close this message</span>';hasClose=true;}										
					warningHTML+="</p>";
					break;
				case 'java' :
					warningHTML += "<p class='notfline'><span class='notfHeader'>Please update your Java plug-in.</span>";
					if(!hasClose){warningHTML+='<span class="notfClose" onclick="javascript:$(\'#sniffNotify\').hide();">close this message</span>';hasClose=true;}
					warningHTML+="</p>";
					break;
			}
			sniffPass=false;
		}
	}
	if (warningHTML != "") {
		if ( $("#sniffNotify").hasClass('notifyWarn') ) {
			$("#sniffNotify").show().find(".notfContent").prepend(warningHTML);
		} else {
			$("#sniffNotify").show().find(".notfContent").prepend(warningHTML);
		}
	}
	return sniffPass;
}

$(document).ready(function(){
	
	$('a.refreshCheck').click(function() {
		document.location.reload(true);
		return false;
	});
	
	//Re-direct (moved to in-line html)
	/*
	if ($("#pageWrap").length != 0) {
		var redirect=quickSniff(["browser","cookie"]);
		if (redirect){
			document.location.replace('instructor2.html')
		}
	}
	*/
	
	//Course List - Moved to inline
	/*if ($("#mycourses").length != 0) {
		quickSniff(["flash","popup","java"]);

	}*/
	
	//Assignment List Moved to inline
	/*if( ( $('#studentAssignments').length != 0 ) && ( $('#instructorViewToggle').length == 0 ) ) {
		quickSniff(["flash","popup"]);
	}*/
	
	//Full troubleshooting
	if ($("#primarySniff").length != 0) {
		var timeout = setTimeout(function(){
			if (window.opener && !window.opener.closed) {
  				window.opener.blur();
			}
			window.focus();
		},1000);
		$("div.helpBlock, #resultsWrap").css("display","none");
		$("#sniffLoading,#header p.closeButton").css("display","block");
		
		$("a.testAgain").click(function(){
			if (window.opener && !window.opener.closed) {
  				window.opener.document.location.reload(true);
			}
			document.location.reload(true);
			return false;
		});
		
		//var fullSniff = ["browser","cookie","flash","java","OS","popup","screen"];
		//fullStatus(fullSniff);
		
		//add curvy corners for r3a
		$(".reSniff").corner({
			tl: { radius: 7 },
			tr: { radius: 7 },
			bl: { radius: 7 },
			br: { radius: 7 },			 
			antiAlias: true,
			autoPad: true,
			validTags: ["div"] 
		});
	
	}

});

$(window).load(function(){
	if ($("#primarySniff").length != 0) {
		fullSniff(["browser","cookie","flash","java","OS","popup","screen"]);
		$("#sniffLoading").css("display","none");
		$("#resultsWrap").css("display","block");
	}
});