/*
 * -- Tewonder code description start --
 * Name: se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector
 * Type: Class
 * Version: 0.0.01
 *
 * Edited by: Mattias Ekendahl (mattias@tewonder.se)
 * Updates:
 *
 * Notes:
 * Todo: error messages
 * -- Tewonder code description end --
 */

function gTewonderLocalScopeFunction() {
	//alert("gTewonderLocalScopeFunction::PluginDetector");
	
	var PluginDetector = function() {
		this.pluginDetectorsArray = new Array();
		
		this.addPluginDetector = (function(aObject) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::addPluginDetector");
			this.pluginDetectorsArray.push(aObject);
		});
		
		this.getPluginDetectorByName = (function(aName) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::getPluginDetectorByName");	
			var currentArray = 	this.pluginDetectorsArray;
			for(var i = -1; ++i < currentArray.length;) {
				if(currentArray[i].name == aName) {
					return currentArray[i];
				}
			}
			gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "getPluginDetectorByName", "No detector with name " + aName);
			return null;
		});
		
		this.getActiveXObjectPlugin = (function(aObjectName) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::getActiveXObjectPlugin");	
			try {
				var newObject = eval("new ActiveXObject('" + aObjectName + "');");
				return newObject;
			}
			catch(theException) {
				gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "getActiveXObjectPlugin", "No ActiveXObject with " + aObjectName);
				return null;
			}
		});
		
		this.getNavigatorPlugin = (function(aMimeType) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::getNavigatorPlugin");	
			var mimeTypeObject = navigator.mimeTypes[aMimeType];
			if(mimeTypeObject != undefined) {
				return mimeTypeObject.enabledPlugin;
			}
			else {
				gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "getNavigatorPlugin", "No plugin for mime type " + aMimeType);
				return null;
			}
		});
		
		this.simple_detectPlugin = (function(aMimeType, aActiveXObjectName) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::simple_detectPlugin");	
			var pluginObject;
			if(navigator.mimeTypes && navigator.mimeTypes.length) {
				pluginObject = this.getNavigatorPlugin(aMimeType);
			}
			else {
				pluginObject = this.getActiveXObjectPlugin(aActiveXObjectName);
			}
			return (pluginObject != null);
		});
		
		this.detectByMimeType = (function(aMimeType, aVersion) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::detectByMimeType");
			var currentArray = 	this.pluginDetectorsArray;
			for(var i = -1; ++i < currentArray.length;) {
				var currentObject = currentArray[i];
				var currentArray2 = currentObject.mimeTypesArray;
				for(var j = -1; ++j < currentArray2.length;) {
					if(currentArray2[j] == aMimeType) {
						if(aVersion != null) {
							return currentObject.isPluginVersionEnabled(aVersion);
						}
						else {
							return currentObject.isPluginEnabled();
						}
					}
				}
			}
			gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "detectByMimeType", "No detector for mime type " + aMimeType);
			return false;
		});
		
		this.detectBySuffix = (function(aSuffix, aVersion) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::detectBySuffix");
			var currentArray = 	this.pluginDetectorsArray;
			for(var i = -1; ++i < currentArray.length;) {
				var currentObject = currentArray[i];
				var currentArray2 = currentObject.suffixesArray;
				for(var j = -1; ++j < currentArray2.length;) {
					if(currentArray2[j] == aSuffix) {
						if(aVersion != null) {
							return currentObject.isPluginVersionEnabled(aVersion);
						}
						else {
							return currentObject.isPluginEnabled();
						}
					}
				}
			}
			gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "detectBySuffix", "No detector for suffix " + aSuffix);
			return false;
		});
		
		this.detectByName = (function(aName, aVersion) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::detectByName");
			var currentArray = 	this.pluginDetectorsArray;
			for(var i = -1; ++i < currentArray.length;) {
				var currentObject = currentArray[i];
				if(currentObject.name == aName) {
					if(aVersion != null) {
						return currentObject.isPluginVersionEnabled(aVersion);
					}
					else {
						return currentObject.isPluginEnabled();
					}
				}
			}
			gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "detectBySuffix", "No detector with name " + aName);
			return false;
		});
		
		this.detectByActiveXObjectName = (function(aName, aVersion) {
			//alert("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector::detectByActiveXObjectName");
			var currentArray = 	this.pluginDetectorsArray;
			for(var i = -1; ++i < currentArray.length;) {
				var currentObject = currentArray[i];
				if(currentObject.activeXObjectName == aName) {
					if(aVersion != null) {
						return currentObject.isPluginVersionEnabled(aVersion);
					}
					else {
						return currentObject.isPluginEnabled();
					}
				}
			}
			gTewonderGlobalObjects["errorManager"].report("error", 3, "se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", "detectByActiveXObjectName", "No detector for ActiveXObject with name " + aName);
			return false;
		});
	}
	
	gTewonderGlobalFunctions.addClass("se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector", PluginDetector);
	if(!gTewonderGlobalFunctions.globalObjectExists("pluginDetector")) {
		gTewonderGlobalFunctions.addGlobalObject("pluginDetector", (new gTewonderClasses.se.tewonder.Global.GlobalObjects.PluginDetector.PluginDetector()));
	}
}

gTewonderLocalScopeFunction();

