﻿//hi-jack the submit functions so we can do encryption before the actual post
var oldOnSubmit;
if(typeof WebForm_OnSubmit == "function") {
    oldOnSubmit = WebForm_OnSubmit;

    WebForm_OnSubmit = WebForm_OnSubmitWithEncryption;
}

function WebForm_OnSubmitWithEncryption(){
    if(oldOnSubmit != null && oldOnSubmit()) {
        encryptFormFields();
        
        return true;
    }
    
    return false;
}

function getFakeFieldValue(reqLength) {
    var strReturn = "";
    
    while(strReturn.length < reqLength) {
        strReturn = strReturn + "*";
    }
    
    return strReturn;
}

function insertEncryptionHash(masterLogin) {
    if(masterLogin) {
        strDate = document.getElementById("ctl00_txtEncryptionDate").value;
        strPublicKey = document.getElementById("ctl00_txtEncryptionPublicKey").value;
        strUserName = document.getElementById("ctl00_txtLoginUserName").value;
        strPassword = document.getElementById("ctl00_txtLoginPassword").value;

        strEncryptionHashMaster = strDate + strPublicKey + strUserName + strPassword;
        strEncryptionHashMaster = b64_md5(strEncryptionHashMaster);
        
        document.getElementById("ctl00_txtEncryptionHash").value = strEncryptionHashMaster;
        document.getElementById("ctl00_txtLoginPassword").value = getFakeFieldValue(document.getElementById("ctl00_txtLoginPassword").value.length);
    }
    else {
        strDate = document.getElementById("ctl00_pageContentPlaceHolder_txtEncryptionDate").value;
        strPublicKey = document.getElementById("ctl00_pageContentPlaceHolder_txtEncryptionPublicKey").value;
        strUserName = document.getElementById("ctl00_pageContentPlaceHolder_txtLoginUserName").value;
        strPassword = document.getElementById("ctl00_pageContentPlaceHolder_txtLoginPassword").value;

        strEncryptionHash = strDate + strPublicKey + strUserName + strPassword;
        strEncryptionHash = b64_md5(strEncryptionHash);
        
        document.getElementById("ctl00_pageContentPlaceHolder_txtEncryptionHash").value = strEncryptionHash;
        document.getElementById("ctl00_pageContentPlaceHolder_txtLoginPassword").value = getFakeFieldValue(document.getElementById("ctl00_pageContentPlaceHolder_txtLoginPassword").value.length);
    }
    
    return true;
}

function base64encode(str) {
	var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

	var c1, c2, c3;
	var len = str.length;
	var i = 0;
	var out = "";

	while(i < len) {
	    c1 = str.charCodeAt(i++) & 0xff;
	    
	    if(i == len) {
		    out += base64EncodeChars.charAt(c1 >> 2);
		    out += base64EncodeChars.charAt((c1 & 0x3) << 4);
		    out += "==";
		    break;
	    }

	    c2 = str.charCodeAt(i++);
	    if(i == len) {
		    out += base64EncodeChars.charAt(c1 >> 2);
		    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 
		    out += base64EncodeChars.charAt((c2 & 0xF) << 2);
		    out += "=";
		    break;
	    }

	    c3 = str.charCodeAt(i++);
	    out += base64EncodeChars.charAt(c1 >> 2);
        out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
	    out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
        out += base64EncodeChars.charAt(c3 & 0x3F);
	}

	return out;
}

function encryptFormFields() {
    //the form is validated so we can encrypt the fields now
    var fields = document.getElementsByTagName("INPUT");

    for(i=0; i<fields.length; i++) {
	    var current = fields[i];
		
	    if(current.getAttribute("encryption") != null && current.getAttribute("encryption") == "true") {
	        current.value = base64encode(current.value)
	    }
    }
}