            // ------------------------------------------------------------------ //   
			// ------------------ UCK initialization -------------------- //
            // ------------------------------------------------------------------ //   
			
			var uck = new Uck();
			if(!uck.init('uck-js-api'))
				jAlert('Init UCK Error : ' + uck.error);
				
			var uckSelectionBox = new UckDeviceSelectionBox('UckDeviceSelected');
			/**
			 * Test Applet is initialised with following parameters :
			 * TestApplet(String divId, int appletWidth, int appletHeight, String loadingMessage);
			 */
			var testApplet = new TestApplet("TestAppletBox", 1, 1, "");
			//TEST APPLET is started in the onload action	

			/**
			 *  Callback called when the TestApplet has finished executing
			 *  javaEnvData is null if Java is not enabled
			 *  otherwise, following members are available : osName, osArch, osVersion, jreVersion, jreVendor
			 */
			function TestAppletResultCallback(javaEnvData)
			{
			    if(!javaEnvData)
					jAlert(java_not_installed);
			}
            // ------------------------------------------------------------------ //   
			// ---- Callbacks required by the UCK Applet JavaScript Interface --- //
            // ------------------------------------------------------------------ //   
			
			/*
			 * Callback called whenever UCK Applet needs to log a warning or an error
			 * 
			 * @param log_code        the string error code referenced in Uck 
			 *                          JavaScript object
			 * @param details           the string details of the error (when provided) 
			 */
			function UckLogCallback(log_code, details)
			{
			    //must be implemented and handle error codes
			    //see Uck.js for the error codes
			    err_prefix = log_code.substr(0,2)
			    if(err_prefix == "04" || err_prefix == "05") //codes starting with 04 & 05 are errors
			    	//jAlert(UckLogs[log_code] + details);
			    {	
			    	jAlert(UckLogs[log_code]);
			    	document.getElementById('wait').style.display = "none";
				    document.getElementById('log_error').style.display = "block";
				    document.getElementById('log_success').style.display = "none";
			    }
			 }
			

             /*
			 * Callback called when UCK Applet has finished loading
			 */
			function UckReadyCallback()
			{
				authenticate();			
			}	

			 function isInteger(s) 
				{
					return !isNaN(s);
				}
			
            // ------------------------------------------------------------------ //   
			// --------------- Functions used to handle actions ----------------- //           
            // ------------------------------------------------------------------ //   
			function authenticate()
			{
				var login = document.getElementById('login').value;
				var pin = document.getElementById('codePin').value;
			  if (login == "") {
					document.forms['form'].elements["login"].focus();
					jAlert(required_login);
					document.getElementById('log_success').style.display = "none";
					document.getElementById('log_error').style.display = "none";
			        document.getElementById('wait').style.display = "none";
					return false;
				}
				else
				if (pin == "") {
					document.forms['form'].elements["codePin"].focus();
					jAlert(required_pin);
					document.getElementById('log_success').style.display = "none";
					document.getElementById('log_error').style.display = "none";
			        document.getElementById('wait').style.display ="none";
					return false;
				}
				else
				if (!isInteger(pin)) {
					document.forms['form'].elements["codePin"].focus();
					jAlert(signup_str2);
					document.getElementById('log_success').style.display = "none";
					document.getElementById('log_error').style.display = "none";
			        document.getElementById('wait').style.display ="none";
					return false;
				}
			  
				var uckJS = getUckApi();
			
				login = document.getElementById("login").value;
				password = document.getElementById("codePin").value;
				 client = document.getElementById("client").value;
				confirmcode = gup('confirmcode');
				login=clientPrefixe+"_"+client+"_"+login;
				//alert(login);
				
				session = uckJS.sessionOpen(login,password);
				
				if(uck.isException()) {uck.closeApi() ;return;}
				
				var passport = session.getUserPassport();
				
				if(passport=='' ||passport==null)
				{
					uck.closeApi() ;
					document.getElementById('wait').style.display = "none";
					document.getElementById('log_success').style.display = "none";
					document.getElementById('log_error').style.display = "block";
					document.forms['form'].elements["codePin"].focus();
					jAlert(incorrect_dna);
				}
				else
				{
					var settings=session.getUserSettings();
					document.getElementById('email').value=settings.getEmail();
					///TODO: get OTP & fill hidden field id4yoo_otp
					var otp = session.getOtp();
					document.getElementById('id4yoo_otp').value = otp.password;
					//alert(otp.password);
				    submitLoginForm();
				}
			}		
            
			

            
            
			// ------------------------------------------------------------------ //   
			// --------------- Functions used to handle login form -------------- //           
            // ------------------------------------------------------------------ //   
			
			function startUck()
			{	
				document.getElementById('log_success').style.display = "none";
				document.getElementById('log_error').style.display = "none";
		        document.getElementById('wait').style.display = "block";
		          
			    //start UCK and wait for the UckLoadedCallback callback to notify
			    //the end of the applet execution and submit the form
				if(!uck.start())
                    alert('Start UCK Error : ' + uck.error);
			}
			
			function resetUck()
			{
				if(!uck.reset())
				    alert('Reset UCK Error : ' + uck.error);
			}
			
			function submitLoginForm() 
			{
				$.post(
						"doLoginTbd",
						$("#form").serialize(),
						function(responseText) {
						if(responseText == 'Ok'){
							document.getElementById('wait').style.display = "none";
							document.getElementById('log_success').style.display = "block";
						    document.getElementById('log_error').style.display = "none";
						    uck.closeApi() ;
						}else{
							document.getElementById('wait').style.display = "none";
							document.getElementById('log_success').style.display = "none";
							document.getElementById('log_error').style.display = "block";
						}
						}
				);
				return false;
			}
			// ------------------------------------------------------------------ //   
			// --------------- custom functions-------------- //           
            // ------------------------------------------------------------------ //   
	
			function redirectTotdb()
			{
				window.location ='showTdb.action';
				return false;
			}
			///retrieve URL params
			function gup( name )
			{
			  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
			  var regexS = "[\\?&]"+name+"=([^&#]*)";
			  var regex = new RegExp( regexS );
			  var results = regex.exec( window.location.href );
			  if( results == null )
			    return "";
			  else
			    return results[1];
			}
			
