//=================================================================================================
// PTO functions

function LookForObject(n, d) {
	var p,i,x;
	if(!d)
		d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all)
		x=d.all[n];
	for (i=0;!x&&i<d.forms.length;i++)
		x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++)
		x=LookForObject(n,d.layers[i].document);
	if(!x && d.getElementById)
		x=d.getElementById(n);
	return x;
}

function FindFlashVersion(FlashObjName, callbackname) {
	if (navigator.plugins && navigator.plugins.length) {
		var FlashPlugin = navigator.plugins["Shockwave Flash"];
		if (FlashPlugin) {
			if (FlashPlugin.description)
			{
				var flashDesc = FlashPlugin.description;
				// Cuts the version
				var posPoint = flashDesc.indexOf('.');
				var debNum = posPoint-1;
				// first num
				while(debNum>0) {
					if(flashDesc.charAt(debNum)>='0' && flashDesc.charAt(debNum)<='9')
						debNum--;
					else 
						break;
				}
				var flashVer = flashDesc.substring(debNum, posPoint)+", ";

				// second num
				var endnum = posPoint+1;
				while(endnum<flashDesc.length) {
					if(flashDesc.charAt(endnum)>='0' && flashDesc.charAt(endnum)<='9')
						endnum++;
					else 
						break;
				}
				flashVer += flashDesc.substring(posPoint+1, endnum)+", ";

				while(endnum<flashDesc.length && flashDesc.charAt(endnum)!='r' && flashDesc.charAt(endnum)!='b')
					endnum++;
						
				if(endnum>=flashDesc.length) {
					flashVer += "0, 0";
				} else {
					var curChar = flashDesc.charAt(endnum);
					var posL = endnum+1;
					endnum = posL;
	
					while(endnum<flashDesc.length)
						if(flashDesc.charAt(endnum)>='0' && flashDesc.charAt(endnum)<='9')
							endnum++;
						else 
							break;

					if(curChar=='r') // release
						flashVer += flashDesc.substring(posL, endnum)+", 0";
					else // beta
						flashVer += "0, "+flashDesc.substring(posL, endnum);
						
				}
					
				var str = callbackname+"("+flashVer+")";
				eval(str);
				return;

			}
		}

		if (navigator.plugins["Shockwave Flash 2.0"]) {
			var str = callbackname+"(2, 0, 0, 0)";
			eval(str);
			return;
		}
	}

	
	var flashObj = LookForObject(FlashObjName);
	if(!flashObj || flashObj==null) {
		// alert('flashObj is null');
		eval(callbackname+"(-1, -1, -1, -1);");
		return;
	}
	// Waits for flash player instanciated
	var strReadyState = String(typeof(flashObj.ReadyState));
	var strGetVariable = String(typeof(flashObj.GetVariable));

	if(strReadyState=="undefined" || strReadyState == "" || strGetVariable=="undefined" || strGetVariable == "") {
		// bad player
		// alert("flash player doesn't have readystate");
		eval(callbackname+"(-2, -2, -2, -2);");
		return;
	}
	// Ready ?
	if(flashObj.ReadyState!=4) {
		// no
		setTimeout("FindFlashVersion(\""+FlashObjName+"\", \""+callbackname+"\")", 100)
		return;
	}
	// Tests flash player
	var ver = "";
	try {
		ver = String(flashObj.GetVariable("/:$version"));
	} catch(ex) {
		// Version not supported, bad player
		eval(callback+"(-3, -3, -3, -3);");
		return;
	}
	var verArray = ver.split(",");
	var v1 = Number(verArray[verArray.length-4].substr(verArray[verArray.length-4].lastIndexOf(" ")));
	var v2 = Number(verArray[verArray.length-3]);
	var v3 = Number(verArray[verArray.length-2]);
	var v4 = Number(verArray[verArray.length-1]);
	// alert(v1+", "+v2+", "+v3+", "+v4);

	var str = callbackname+"("+v1+", "+v2+", "+v3+", "+v4+")";
	eval(str);
}

