﻿CAPICOM_ENCODE_BASE64 = 0;
CAPICOM_HASH_ALGORITHM_SHA1 = 0;
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;

function SignData(data, certThumbprint, detachSignVlag, outputField) {
    try {
        detachSign = detachSignVlag;
        var sign = CryptSign(data, certThumbprint, certThumbprint);
        SLControl = $get("Xaml1");
        eval(outputField);
    }
    catch (e) {
        alert(e.description);
    }
}


function getCertificates(certtype, outputField) {

    try {
        var helper = new CertificateHelper("MY");
        var certs = helper.GetAllCertificates();
        SLControl = $get("Xaml1");
        var strsert = '';

        for (i = 0; i < certs.length; i++)
            if (0 == certtype && certs[i].KeyUsage().IsDigitalSignatureEnabled)
            strsert += helper.GetCertInfoString(certs[i].Thumbprint) + "|" + certs[i].Thumbprint + '\f';
        else if (1 == certtype && certs[i].KeyUsage().IsKeyEnciphermentEnabled)
            strsert += helper.GetCertInfoString(certs[i].Thumbprint) + "|" + certs[i].Thumbprint + '\f';

        if (0 < strsert.length)
            eval(outputField);
    }
    catch (e) {
        //alert(e);
    }
}
function getAllCertificates(outputField) {

    try {
        //alert('1');
        var helper = new CertificateHelper("MY");
        //alert('2');
        var certs = helper.GetAllCertificates();
        //alert('3');
        SLControl = $get("Xaml1");
        //alert('4');
        var strsert = '';

        for (i = 0; i < certs.length; i++) {
            strsert += helper.GetCertInfoString(certs[i].Thumbprint) + "|" +
            certs[i].Thumbprint + "|" +
            certs[i].GetInfo(CAPICOM_INFO_ISSUER_SIMPLE_NAME) + "|" +
            certs[i].KeyUsage().IsDigitalSignatureEnabled + "|" +
            certs[i].KeyUsage().IsKeyEnciphermentEnabled + "|" +
            ConvertDate(certs[i].ValidFromDate) + "|" +
            ConvertDate(certs[i].ValidToDate) + "|" +
            certs[i].SerialNumber + "|" +
            helper.GetFriendlyName(certs[i]) + '\f';
        }
        //alert('5');
        if (0 < strsert.length)
            eval(outputField);
        //alert('6');
    }
    catch (e) {
        alert("Потрібно обов'язково натиснути \"Yes\",\nдодаток запитує дозвіл доступу до сховища сертифікатів");
        alert("Опис помилки: " + e.description + " " + e.number);
        //getAllCertificates(outputField)
    }
}

function HashedData(data,outputField) {
    try {
        SLControl = $get("Xaml1");
        var hd = new ActiveXObject("CAPICOM.HashedData");
        hd.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1;
        hd.Hash(data);
        eval(outputField);
    }
    catch (e) {
        //alert(e.number);
    }
}
function GetCertificate(thumbprint, outputField) {
    try {
        SLControl = $get("Xaml1");
        var helper = new CertificateHelper("MY");
        var certs = helper.GetCertificateByThumbprint(thumbprint);

        var body;
        if (certs)
            body = certs.Item(1).Export();
            
        eval(outputField);
    }
    catch (e) {
        //alert(e.number);
    }
}

function EncryptData(data,cerBody,outputField) {
    try {
        SLControl = $get("Xaml1");
        helper = new CertificateHelper();
        var cer = helper.Import(cerBody);
        var oEnvData = new ActiveXObject('CAPICOM.EnvelopedData');
        oEnvData.Recipients.Add(cer);
        oEnvData.Content = data;
        var encryptData = oEnvData.Encrypt(CAPICOM_ENCODE_BASE64);
        eval(outputField);
    }
    catch (e) {
        alert(e.description);
    }
}
function DecryptData(encryptData, outputField) {
    try {
        var oEnvData = new ActiveXObject('CAPICOM.EnvelopedData');
        oEnvData.Decrypt(encryptData);
        var data = oEnvData.Content;
        SLControl = $get("Xaml1");
        eval(outputField);
    }
    catch (e) {
     //alert(e.description);
    }
}

function ViewCertByBody(body) {
  
    try {
        helper = new CertificateHelper();
        var cer = helper.Import(body);
        cer.Display();
    }
    catch (e) {
        alert(e.description);
    }
}
function ViewCert(thumbprint) {

    try {
        var helper = new CertificateHelper("MY");
        var certs = helper.displayCert(thumbprint);
    }
    catch (e) {
        alert(e.description);
    }
}
function ConvertDate(strDate) {
   var DateP;
   var theDate = new Date(strDate);
    if (theDate.getDate() <= 9) DateP = "0"; else DateP = "";
    DateP = DateP + theDate.getDate() + ".";
    if (theDate.getMonth() + 1 <= 9) DateP = DateP + "0";
    DateP = DateP + (theDate.getMonth() + 1) + "." + theDate.getFullYear();
    return DateP;
};



function SaveToFile(filename, filedata) {
    try {
    
//link.target = 'file:///C:/Documents%20and%20Settings/Yuri/Local%20Settings/Application%20Data/Microsoft/Silverlight/is/ghh1ukvx.txw/3ybemutr.awa/1/s/heg5g53rwsr4uezwkwyj1m2ryd51jiww13uwdlinaw0ln3sis0aaabda/f/mktp9.chm'
    
//            var fso  = new ActiveXObject("Scripting.FileSystemObject"); 
//            var fh = fso.CreateTextFile("c:\\Test.txt", true); 
//            fh.WriteLine("Some text goes here...");
        //            fh.Close();    
//------------
////        var fso = new ActiveXObject("ADODB.Stream");
//        fso.Open();
//        fso.Type = 1;
//        fso.Write(filedata);
//        fso.SaveToFile(filename);
//        fso.Close();
    }
    catch (e) {
        alert(e.description);
    }

}


