﻿

var MAX_PSWD_LEN = 30;

function KsdMetric() {
    this.KsdFinished = false;
    this.KsdKeyCount = -1;
    this.KsdIgnoreKeyPress = false;
    this.KsdEraseHappened = false;
    this.KsdAltPressed = false; // ALT key code == 18,  right Alt == 21,  Kor-Eng key
    this.KsdCtrlPressed = false; // CTRL key code == 17,  right ctrl == 25, Chinese key
    this.len = 0;

    this.KsdKeyName = new Array(MAX_PSWD_LEN);
    this.KsdKeyDown = new Array(MAX_PSWD_LEN);
    this.KsdKeyUp = new Array(MAX_PSWD_LEN);
    this.KsdKeyIsUp = new Array(MAX_PSWD_LEN);

    this.count = 0;

    this.KsdReset();
} // end of class

KsdMetric.prototype.KsdCurrTime = function() {
    oDate = new Date();
    return oDate.getTime()
}

KsdMetric.prototype.KsdFindKeyNum = function() {
    for (i = this.KsdKeyCount; i >= 0; i--) {
        if (this.KsdKeyIsUp[i] == false) {
            return i + 1;
        }
    }
    return 0;
}

// 
KsdMetric.prototype.KsdReset = function() {
    this.KsdKeyCount = -1;
    this.KsdFinished = false;
    this.KsdIgnoreKeyPress = false;
    this.KsdEraseHappened = false;

    for (i = 0; i < MAX_PSWD_LEN; i++) {
        this.KsdKeyName[i] = 0;
        this.KsdKeyDown[i] = 0;
        this.KsdKeyUp[i] = 0;
        this.KsdKeyIsUp[i] = 0;
    }
}


// 
KsdMetric.prototype.KsdErase = function() {
    if (this.KsdKeyCount < 0)
        return false;

    this.KsdEraseHappened = true;
    this.KsdKeyName[this.KsdKeyCount] = 0;
    this.KsdKeyUp[this.KsdKeyCount] = 0;
    this.KsdKeyDown[this.KsdKeyCount] = 0;
    this.KsdKeyIsUp[this.KsdKeyCount] = false;

    this.KsdKeyCount--;
}


//
KsdMetric.prototype.KsdOnKeyUp = function(e) {

    //		window.event.keyCode = 60;	
    //		alert("debug2");
    var elementid = event.srcElement.id;

    if (elementid != "username" && elementid != "password")
        return;

    var c = document.getElementById(elementid).value.length;

    if (this.len > c)
        this.KsdEraseHappened = true;
    this.len = c;

    var KsdMyKey = this.KsdFindKeyNum();
    //alert(KsdMyKey);
    this.count++;
    if (KsdMyKey < 0 || this.KsdKeyIsUp[KsdMyKey] == false)
        return;


    this.KsdKeyUp[KsdMyKey] = this.KsdCurrTime();
    this.KsdKeyIsUp[KsdMyKey] = false; // Key pressed
}

//document.getElementByName(prototype).elements.value.length
KsdMetric.prototype.KsdOnKeyDown = function(e) {

    //		window.event.keyCode = 60;
    //		alert("debug");

    if (this.KsdKeyCount >= MAX_PSWD_LEN - 1)
        return false;

    this.KsdKeyCount++;
    this.KsdKeyName[this.KsdKeyCount] = window.event.keyCode;
    this.KsdKeyDown[this.KsdKeyCount] = this.KsdCurrTime();
    this.KsdKeyIsUp[this.KsdKeyCount] = true; // Key pressed

    return true;
}

//
KsdMetric.prototype.KsdFinish = function() {
    if (this.KsdFinished)
        return true;

    for (i = 0; i <= this.KsdKeyCount; i++) {
        if (this.KsdKeyIsUp[i] == true) {
            this.KsdKeyUp[i] = this.KsdCurrTime();
            this.KsdKeyIsUp[i] = false;
        }
    }
    this.KsdFinished = true;
    return true;
}

//
KsdMetric.prototype.KsdGetResult = function() {

    this.KsdFinish();

    var KsdBaseTime = this.KsdKeyDown[0];
    for (i = 0; i <= this.KsdKeyCount; i++) {
        this.KsdKeyDown[i] -= KsdBaseTime;
        this.KsdKeyUp[i] -= KsdBaseTime;
    }

    var KsdTmpArr = new Array((this.KsdKeyCount + 1) * 2);
    for (i = 0; i <= this.KsdKeyCount; i++) {
        KsdTmpArr[2 * i] = this.KsdKeyDown[i];
        KsdTmpArr[2 * i + 1] = this.KsdKeyUp[i];
    }

    var KsdResult;
    if (this.KsdEraseHappened)
        KsdResult = "ER " + KsdTmpArr.join(" ");
    else
        KsdResult = "OK " + KsdTmpArr.join(" ");


    return KsdResult;
}

var IdMetric = new KsdMetric();
var PwMetric = new KsdMetric();