function FindOCXVersion(OCXObjName, callbackname) {
	var OCXObj = LookForObject(OCXObjName);
	if(!OCXObj || OCXObj==null) {
		debugalert('OCXObj is null');
		eval(callbackname+"(0, 0, 0, 0);");
		return;
	}
	// Waits for OCX instanciated
	var strVersion = String(typeof(OCXObj.GetVersion));
	var strReadyState = String(typeof(OCXObj.IsReady));
		debugalert(OCXObj + " : "+strVersion+", "+strReadyState);
	if(
		strReadyState=="undefined" || strReadyState == "" ||
		strVersion=="undefined" || strVersion == ""
	) {
		// bad Tol7Inst
		debugalert("OCX not here "+strVersion+", "+strReadyState);
		eval(callbackname+"(-1,-1,-1,-1);");
		return;
	}
	// Ready ?
	try {
		if(OCXObj.IsReady==0) {
			// no
			debugalert("waiting for IsReady");
			setTimeout("FindOCXVersion(\""+OCXObjName+"\", \""+callbackname+"\")", 100)
			return;
		}
	} catch(ex) {
		// Version not supported, bad player
		debugalert("Pb with IsReady");
		eval(callback+"(-2,-2,-2,-2);");
		return;
	}

	// Tests OCX
	var Version = "0,0,0,0";
	try {
		Version = OCXObj.GetVersion();
		// alert(Version);
	} catch(ex) {
		// Version not supported, bad player
		eval(callback+"(-3,-3,-3,-3);");
		return;
	}
	
	eval(callbackname+"("+Version+");");
}

function ptoCheckOcx(OCXObjName, baseUrl, configUrl)
{
	var OCXObj = LookForObject(OCXObjName);
	if(!OCXObj || OCXObj==null) {
		return false;
	}

	debugalert("typeof(OCXObj.FailTestCode)="+typeof(OCXObj.FailTestCode));
	if (String(typeof(OCXObj.FailTestCode)) == "number" && String(typeof(OCXObj.GetVersion))!="undefined")
	{
		sProcessCmd = "url_config_file="+configUrl;
		sProcessCmd += "|url_base="+baseUrl;
		debugalert("sProcessCmd = "+sProcessCmd);
		
		errorCode = OCXObj.Process(sProcessCmd);
		debugalert("errorCode:"+errorCode);
		
		failCode = OCXObj.FailTestCode;
		debugalert("failCode:"+failCode);
		return ((errorCode == 0) && (failCode == 0));
	}
	else
	{
		// Not Ok
		return false;
	}
}
function ptoInstallOcx(OCXObjName, baseUrl, configUrl)
{
	var obj = LookForObject(OCXObjName);
	if(!obj || obj==null) {
		return false;
	}
	var errorCode,failCode;
	debugalert("typeof(obj.FailTestCode)="+typeof(obj.FailTestCode));
	var strReadyState = String(typeof(obj.IsReady));
	if (String(typeof(obj.FailTestCode)) == "number" && strReadyState!="" && strReadyState!="undefined")
	{
		
		sProcessCmd = "url_config_file="+configUrl;
		sProcessCmd += "|url_base="+baseUrl;
		debugalert("sProcessCmd="+sProcessCmd);
		
		errorCode = obj.Process(sProcessCmd);
		debugalert("errorCode:"+errorCode);
		
		if (errorCode == 0)
		{
			// Ok
			return true;
		}
		else
		{
			// Not Ok
			return false;
		}
	}
	else
	{
		// Not Ok
		return false;
	}
}
function debugalert(s)
{
	// alert(s);
}

// FIN FONCTIONS POUR LES PRE-TESTS
//=================================================================================================

//=================================================================================================
// FONCTIONS POUR LE PORTAIL

var g_appwin = null;
var g_timerid = 0;
var g_nexturl = "";
var g_bMsie4or5 = false;

var g_CloseByApp = false;
var g_NavigateToNext = true;


function NavigateToNextURL(ClosedByApp) {
	if("" != g_nexturl)
		window.location = g_nexturl + (ClosedByApp ? "" : "?kill=1");
}

// fonction appelée par Body.onUnload
function UnloadHandler()
{
	try
	{
		if(g_NavigateToNext && ! window.opener.closed)
			window.opener.NavigateToNextURL(g_CloseByApp);
	}
	catch(exc)
	{
		return;
	}
}

