﻿
function addOption(idInput, idSelect) {
    //debugger
    var oInput = document.getElementById(idInput);
    if (oInput.value == "")
        return;
    var oElem = document.getElementById(idSelect);
    if (!checkOption(oElem, oInput.value)) {
        var optionObj = new Option(oInput.value, oInput.value); //text, value
        oElem.options[oElem.options.length] = optionObj;
        oInput.value = "";
    }
    else
        alert("Fill form and click Add");
}


function deleteOption(idSelect) {
    //debugger
    var oElem = document.getElementById(idSelect);
    if (oElem.selectedIndex != -1) {
        //deleteOption(formObject.accessList,formObject.accessList.selectedIndex)
        if (oElem.options.length != 0)
            oElem.options[oElem.selectedIndex] = null;
    }
    else
        alert("Select an option and click Delete");
}

function checkOption(selectObj, inputText) {
    var sltbool = false;
    for (i = 0; i < selectObj.options.length; i++) {
        if (inputText == selectObj.options[i].text || inputText == selectObj.options[i].value) {
            sltbool = true;
            break;
        }
    }
    return sltbool;
}


function byteArrayToString(byteArray) {
    var result = "";
    for (var i = 0; i < byteArray.length; i++)
        if (byteArray[i] != 0)
        result += String.fromCharCode(byteArray[i]);
    return utf8_decode(result);
}

function Serialize(sMeta, bpData, fCompressed) {
    var bpMeta = decode64(sMeta);
    var header = new Array();
    //var compress = new Array();
    //compress[0] = 0;
    var cs = new Array(4);
    for (var x = 0; x < 4; x++)
        cs[x] = 0;
    header = header.concat(ShortToArray(1)); //16bit flag for future use.
    header = header.concat(ShortToArray(bpMeta.length));
    header = header.concat(bpMeta);
    //header = header.concat(compress);
    header = header.concat(cs);   // checksum 4 byte (unencrypt data without iv)
    header = header.concat(bpData); // first 16 bytes is the IV
    header = encode64(header);

    var len = header.length;
    var d = 64;
    var out = "---- Encrypted by http://www.opaqueware.com ----\n";
    for (var i = 0; i < header.length; i += 64) {
        if (len < 64) {
            out += header.substr(i);
            break;
        }
        out += header.substr(i, d) + "\n";
        len -= 64;
    }
    return out;
}

function AarryToLong(arr) {
var num0 = arr[0];
var num1 = arr[1];
var num2 = arr[2];
var num3 = arr[3];
var num = 0; 
num = num | (num0 << 24);
num = num | (num1 << 16);
num = num | (num2 << 8);
num = num | num3;
return num;
}

function AarryToShort(arr) {
    var num0 = arr[0];
    var num1 = arr[1];
    var num = 0;
    num = num | (num0 << 8);
    num = num | num1;
    return num;
}

//Big-Endian [0]=MLB, [3]=LSB 
function LongToArray(num) {
    bytes = new Array(4);
    bytes[0] = num >> 24;
    bytes[1] = num >> 16;
    bytes[2] = num >> 8;
    bytes[3] = num;
    return bytes;
}

function ShortToArray(num) {
    bytes = new Array(2);
    bytes[1] = num & (255);
    num = num >> 8
    bytes[0] = num & (255);
    return bytes;
}
/*
function Checksum(arr, start) {
    //largest prime smaller than 65536. base = 65521
    var unBase = 65521;
    var unAdlerStart = 1;
    var nSize = arr.length;
    if (nSize < 32)
        return 0;

    var unSum1 = unAdlerStart & 0xFFFF;
    var unSum2 = (unAdlerStart >> 16) & 0xFFFF;
    for (var i = start; i < nSize; i++)
    {
        unSum1 = (unSum1 + arr[i]) % unBase;// AdlerBase;
        unSum2 = (unSum1 + unSum2) % unBase;// AdlerBase;
    }
    return ((unSum2 << 16) + unSum1);
}
*/

function getCookie(c_name) {
    //debugger;
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf("&", c_start);
            if (c_end == -1)
                c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

function getQuerystring(key, def) {
    if (def == null) def = "";
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if (qs == null)
        return def;
    else
        return qs[1];
}    


var Url = {
    // public method for url encoding
    encode: function(string) {
        return escape(this._utf8_encode(string));
    },

    // public method for url decoding
    decode: function(string) {
        return this._utf8_decode(unescape(string));
    },

    // private method for UTF-8 encoding
    _utf8_encode: function(string) {
        string = string.replace(/\r\n/g, "\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if ((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode: function(utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while (i < utftext.length) {
            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if ((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i + 1);
                c3 = utftext.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
        }
        return string;
    }
}
