/* CS js code for fingerprint scanning
    expected HTML elements:
        - bioPlugInActX: OCX component.
        - hdnFingerData: holds fingerprint data written by OCX.
        - btnAuthenticate: req. for authentication.
        - btnRegister: req. for registration.
        - hdnResID: req. for registration; holds resourceID.
        - hdnMode: req. for registration; holds scan mode.
        - labBanner: optional label for msg display    
*/   
    var POPUP_MODE = false;     // flag for embedded vs popup OCX mode
    var SHOW_IMAGE = false;     // if not-popup mode, sets embedded image visibility.
    var BANNER_TIMEOUT = 10000; // banner msg timeout, in ms.  Use 0 to never timeout.
    
    var SCAN_IN_PROGRESS = "Scan in progress.";
    var START_SCAN = "Click \"Start Scan\" to begin...";

    // scan fp in register-mode
    function register() {
        if(!document.getElementById('hdnResID').value) {
            alert('Please select an employee.');
            return false;
        }
        document.getElementById('hdnMode').value = 'register';
        return getFingerprint();
    }
    // scan fp in authenticate-mode
    function authenticate() {
        var e = document.getElementById('hdnMode');
        if(e) e.value = 'authenticate';
        return getFingerprint();
    }
    // toggle scanner visibility
    function showScanner(bVisible) {
	    try { 
	        var ocx = document.getElementById('bioPlugInActX');
	        if(!ocx) return false;
	        if(POPUP_MODE || !SHOW_IMAGE) {
	            ocx.style.display = 'none';  // always invisible
	            return false;
	        }
	        if(bVisible) 
                ocx.style.display = '';
            else 
                ocx.style.display = 'none'; // hide
	    } 
	    catch(err) { alert('showScanner: ' + err); }    //todo: remove alert after testing  
        return false;
    }
    
    // cancel fp-scan
    function cancelScan() {
        var lab = document.getElementById('labBanner');
        if(lab) lab.innerText = START_SCAN;
        var lab2 = document.getElementById('labPunch');
        if(lab2) lab2.innerText = '';
	    try { 
	        var ocx = document.getElementById('bioPlugInActX');
            ocx.StopActiveIdentification();
            ocx.style.display = 'none'; // hide
	    } 
	    catch(err) { }   
	    // hide cancel button
        var btn = document.getElementById('btnCancel');
        if(btn) btn.style.display = 'none';
        return false;
    }
 
    // scan fp; fire OnCapture
    function getFingerprint() { 
        var lab = document.getElementById('labBanner');
        var msg = validateScanner();
        if(msg) {
            // scanner not OK
            if(lab) lab.innerText = msg;      
            else alert(msg);
            return false;
        }
        if(lab) {
           if(POPUP_MODE) lab.innerText = SCAN_IN_PROGRESS + " See popup window...";      
           else           lab.innerText = SCAN_IN_PROGRESS + " Please place finger on scanner...";           
        }
        var lab2 = document.getElementById('labPunch');
        if(lab2) lab2.innerText = '';
        
        // show cancel button
        var btn = document.getElementById('btnCancel');
        if(btn) btn.style.display = '';

        // scan finger (data is returned in OnCapture event)
        document.getElementById('hdnFingerData').value = null;
	    try { 
	        showScanner(true); 
	        var ocx = document.getElementById('bioPlugInActX');
	        var dlogPosition = '0';  // 0=center, 1=top-left, 4=top-right
	        if(!POPUP_MODE) { 
	            dlogPosition = '5'; // 5=hidden
	            if(SHOW_IMAGE) ocx.SetImageDisplayMode();
	        }
            var captureResult = ocx.CaptureFingerData(dlogPosition); 
	    } 
	    catch(err) {
	        alert('Scan failed.  Verify that fingerprint software is installed.');
	    }      
        // MUST return false here; a postback suppresses the OnCapture event:
        return false;     
    } 

    // handle OCX OnCapture 
    function handleOnCapture() {
        // OnCapture event fired by bioplugin OCX
 		var fingerText = document.getElementById('bioPlugInActX').GetSafeFingerData();
 		if(!fingerText || fingerText.length < 50) {
 		    // allow ocx to re-prompt
 		    return false;
 		}
        var lab = document.getElementById('labBanner');
        showScanner(false);  
        
        // hide cancel button
        var btn = document.getElementById('btnCancel');
        if(btn) btn.style.display = 'none';

        
 		document.getElementById('hdnFingerData').value = fingerText; 				 		
 		// postback a button click
        var e = document.getElementById('hdnMode');
 		if(!e) {
            if(lab) lab.innerText = 'Scan complete. Authenticating...';
 		    __doPostBack('btnAuthenticate','Click'); 				    
 		} else {
 		    if(e.value == 'register') {
                if(lab) lab.innerText = 'Scan complete. Registering...';
 		        __doPostBack('btnRegister','Click'); 		
 		    } else {
                if(lab) lab.innerText = 'Scan complete. Authenticating...';
 		        __doPostBack('btnAuthenticate','Click'); 		
 		    }
 		}
    }
    
    
    // validate client scanner setup; 
    // If scanner is OK, return null and set 'scannerOK' in hdnFingerData.
    // If not OK, return error msg and set hdnFingerData to null.
    function validateScanner() {
        var ocx = document.getElementById('bioPlugInActX');
        var lab = document.getElementById('labBanner');
        var hdn = document.getElementById('hdnFingerData');
        var msg = null;
        hdn.value = '';
        if(!ocx || !ocx.IsClientInstalled || !ocx.IsClientRunning) {
            return 'Fingerprint OCX not found (bioPlugInActX). Client software must be installed on this machine.';
        } else {
            if(!ocx.IsClientInstalled()) {
                return 'Fingerprint software not found. Client software must be installed on this machine.';
            } else {
                if(!ocx.IsClientRunning()) {
                    return 'Fingerprint software not running. Client software must be configured on this machine.';
                } 
            }  
        }
        if(ocx) {
            // these calls return null, but fire OnScannerStatus event; 
            // TODO: not clear how to get results within the OnScannerStatus event.
            //  I have an open question to m2sys tech support on this.  
            ocx.GetScannerCount();
            ocx.GetScannerStatus();
        }
        // set OK status
        document.getElementById('hdnFingerData').value = 'scannerOK';
        return null;
    }1

    // fingerprint panel: turn off the banner after timeout period.
    function bannerTimeout() {
        if (BANNER_TIMEOUT <= 0) return;
        var lab = document.getElementById('labBanner');
        if(lab) {
            var len = SCAN_IN_PROGRESS.length;
            var cur = lab.innerText.substr(0,len);
            if( cur == SCAN_IN_PROGRESS) return;  // don't timeout on this msg
            setTimeout("document.getElementById('labBanner').innerText = '" + START_SCAN + "';", BANNER_TIMEOUT);
        }
    }
    // punch panel: turn off the banner after timeout period.
    function banner2Timeout() {
        if (BANNER_TIMEOUT <= 0) return;
        var lab = document.getElementById('labBanner2');
        if(lab) {
            setTimeout("document.getElementById('labBanner2').innerText = '';", BANNER_TIMEOUT);
            lab.style.display = '';
        }
    }
