/**
 * Handles environment detection
 */
PopJavaScriptFramework.v1B1.client = {
	platform: '',
	browser: '',
	version: {
		init: function() {
			this.superclass = PopJavaScriptFramework.v1B1.objectTemplate.versionable;
			this.superclass();
		}
	},
	plugin: {
		embedMethod: (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) ? 'embed' : 'object',
		swf: {
			detect: function() {
				this.superclass = PopJavaScriptFramework.v1B1.objectTemplate.versionable;
				this.superclass();
				
				if (PopJavaScriptFramework.v1B1.client.plugin.embedMethod == 'embed') {
					var plugin = navigator.plugins["Shockwave Flash"];
					var version = 0;
					if (plugin && plugin.description) {
						version = plugin.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".");
						this.set(version);
					}
				} else {
					var axo = null;
					try {
						axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
					} catch (e) {
						try {
							axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
						} catch (e) {
							try {
								axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
							} catch (e) {}
						}
					}
					if (axo != null) {
						this.set(axo.GetVariable("$version").split(" ")[1].split(",").join('.'));
					}
				}
			}
		}
	},
	capable: {
		xhr: false
	},
	detectBrowser: function() {
		var browser = '';
		var version = '';
		var userAgent = navigator.userAgent.toLowerCase();
		switch(true) {
			case (userAgent.indexOf("applewebkit") != -1):
				browser = 'webkit';
				var i = userAgent.indexOf("applewebkit");
				var v = userAgent.substring(i).split(" ")[0].split("/")[1];
				break;
			case (userAgent.indexOf("opera") != -1):
				browser = 'opera';
				var i = userAgent.indexOf("opera");
				var v = userAgent.substring(i + 6).split(" ")[0];
				break;
			case (userAgent.indexOf("gecko") != -1 && userAgent.indexOf("rv:") != -1):
				browser = 'gecko';
				var i = userAgent.indexOf("rv:");
				var v = userAgent.substring(i + 3).split(")")[0];
				break;
			case (userAgent.indexOf("msie") != -1):
				browser = 'msie';
				var i = userAgent.indexOf("msie");
				var v = userAgent.substring(i + 5).split(";")[0];
				break;
		}
		this.browser = browser;
		this.version.init();
		this.version.set(v);
	},
	detectPlatform: function() {
		var p = navigator.platform.toLowerCase();
		if (p.indexOf("win") != -1) {
			p = "windows";
		} else if (p.indexOf("mac") != -1) {
			p = "mac";
		} else if (p.indexOf("linux") != -1) {
			p = "linux";
		}
		this.platform = p;
	},
	detectXHR: function() {
		var xhr = PopJavaScriptFramework.v1B1.io.XHR();
		this.capable.xhr = (xhr === false) ? false : true ;
		delete xhr;
	}
	
}
if (typeof PopJavaScriptFramework.v1B1.io != 'undefined') {
    // only detect XHR if the 'io' package has been included
    PopJavaScriptFramework.v1B1.client.detectXHR();
}
PopJavaScriptFramework.v1B1.client.detectBrowser();
PopJavaScriptFramework.v1B1.client.detectPlatform();
PopJavaScriptFramework.v1B1.client.plugin.swf.detect();