// See javascript_uri_tools.html

var newlines = /(\r\n|\r|\n)/g;

function createJavaScriptURIFromNonInterpretedCodeString(s) {
    try {
        return "javascript:" + encodeURIComponent(s.replace(newlines, "\r\n"));
    } catch (e) {
        return "javascript:";
    }
}

function createJavaScriptURIFromAnonymousFunction(func, args) {
    return createJavaScriptURIFromNonInterpretedCodeString("(" + func.toString() + ")(" + args + ")");
}

function getNonInterpretedCodeStringFromJavaScriptURI(uri) {
    if (uri.search(/javascript:/i) == 0) {
        try {
            return decodeURIComponent(uri.substr(11)).replace(newlines, "\n");
        } catch (e) {
            return "";
        }
    } else {
        return "";
    }
}

function executeJavaScriptURI(uri) {
    eval(getNonInterpretedCodeStringFromJavaScriptURI(uri));
}
