
function toInt (from) {
    out = "";
    cmp = "0123456789";
    for (var i = 0; i < from.length; i++) {
        if (cmp.indexOf (from.substring(i, i + 1)) >= 0)
            out = out + from.substring(i, i + 1);
    }
    return out;
}

function toDec (from) {
    out = "";
    cmp = "0123456789,.";
    for (var i = 0; i < from.length; i++) {
        if (cmp.indexOf (from.substring(i, i + 1)) >= 0)
            if (from.substring(i, i + 1) == ",")
                out = out + ".";
            else
                out = out + from.substring(i, i + 1);
        if (from.substring(i, i + 1) == "." ||
            from.substring(i, i + 1) == ",")
            cmp = "0123456789";
    }
    return out;
}

function toDecPrec (from, precision) {
    if (!from) return "";
    out = "";
    cmp = "0123456789.,";
    for (var i = from.length; i >= 0; i--) {
        if (cmp.indexOf (from.substring(i, i + 1)) >= 0)
            if (from.substring(i, i + 1) == ",")
                out = "." + out;
            else
                out = from.substring(i, i + 1) + out;
        if (from.substring(i, i + 1) == "." ||
            from.substring(i, i + 1) == ",")
            cmp = "0123456789";
    }
    prec = Math.pow(10, precision);
    out = Math.round(out * prec) / prec;
    if (out == 0) out = "";
    return out;
}


numberoftimes = 0;

function onlyonce() {
    numberoftimes += 1;
    if (numberoftimes > 1) {
        alert("Please wait..");
        return false;
    }
    else {
        return true;
    }
}

function leave_chars (from, allowed_chars) {
    out = "";
    for (var i = 0; i < from.length; i++) {
        if (allowed_chars.indexOf (from.substring(i, i + 1)) >= 0)
            out = out + from.substring(i, i + 1);
    }
    return out;
}

function check_holding_number (hld) {

    // if the first char is a letter, assume i'ts a special holding number => ok
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
              'abcdefghijklmnopqrstuvwxyz';
    if (letters.indexOf(hld.charAt(0)) > -1) return true; 

    // strip everything except numbers & chars
    hld = leave_chars (hld, '1234567890ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz');

    s1 = parseFloat(hld.substring(0, 2));
    s2 = parseFloat(hld.substring(2, 4));
    s3 = parseFloat(hld.substring(4, 6));
    sum = s1 + s2 * 2 + s3 * 3;
    skew = 0;
    if (s1 == 50 && s2 == 0 && s3 < 11) skew = -1;
    charset = 'ABCDEFGHJKLMNPQRSTUVWXYZ';
    checksum = charset.charAt(sum % 23 + skew);

    if (checksum == hld.substring(hld.length - 1, hld.length)) return true;
    else return false;
}

var iban_required_countries = 
    ",AT,BE,EE,ES,NL,IE,IT,GR,CY,LT,LU,LV,MT,PL,PT,FR,SE," + 
    "DE,SK,SI,FI,GB,DK,CZ,HU,GI,GP,IS,LI,MQ,NO,GF,RE,RO";

var eu_countries = 
    ",AT,BE,CZ,CY,DE,DK,EE,ES,FI,FR,GB,GR,HU,IE,IT,LT,LU,LV,MT,NL,PL,PT,SE,SI,SK";

function check_iban (iban) {
    if (!iban) return false;
    // convert to uppercase
    tmp = iban.toUpperCase();
    // strip non-alphanums
    tmp = leave_chars(tmp, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    formatted_iban = tmp;
    // first 4 to end
    tmp = tmp.substring(4, tmp.length) + tmp.substring(0, 4);
    // replace letters with codes
    out = "";
    for (var i = 0; i < tmp.length; i++) {
        if (tmp.charCodeAt(i) > 64 && tmp.charCodeAt(i) < 91)
             out = out + (tmp.charCodeAt(i) - 55);
        else out = out + tmp.charAt(i);
    }
    tmp = out; msg = ''; step = 9;
    // calculate mod97 in 9+7+7.. byte chunks
    for (var i = 0; i < tmp.length; i = i + step) {
        if (i > 0) step = 7; 
        chunk = tmp.substring(i, i + step);
        if (i > 0) chunk = mod97 + chunk; // add previous chunks mod97 in the beginning of current one
        mod97 = chunk % 97;
        msg = msg + i + ') ' + chunk + ' mod97 = ' + mod97 + '\n';
    }
    //alert ('iban in: ' + iban + '\n' + 'tmp: ' + tmp + '\n' + msg + '\n');
    // if wrong iban checksum, return false
    if (mod97 != 1) return false;
    // if iban's beginning is not in the list of iban-countries, return false
    // if (iban_required_countries.indexOf(formatted_iban.substring(0,2)) < 0) return false;
    else return true;
}

function display (name, message) {
    if (document.all) {eval("document.all." + name + ".innerHTML='" + message + "'");}
    else if (document.getElementById) document.getElementById(name).innerHTML = message;
    else if (document.layers) document.layers[name].innerHTML = message;
}
