function core_areCookiesEnabled() {
    var cookieEnabled = false;
    if (typeof document.cookie == "string") {
        if (document.cookie.length == 0) {
            document.cookie = "test";
            cookieEnabled = (document.cookie == "test");
            document.cookie = "";
        } else {
            cookieEnabled = true;
        }
    }
    return cookieEnabled;
}

function core_getContextPath() {
    var path = document.location.pathname;
    var n = path.indexOf( "/", 1 );
    return path.substring( 0, n );
}

function core_getCookie( name ) {
    // See http://wiki.script.aculo.us/scriptaculous/show/Cookie
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
}

function core_getQueryArg( key ) {
    var qs = document.location.search;
    if( qs.indexOf( "?" ) == 0 ) {
        qs = qs.substr( 1 );
    }
    if( qs == null ) {
        return "";
    }
    var a = qs.split( "&" );
    for( var i = 0, n = a.length; i < n; i++ ) {
        var kv = a[i].split( "=" );
        if( kv[0] == key ) {
            return kv[1];
        }
    }
    return null;
}

function core_getQueryStringWithoutPrefix( pfx, q ) {
    if( q == null )
        q = document.location.search;
    if( q.substring( 0, 1 ) == "?" )
        q = q.substring( 1 );
    var aIn = q.split( "&" );
    var aOut = new Array();
    for( var i = 0; i < aIn.length; i++ ) {
        if( aIn[i].substring( 0, pfx.length ) != pfx )
            aOut[aOut.length] = aIn[i];
    }
    return( aOut.join( "&" ) );
}

function core_getValue( element ) {
    if( element == null ) {
        return null;
    }
    if( element.type == "select-one" ) {
        if( element.selectedIndex < 0 ) {
            return null;
        }
        return element.options[element.selectedIndex].value;
    }
    if( element.type == "file" || element.type == "hidden" || element.type == "text" || element.type == "textarea" ) {
        return element.value;
    }
}

function core_isEmailAddressValid( email ) {

    function domainIsValid( domain ) {
        if( domain.length < 3 ) {
            return false;
        }
        var lastDot = -1;
        var n =domain.length;
        for( var i = 0; i < n; i++ ) {
            var c = domain.charAt( i );
            switch( c ) {
            case '.':
                if( i == 0 || i == n - 1 || lastDot == i - 1 ) {
                    return false;
                }
                lastDot = i;
                break;
            default:
                if( ! isValidAtomChar( c ) ) {
                    return false;
                }
                break;
            }
        }
        return lastDot != -1;
    }

    function isValidAtomChar( c ) {
        switch( c ) {
        case '(':
        case ')':
        case '<':
        case '>':
        case ',':
        case ';':
        case ':':
        case '\\':
        case '"':
        case '[':
        case ']':
        case ' ':
        case '\t':
        case '\n':
            return false;
        default:
            return c.charCodeAt(0) >= 32 && c.charCodeAt(0) <= 127;
        }
    }

    function localAddressIsValid( address ) {
        var n = address.length;
        if( n == 0 ) {
            return false;
        }
        for( var i = 0; i < n; i++ ) {
            var c = address.charAt( i );
            switch( c ) {
            case '.':
                if( i == 0 ) {
                    return false; // first character can't be a .
                }
                break;
            default:
                if( ! isValidAtomChar( c ) ) {
                    return false;
                }
                break;
            }
        }
        return true
    }

    if( email == null ) {
        return false;
    }
    var parts = email.split( "@" );
    if( parts.length != 2 ) {
        return false;
    }
    if( ! localAddressIsValid( parts[0] ) ) {
        return false;
    }
    return domainIsValid( parts[1] );
}

function core_isEmpty( element ) {
    if( element.type == "file" || element.type == "hidden" || element.type == "select-one" || element.type == "text" || element.type == "textarea" ) {
        return core_isStringBlank( core_getValue( element ) );
    }
    if( element.type == "select-multiple" ) {
        return core_isMultiSelectEmpty( element );
    }
    return false;
}

function core_isInteger( value ) {
    if( value == null || value == "" )
        return( false );

    var re = new RegExp( "^-?\\d+$" );
    return( re.test( value ) );
}

function core_isMultiSelectEmpty( element ) {
    for ( var i = 0 ; i < element.options.length ; i++ ) {
        if ( element.options[i].selected ) {
            return false;
        }
    }
    return true;
}

function core_isStringBlank( s ) {
    if( s == null ) {
        return true;
    }
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ( (c != ' ') && (c != '\n')  && (c != '\r') && (c != '\t') ) {
            return false;
        }
    }
    return true;
}

function core_trimString( s ) {
    // Strip any leading or trailing white space
    s = s.replace( /^(\s)+/, "" );
    s = s.replace( /(\s)+$/, "" );
    return s;
}


