// Script de détection pour Via
// par Nicolas Dion-Bouchard

var viaDetect = new Object();
	viaDetect.flashDetectTimeout = 10000; // Délais maximal (ms) pour la détection de la version de Flash
	viaDetect.jsOK = false;
	viaDetect.noFlashDelay = null;
	viaDetect.successHideDiv = null;
	viaDetect.onFinish = null;
	viaDetect.installedFlashVer = "0.0";

	// Initialisation
	viaDetect.init = function(params, passNum) {
		// Enregistrement des settings
		//alert("viaDetect.init({paramsObj}, " + passNum + ")");
		if(params) {
			for(var p in params) this[p] = params[p];
		}
		
		var flashStr = '<div id="flashDetect_flashHolder">';
			flashStr += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" id="flashDetect" width="1" height="1" align="middle">';
			flashStr += '<param name="allowScriptAccess" value="always" /><param name="swLiveConnect" value="true" /><param name="movie" value="flash/flashDetect.swf" /><param name="menu" value="false" /><param name="quality" value="low" /><param name="bgcolor" value="#ffffff" /><param name="wmode" value="transparent" />';
			flashStr += '<embed src="flash/flashDetect.swf" menu="false" quality="low" bgcolor="#ffffff" width="1" height="1" swLiveConnect="true" id="flashDetect" name="flashDetect" align="middle" allowScriptAccess="always" wmode="transparent" type="application/x-shockwave-flash" pluginspage="https://www.macromedia.com/go/getflashplayer" />';
			flashStr += '</object></div>';
			
		if(passNum != 2) { // Première tentative
			// Écriture de la validation JavaScript
			document.write('<SCRIPT LANGUAGE="JavaScript' + this.requiredJSVer + '">');
			document.write('	viaDetect.jsOK = true;');
			document.write('</SCRIPT>');
			document.write(flashStr);
			
		} else {
			// Deuxième tentative
			var div = document.getElementById("flashDetect_flashHolder");
			if(div) {div.innerHtml = flashStr;}
			else {viaDetect.runTests(false, 2);} // Échec
		}
		
		// Timeout de la détection Flash
		this.noFlashDelay = setInterval("viaDetect.runTests(false, " + passNum + ");", this.flashDetectTimeout);
	}
	
	// Application d'une propriété de style
	viaDetect._setStyle = function(o, p, n) {
		if(typeof(o)== "string") o=document.getElementById(o); if(!o) return; try { if(!o.style) o[p] = n; else o.style[p] = n; } catch(e) {}
	}
	
	function receiveFlashVersion(flashVer) {
		//alert("Flash version received: " + flashVer);
		viaDetect.installedFlashVer = flashVer;
		var hdnField = document.getElementById("hdnFlashVersion");
		if(hdnField) hdnField.value = String(flashVer);
		clearInterval(viaDetect.noFlashDelay);
		viaDetect.noFlashDelay = setInterval("viaDetect.runTests(false, 2);", 0);
	}
	
	// Validations et affichage des résultats
	viaDetect.runTests = function(returnResult, passNum) {
		if(returnResult != false) returnResult = true;
		var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? (navigator.userAgent.toLowerCase().indexOf("opera") == -1) : false; // Detection Internet Explorer
		//alert("runTests(" + returnResult + ", " + passNum + ")");
		
		function showResultDiv(divName, obj) {
			var tarDiv = document.getElementById(divName);
			if(tarDiv) {
				var content = String(tarDiv.innerHTML);
				for(var p in obj) {
					var pName = "%"+p+"%";
					while(content.indexOf(pName) != -1) {
						content = content.substring(0,tarDiv.innerHTML.indexOf(pName)) + obj[p] + content.substring(content.indexOf(pName)+ pName.length, content.length);
					}
				}
				tarDiv.innerHTML = content;
				if(obj.tagName == "table") obj._setStyle(tarDiv, "display", "table");
				else if(obj.tagName == "span") obj._setStyle(tarDiv, "display", "inline");
				else obj._setStyle(tarDiv, "display", "block");
				return true;
			}
			return false;
		}
		
		clearInterval(this.noFlashDelay);
		
		// Validation de la version de Flash
		if(this.installedFlashVer == "0.0" && isIE && passNum != 2) {
			// Deuxième tentative (pour IE seulement)
			this.init(null, 2);
			return;
		}
		
		// Fin du test
		this._setStyle(this.inProgressDiv, "display", "none");
		
		if(this.installedFlashVer == "0.0") {
			// Flash non installé (délais dépassé)
			var resultShown = showResultDiv(this.flashErrorDiv, this);
			if(!resultShown) alert("Flash non détecté (boîte de résultat introuvable).");
			if(this.onFinish != null && typeof(this.onFinish) == "function") this.onFinish(false);
			if(returnResult) return false;
			else return;
		}
		var flashVerArr = this.installedFlashVer.split(".");
		var fVerNum = Number(flashVerArr[0] + "." + flashVerArr[1]);
		if(fVerNum < this.requiredFlashVer) {
			// Flash trop ancien
			var resultShown = showResultDiv(this.flashVersionErrorDiv, this);
			if(!resultShown) alert("Ancienne version de Flash détectée (installée: " + this.installedFlashVer + ", required: " + this.requiredFlashVer + ", boîte de résultat introuvable).");
			if(this.onFinish != null && typeof(this.onFinish) == "function") this.onFinish(false);
			if(returnResult) return false;
			else return;
		}
		
		// Validation de JavaScript
		if(!this.jsOK) {
			// Version non compatible
			var resultShown = showResultDiv(this.jsErrorDiv, this);
			if(!resultShown) alert("Version JavaScript non compatible (boîte de résultat introuvable).");
			if(this.onFinish != null && typeof(this.onFinish) == "function") this.onFinish(false);
			if(returnResult) return false;
			else return;
		}
		
		// Pas d'erreurs, tout est beau
		var resultShown = showResultDiv(this.successDiv, this);
		if(!resultShown) alert("Tests réussis! (boîte de résultat introuvable).");
		else if(this.successHideDiv != null) this._setStyle(this.successHideDiv, "display", "none");
		if(this.onFinish != null && typeof(this.onFinish) == "function") this.onFinish(true);
		if(returnResult) return true;
		else return;
	}
	
	
	
	
	
	
	
	
	
