// Variables filled by AJAX requests.
var jarvis_base = '/jarvis-agent/porse-public/';

// Only show one error every 1 second.
var error_shown_at = 0;
var error_interval = 1000;

// Regular Expression for matching email addresses.
var email_valid_re = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;

//----------------------------------------------------------------------------
// UTILITY FUNCTIONS
//----------------------------------------------------------------------------
function escapeHtml (v) {
    return (typeof v !== 'string') ? v : v.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}

function getError (XMLHttpRequest, textStatus, errorThrown) {
    var now = new Date().getTime();
    if (now >= (error_shown_at + error_interval)) {
        error_shown_at = now;
        alert ('GET to ' + this.url + ' returned error: ' + (errorThrown || XMLHttpRequest.responseText));
    }
    // loginCheck ();
}

function postError (XMLHttpRequest, textStatus, errorThrown) {
    var now = new Date().getTime();
    if (now >= (error_shown_at + error_interval)) {
        error_shown_at = now;
        alert ('POST to ' + this.url + ' returned error: ' + (errorThrown || XMLHttpRequest.responseText) );
    }
    // loginCheck ();
}

function postSuccess (options, result) {
    if (result.success) return 1;
    var now = new Date().getTime();
    if (now >= (error_shown_at + error_interval)) {
        error_shown_at = now;
        alert ('POST to ' + options.url + ' failed with ' + result.message);
    }
    return 0;
}

function hashArg (url, arg_name, default_value) {
    var pairs = url.replace(/^#/, '').split('&');
    for (var i in pairs) {
        var pair = pairs[i].split ('=');
        if (arg_name == unescape (pair[0])) {
            return unescape (pair[1]);
        }
    }
    return default_value;
}

//----------------------------------------------------------------------------
// JQUERY EXTENSIONS
//----------------------------------------------------------------------------

jQuery.fn.exists = function () {
    return (jQuery(this).length > 0);
}
