﻿
function checkTool() {
    var SLSTObjTemp = new ActiveXObject("SLSTCOM.SLST");
    var SLSTTokenInfoObjTemp = new ActiveXObject("SLSTCOM.SLSTTokenInfo");
    var SLIValuesObjTemp = new ActiveXObject("SLSTCOM.SLIValues");
    var SLBufferObjTemp = new ActiveXObject("SLSTCOM.SLBuffer");
    var error;

    if (SLSTObjTemp == null) {
        alert("لا يمكن اتمام العملية الرجاء التأكد من اعدادات جهاز البصمة");
        return false;
    }

    SLSTObjTemp.SLSTInitialize("SRSTSDK.dll");
    var TestTokensIDsTemp = SLSTObjTemp.SLSTEnumerateTokens();

    if (SLSTObjTemp.GetLastError() != 0) {
        error = SLSTObjTemp.GetErrorMsg(SLSTObjTemp.GetLastError());
        if (error == 'SLST_ERR_INVALID_TOKENID') {
            return false;
        }
    }

    SLIValuesObjTemp.SLSet(TestTokensIDsTemp);
    var SessionID;

    if (SLIValuesObjTemp.SLSize == 0)
        return false;
    return true;
}

//main method

var SLSTObj;
var SLSTTokenInfoObj;
var SLDWValuesObj;
var SLBufferObj;
function Authenticate() {
    try {

        SLSTObj = new ActiveXObject("SLSTCOM.SLST");
        var SLSTTokenInfoObj = new ActiveXObject("SLSTCOM.SLSTTokenInfo");
        var SLIValuesObj = new ActiveXObject("SLSTCOM.SLIValues");
        var SLBufferObj = new ActiveXObject("SLSTCOM.SLBuffer");
        var error;


        if (SLSTObj == null) {
            alert("لا يمكن اتمام العملية الرجاء التأكد من اعدادات جهاز البصمة");
            return false;
        }

        SLSTObj.SLSTInitialize("SRSTSDK.dll");
        TestTokensIDs = SLSTObj.SLSTEnumerateTokens();
        

        if (!checkError()) return false; //absy

        SLIValuesObj.SLSet(TestTokensIDs);

        if (SLIValuesObj.SLSize > 0) {

            SLSTTokenInfoObj = SLSTObj.SLSTGetTokenInfo(SLIValuesObj.SLGetItem(0));
            $('input[type=hidden][id*=hfTokenId]').attr('value','The ' + SLSTTokenInfoObj.Label + ' with serial token ' + SLSTTokenInfoObj.SerialNumber);
            
            
            //alert(SLSTTokenInfoObj.Label);
            //alert($('input[type=hidden][id*=hfTokenId]').attr('value'));
            //if(SLSTObj.GetLastError()!=0){alert(SLSTObj.GetErrorMsg(SLSTObj.GetLastError()));return;}
            
            SessionID = SLSTObj.SLSTOpenSession(SLIValuesObj.SLGetItem(0));

            //if(SLSTObj.GetLastError()!=0){alert(SLSTObj.GetErrorMsg(SLSTObj.GetLastError()));return;}
            
            SLSTObj.SLSTLogin(SessionID, "", 1);
           
            if (!checkError()) return false;
                


            //SLBufferObj.SLSetString(1, "Hello");
            //SLSTObj.SLSTWrite(SessionID, 3, 0, SLBufferObj.SLGet());

            //alert("Writing:" + SLBufferObj.SLGetString(1));
       
            //var Buffer = SLSTObj.SLSTRead(SessionID, 3, 0, 5);
            //if(SLSTObj.GetLastError()!=0){alert(SLSTObj.GetErrorMsg(SLSTObj.GetLastError()));return;}
            //if (!checkError()) return false; //absy

            
            //SLBufferObj.SLSet(Buffer);
            //alert("Reading:" + SLBufferObj.SLGetString(1));

            SLSTObj.SLSTCloseSession(SessionID);

            alert('تمت العملية بنجاح');
            return true;
        }
        else {
            alert("جهاز البصمة غير موصول");
            return false;
        }

        
    }
    catch (e) {
        if (e.message == "Automation server can't create object")
            alert("لم تقم بتنصيب البرنامج");
        else
            alert('Error: ' + e.message);

        return false;
    }
}


//private method
function checkError() {
    if (SLSTObj.GetLastError() != 0) {
        error = SLSTObj.GetErrorMsg(SLSTObj.GetLastError());
        alert(showMessage(error));
        return false;
    }
    return true;
}

function showMessage(code) {
    switch (code) {
        case "SLST_ERR_INVALID_PIN_RANGE":
            return "الرقم السري غير صحيح";
            break;
        case "SLST_ERR_FP_TOO_SMALL":
            return "البصمة غير واضحة";
            break;
        case "SLST_ERR_TIME_OUT":
            return "انتهى الوقت";
            break;
        case "SLST_ERR_FP_INVALID_IMAGE":
            return "البصمة غير صحيحة";
            break;
        case "SLST_ERR_FP_TOO_FAST":
            return "البصمة غير واضحة";
            break;
        case "SLST_ERR_FP_TOO_SLOW":
            return "البصمة غير واضحة";
            break;
        case "SLST_ERR_INVALID_TOKENID":
            return "جهاز البصمة غير موصول";
            break;
        case "SLST_ERR_FP_IDENTIFY_FAILED":
            return "فشل في عملية التحقق";
            break;
        case "SLST_ERR_CANCEL":
            return "تم إلغاء العملية";
            break;
        case "SLST_FP_STATUS_FINGER_NO_MATCH":
            return "تم إلغاء العملية";
            break;
        default:
            return code;
    }
    return code;
}

