    /** SERVICE FUNCTIONS FOR PACKING APPLET HTML-PAGES **/

function msieversion() {
    var ua= window.navigator.userAgent;
    if (ua.toLowerCase().indexOf("opera")>=0) return 0;
    var msie = ua.indexOf("MSIE ");
    if (msie>0)
        return parseInt(ua.substring(msie+5,ua.indexOf(".",msie)));
    else
        return 0;
}
function netscapeversion() {
    if (window.navigator.appName.toLowerCase()!="netscape") return 0;
    if (window.navigator.userAgent.toLowerCase().indexOf("opera")>=0) return 0;
    var version = window.navigator.appVersion;
    if (version==null || version.length<2) return 0;
    var p = version.indexOf(".");
    if (p<=0) return 0;
    return parseInt(version.substring(0,p));
}
function javaEnabled(surely) {
    if (msieversion()==3) return surely==null || !surely;
        // MSIE 3.0 does not support javaEnabled method: suppose that Java presents
    return window.navigator.javaEnabled();
}
function scrW() {
    if (window.screen == null) return 800;
    if (screen.availWidth == null) return screen.width;
    return screen.availWidth;
}
function scrH() {
    if (window.screen == null) return 600;
    if (screen.availHeight == null) return screen.height;
    return screen.availHeight;
}
function pad(s, padLen, pad, right) {
    s += "";
    if (pad == null) pad = " ";
    while (s.length < padLen)
        if (right)
            s += pad;
        else
            s = pad + s;
    return s;
}
function split(s, separators) {
    var result = new Array();
    for (var p = 0; p < s.length; ) {
        var q = p;
        while (q < s.length && separators.indexOf(s.charAt(q)) == -1) q++;
        result[result.length] = s.substring(p,q);
        q++;
        p = q;
    }
    return result;
}
function trimLeft(s,trimmedChars) {
    s += "";
    var k = 0;
    if (trimmedChars==null) {
        while (k<s.length && (s.charAt(k)==' ' || s.charAt(k)=='\t')) k++;
    } else {
        while (k<s.length && (trimmedChars.indexOf(s.charAt(k))!=-1)) k++;
    }
    return s.substring(k);
}
function trimRight(s,trimmedChars) {
    s += "";
    var k = s.length;
    if (trimmedChars==null) {
        while (k>0 && (s.charAt(k-1)==' ' || s.charAt(k-1)=='\t')) k--;
    } else {
        while (k>0 && (trimmedChars.indexOf(s.charAt(k-1))!=-1)) k--;
    }
    return s.substring(0,k);
}
function trim(s,trimmedChars) {
    return trimLeft(trimRight(s,trimmedChars),trimmedChars);
}
function replace(s, oldSubstring, newSubstring) {
    var len = s.length;
    var oldLen = oldSubstring.length;
    if (oldLen == 0) return s;
    var p = s.indexOf(oldSubstring);
    if (p == -1) return s;
    var result = s.substring(0,p) + newSubstring;
    p += oldLen;
    for (; p < len; ) {
      var q = s.indexOf(oldSubstring,p);
      if (q == -1) break;
      result += s.substring(p,q) + newSubstring;
      p = q + oldLen;
    }
    result += s.substring(p);
    return result;
}

function canWork(notShowMessage) {
    if (!javaEnabled()) return false;
    if (top.windowMainApplet==null) {
        if (notShowMessage==null || !notShowMessage)
            alert("This HTML-page is not completely loaded yet!");
        return false;
    }
    return true;
}
function showMyErrorMessage(msg,url,line) {
    if (window.errorMessageA != null)
        alert(window.errorMessageA+"\n(System error message: "+msg+")"+window.errorMessageB);
    window.onerror = window.onerrorSave;
    return true;
}
function getApp(name,notShowMessage) {
// For compatibility with this function, all Java applets must override "toString()" method
// and return a string containing "Successfully loaded Java applet" substring as it's result,
// and also must define "getAppletInfo()" method that returns non-empty string.
    window.errorMessageA = window.errorMessageB = null;
    if (notShowMessage==null || !notShowMessage) {
        window.errorMessageA = "Error while accessing applet information for the \""
            + name + "\" Java applet.";
        window.errorMessageB = "\n\nMaybe, this applet is not correctly loaded.\n"
            + "Please wait until it will be completely loaded, "
            + "or please try to reload this page.";
    }
    var opera = window.opera != null;
    if (window.onerrorSave == null)
        window.onerrorSave = window.onerror;

    var app = null;
    var appInfo = null;
    var appEmbedded = null;
    var onerrorSaveLocal = window.onerror;
    window.onerror = null;  // - avoiding an incorrect exception in Netscape Navigator 3
                            // ("Can't reflect applet "(null)": not loaded yet")
                            // sometimes appeared while accessing correctly loaded applets
    app = eval("document."+name);
    appEmbedded = eval("document.embeds."+name);
    window.onerror = onerrorSaveLocal;

    if (appEmbedded != null)
        app = appEmbedded;
    var systemErrorMessage = null;
    /*@cc_on@*/
    /*@if (@_jscript_version >= 5)
    try {                                   // some MSIE (for example, MSIE 5.0) don't understand onerror-based catching
    @else @*/
    window.onerror = showMyErrorMessage;    // catching exceptions while calling non-existing method
    /*@end @*/
    appInfo = app == null? null:            // a case of Netscape browser
        opera? app.toString():              // MSIE + Java2 cannot call applet's toString
        app.getAppletInfo();                // MSIE and Mozilla (but not Opera) will catch an exception here
    /*@if (@_jscript_version >= 5)
    } catch(e) {
        systemErrorMessage = e==null || e.description==null? "unknown error": e.description+"";
    }
    @else @*/
    window.onerror = window.onerrorSave;
    window.onerrorSave = null;
    /*@end @*/

    if (app == null
        || systemErrorMessage != null
        || appInfo == null
        || (opera && (appInfo+"").indexOf("Successfully loaded Java applet")==-1)) {
        if (window.errorMessageA != null) {
            if (app == null)
                alert("Cannot find \"" + name + "\" Java applet." + window.errorMessageB);
            else if (systemErrorMessage != null)
                alert("An exception occured while accessing applet information for the \""
                    + name + "\" Java applet. (System exception information: " + systemErrorMessage + ")"
                    + window.errorMessageB);
            else if (appInfo == null)
                alert("Cannot access applet information for the \"" + name + "\" Java applet." + window.errorMessageB);
            else
                alert("Cannot call \"" + name + "\" Java applet." + window.errorMessageB);
        }
        return null;
    }
    return app;
}

