function onSilverlightError(sender, args) {

    var appSource = "";
    if (sender != null && sender != 0) {
        appSource = sender.getHost().Source;
    }
    var errorType = args.ErrorType;
    var iErrorCode = args.ErrorCode;

    var errMsg = "Unhandled Error in Silverlight 2 Application " + appSource + "\n";

    errMsg += "Code: " + iErrorCode + "    \n";
    errMsg += "Category: " + errorType + "       \n";
    errMsg += "Message: " + args.ErrorMessage + "     \n";

    if (errorType == "ParserError") {
        errMsg += "File: " + args.xamlFile + "     \n";
        errMsg += "Line: " + args.lineNumber + "     \n";
        errMsg += "Position: " + args.charPosition + "     \n";
    }
    else if (errorType == "RuntimeError") {
        if (args.lineNumber != 0) {
            errMsg += "Line: " + args.lineNumber + "     \n";
            errMsg += "Position: " + args.charPosition + "     \n";
        }
        errMsg += "MethodName: " + args.methodName + "     \n";
    }

    throw new Error(errMsg);
}

var beginProgress = false;

function onSourceDownloadProgressChanged(sender, eventArgs) {
    var pTexte = sender.findName("pourcentage");
    var anim = sender.findName("animProgress");

    if (!beginProgress) {
        beginProgress = true;
        anim.Begin();
        anim.Pause();
    }

    var dest = Math.floor(eventArgs.progress * 4000);
    var temp = dest.toString();

    if (temp.length < 4) {
        for (var i = 0; i < (4 - temp.length); i++) {
            temp = "0" + temp;
        }
    }
    var seconds = temp.substr(0, 1);
    var fractSeconds = temp.substr(1, temp.length);

    anim.Seek("0:0:" + seconds + "." + fractSeconds);

    var perc = (eventArgs.progress * 100);
    pTexte.Text = Math.round(perc) + "%";
}