// Fonction appelée par une application qui souhaite se fermer
function CloseByApp() {
	g_CloseByApp = true;
	self.close();
}

//--------------------------------------------------------------
// Version de base
//--------------------------------------------------------------
// lancement seulement (l'utilisateur doit cliquer)
function PortalLaunchApp(p_url)
{
	window.open(p_url, '_blank', 'fullscreen=yes');
}

//--------------------------------------------------------------
// Version IE 5.x et +
//--------------------------------------------------------------
// lancement + attente de déchargement
function PortalLaunchAppAndWait4IE(p_url, p_next, p_win)
{
	g_nexturl = p_next;
	g_appwin = window.open(p_url, '_blank', 'fullscreen=yes');
	g_appwin.attachEvent('onunload', function () { p_win.navigate(p_next); } );
	document.g_resu = "";
}

//--------------------------------------------------------------
// déchargement de page
function PortalKillWaitTimer()
{
	if(0 != g_timerid)
	{
		if(true == g_bMsie4or5) {
			clearTimeout(g_timerid);
		} else {	
			clearInterval(g_timerid);
		}
		g_timerid = 0;
	}
}

//--------------------------------------------------------------
// Version Netscape 6/Mozilla 1.x et +
//--------------------------------------------------------------
// vérification périodique du déchargement
function PortalWait4AppCompletion()
{
	if(null != g_appwin)
	{
		if(true == g_appwin.closed)
		{
			PortalKillWaitTimer();
			
			if(g_nexturl != "") {
				
				if(document.g_resu == "") {
					window.location = g_nexturl;
				} else {
					window.location = g_nexturl + "?" + document.g_resu;
				}
				
				// On ne refait pas le window.location deux fois	
				g_nexturl = "";
			}
		}
		else if(true == g_bMsie4or5)
			g_timerid = setTimeout("PortalWait4AppCompletion()", 1000);	
	}
}

//--------------------------------------------------------------
// lancement
function PortalLaunchAppAndWait(p_url, p_fs, p_next, p_params)
{
	document.g_resu = "";
	g_nexturl = p_next;
	
	var win_args = (p_fs || String(p_fs)=="1") ?
		'fullscreen=yes,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1024,height=768' : 
		'fullscreen=no,toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes';
	
	if(arguments.length>=4) {
		win_args += ','+p_params;
	}
	
	g_appwin = window.open(p_url, '_blank', win_args);
	
	if( ("Microsoft Internet Explorer" == navigator.appName) && ((-1 != navigator.userAgent.indexOf("MSIE 4")) || (-1 != navigator.userAgent.indexOf("MSIE 5"))) )
		g_bMsie4or5 = true;

	if(true == g_bMsie4or5)
	{
		//alert("MSIE 4.x or 5.x : setTimeout");
		g_timerid = setTimeout("PortalWait4AppCompletion()", 1000);
	}
	else
	{
		//alert("MSIE 6.x or > or Netscape or Mozilla : setInterval");
		g_timerid = setInterval("PortalWait4AppCompletion()", 1000);
	}
}

//--------------------------------------------------------------
// tentative de fermeture
function PortalTryCloseApp()
{
	if(null != g_appwin)
	{
		if(true != g_appwin.closed)
		{
			//if(true != g_bMsie4or5)
			//	PortalKillWaitTimer();
			g_appwin.close();
			g_appwin = null;
		}
	}
	if("" != g_nexturl)
		window.location = g_nexturl + "?kill=1";
}
		
//-------------------------------------------------------------------
// si on navigue alors qu'on est en train d'exécuter une application
function SetNextUrl(p_url)
{
	g_nexturl = p_url;
}	

//------------------------------------------------------------------
function PortalStartApp(p_url, p_fs, p_next)
{
	g_nexturl = p_next;
	
	var win_args = (p_fs || String(p_fs)=="1") ?
		'fullscreen=yes,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1024,height=768' : 
		'fullscreen=no,toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes';
	
	g_appwin = window.open(p_url, '_blank', win_args);
}
//------------------------------------------------------------------
// Validation de formulaire
function validForm(FormName) {
	LookForObject(FormName).submit();
}

