package/ui/phpvirtualbox/js/utils.js
/**
 * Returns the result of case-insensitive string comparison using 'natural' algorithm comparing str1 to str2
 * @param {String} str1 - 1st string
 * @param {String} str2 - 2nd string
 * @return {Integer} integer for use in list sorting comparison
 */
Returns the result of case-insensitive string comparison using 'natural' algorithm comparing str1 to str2
@param {String} str1 - 1st string
@param {String} str2 - 2nd string
@return {Integer} integer for use in list sorting comparison
Returns the result of case - insensitive string comparison using ' natural ' algorithm comparing str1 to str2 @param { String } str1 - 1st string @param { String } str2 - 2nd string @return { Integer } integer for use in list sorting comparison
function strnatcasecmp(str1, str2) {
    var a = (str1+'').toLowerCase();    var b = (str2+'').toLowerCase();
    var isWhitespaceChar = function (a) {
        return a.charCodeAt(0) <= 32;
    }; 
    var isDigitChar = function (a) {
        var charCode = a.charCodeAt(0);
        return ( charCode >= 48  && charCode <= 57 );
    }; 
    var compareRight = function (a,b) {
        var bias = 0;
        var ia = 0;
        var ib = 0; 
        var ca;
        var cb;
        for (;; ia++, ib++) {
            ca = a.charAt(ia);            cb = b.charAt(ib);
            if (!isDigitChar(ca) &&
                !isDigitChar(cb)) {
                return bias;            } else if (!isDigitChar(ca)) {
                return -1;
            } else if (!isDigitChar(cb)) {
                return +1;
            } else if (ca < cb) {                if (bias == 0) {
                    bias = -1;
                }
            } else if (ca > cb) {
                if (bias == 0) {                    bias = +1;
                }
            } else if (ca == 0 && cb == 0) {
                return bias;
            }        }
    };
    var ia = 0, ib = 0;
    var nza = 0, nzb = 0;    var ca, cb;
    var result;
    while (true) {
        ca = a.charAt(ia);
        cb = b.charAt(ib);
        while (isWhitespaceChar( ca ) || ca =='0') {
            if (ca == '0') {
                nza++;
            } else {                
                nza = 0;
            }
            ca = a.charAt(++ia);        }
        while (isWhitespaceChar( cb ) || cb == '0') {
            if (cb == '0') {
                nzb++;            } else {
                nzb = 0;
            }
             cb = b.charAt(++ib);
        }
        if (isDigitChar(ca) && isDigitChar(cb)) {            if ((result = compareRight(a.substring(ia), b.substring(ib))) != 0) {
                return result;
            }
        }
         if (ca == 0 && cb == 0) {
            return nza - nzb;
        } 
        if (ca < cb) {
            return -1;
        } else if (ca > cb) {
            return +1;        }
        ++ia; ++ib;
    }
}
function strnatcasecmp ( str1 , str2 ) { var a = ( str1 + '' ) . toLowerCase ( ) ; var b = ( str2 + '' ) . toLowerCase ( ) ; var isWhitespaceChar = function ( a ) { return a . charCodeAt ( 0 ) <= 32 ; } ; var isDigitChar = function ( a ) { var charCode = a . charCodeAt ( 0 ) ; return ( charCode >= 48 && charCode <= 57 ) ; } ; var compareRight = function ( a , b ) { var bias = 0 ; var ia = 0 ; var ib = 0 ; var ca ; var cb ; for ( ; ; ia ++ , ib ++ ) { ca = a . charAt ( ia ) ; cb = b . charAt ( ib ) ; if ( ! isDigitChar ( ca ) && ! isDigitChar ( cb ) ) { return bias ; } else if ( ! isDigitChar ( ca ) ) { return - 1 ; } else if ( ! isDigitChar ( cb ) ) { return + 1 ; } else if ( ca < cb ) { if ( bias == 0 ) { bias = - 1 ; } } else if ( ca > cb ) { if ( bias == 0 ) { bias = + 1 ; } } else if ( ca == 0 && cb == 0 ) { return bias ; } } } ; var ia = 0 , ib = 0 ; var nza = 0 , nzb = 0 ; var ca , cb ; var result ; while ( true ) { ca = a . charAt ( ia ) ; cb = b . charAt ( ib ) ; while ( isWhitespaceChar ( ca ) || ca == '0' ) { if ( ca == '0' ) { nza ++ ; } else { nza = 0 ; } ca = a . charAt ( ++ ia ) ; } while ( isWhitespaceChar ( cb ) || cb == '0' ) { if ( cb == '0' ) { nzb ++ ; } else { nzb = 0 ; } cb = b . charAt ( ++ ib ) ; } if ( isDigitChar ( ca ) && isDigitChar ( cb ) ) { if ( ( result = compareRight ( a . substring ( ia ) , b . substring ( ib ) ) ) != 0 ) { return result ; } } if ( ca == 0 && cb == 0 ) { return nza - nzb ; } if ( ca < cb ) { return - 1 ; } else if ( ca > cb ) { return + 1 ; } ++ ia ; ++ ib ; } }
Returns the result of case-insensitive string comparison using 'natural' algorithm comparing str1 to str2
 @param {String} str1 - 1st string
 @param {String} str2 - 2nd string
 @return {Integer} integer for use in list sorting comparison
Returns the result of case - insensitive string comparison using ' natural ' algorithm comparing str1 to str2 @param { String } str1 - 1st string @param { String } str2 - 2nd string @return { Integer } integer for use in list sorting comparison
// Returns the result of case-insensitive string comparison using 'natural' algorithm  
 // 
 // version: 1004.2314
 // discuss at: http://phpjs.org/functions/strnatcasecmp    // +      original by: Martin Pool
 // + reimplemented by: Pierre-Luc Paour
 // + reimplemented by: Kristof Coomans (SCK-CEN (Belgian Nucleair Research Centre))
 // + reimplemented by: Brett Zamir (http://brett-zamir.me)
 // +      bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // *     example 1: strnatcasecmp(10, 1);
 // *     returns 1: 1
 // *     example 1: strnatcasecmp('1', '10');
 // *     returns 1: -1
 // The longest run of digits wins.  That aside, the greatest        // value wins, but we can't know that it will until we've scanned
 // both numbers to know that they have the same magnitude, so we
 // remember it in BIAS.
 // only count the number of zeroes leading the last number compared        nza = nzb = 0;
 // skip over leading spaces or zeros
 // only count consecutive zeroes
 // only count consecutive zeroes
 // process run of digits
 // The strings compare the same.  Perhaps the caller
 // will want to call strcmp to break the tie.
