function naturalCompare (a, b) {
		var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
			sre = /(^[ ]*|[ ]*$)/g,
			dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
			hre = /^0x[0-9a-f]+$/i,
			ore = /^0/,
			i = function(s) { return naturalCompare.insensitive && (''+s).toLowerCase() || ''+s },
			// convert all to strings strip whitespace
			x = i(a).replace(sre, '') || '',
			y = i(b).replace(sre, '') || '',
			// chunk/tokenize
			xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
			yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
			// numeric, hex or date detection
			xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
			yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
			oFxNcL, oFyNcL;
		// first try and sort Hex codes or Dates
		if (yD)
			if ( xD < yD ) return -1;
			else if ( xD > yD ) return 1;
		// natural sorting through split numeric strings and default strings
		for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
			// find floats not starting with '0', string or 0 if not defined (Clint Priest)
			oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
			oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
			// handle numeric vs string comparison - number < string - (Kyle Adams)
			if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }
			// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
			else if (typeof oFxNcL !== typeof oFyNcL) {
				oFxNcL += '';
				oFyNcL += '';
			}
			if (oFxNcL < oFyNcL) return -1;
			if (oFxNcL > oFyNcL) return 1;
		}
		return 0;
	}
/**
	 * This function performs a "natural sort" comparison of two items. This 
	 * algorithm is taken from Jim Palmer's natural sort algorith on his site:
	 * http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support/
	 */
This function performs a "natural sort" comparison of two items.
This function performs a " natural sort " comparison of two items .
function naturalCompare (a, b) {
		var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
			sre = /(^[ ]*|[ ]*$)/g,
			dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
			hre = /^0x[0-9a-f]+$/i,
			ore = /^0/,
			i = function(s) { return naturalCompare.insensitive && (''+s).toLowerCase() || ''+s },
			x = i(a).replace(sre, '') || '',
			y = i(b).replace(sre, '') || '',
			xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
			yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
			xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
			yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
			oFxNcL, oFyNcL;
		if (yD)
			if ( xD < yD ) return -1;
			else if ( xD > yD ) return 1;
		for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
			oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
			oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
			if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }
			else if (typeof oFxNcL !== typeof oFyNcL) {
				oFxNcL += '';
				oFyNcL += '';
			}
			if (oFxNcL < oFyNcL) return -1;
			if (oFxNcL > oFyNcL) return 1;
		}
		return 0;
	}
function naturalCompare ( a , b ) { var re = / (^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+) / gi , sre = / (^[ ]*|[ ]*$) / g , dre = / (^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4}) / , hre = / ^0x[0-9a-f]+$ / i , ore = / ^0 / , i = function ( s ) { return naturalCompare . insensitive && ( '' + s ) . toLowerCase ( ) || '' + s } , x = i ( a ) . replace ( sre , '' ) || '' , y = i ( b ) . replace ( sre , '' ) || '' , xN = x . replace ( re , '\0$1\0' ) . replace ( / \0$ / , '' ) . replace ( / ^\0 / , '' ) . split ( '\0' ) , yN = y . replace ( re , '\0$1\0' ) . replace ( / \0$ / , '' ) . replace ( / ^\0 / , '' ) . split ( '\0' ) , xD = parseInt ( x . match ( hre ) ) || ( xN . length != 1 && x . match ( dre ) && Date . parse ( x ) ) , yD = parseInt ( y . match ( hre ) ) || xD && y . match ( dre ) && Date . parse ( y ) || null , oFxNcL , oFyNcL ; if ( yD ) if ( xD < yD ) return - 1 ; else if ( xD > yD ) return 1 ; for ( var cLoc = 0 , numS = Math . max ( xN . length , yN . length ) ; cLoc < numS ; cLoc ++ ) { oFxNcL = ! ( xN [ cLoc ] || '' ) . match ( ore ) && parseFloat ( xN [ cLoc ] ) || xN [ cLoc ] || 0 ; oFyNcL = ! ( yN [ cLoc ] || '' ) . match ( ore ) && parseFloat ( yN [ cLoc ] ) || yN [ cLoc ] || 0 ; if ( isNaN ( oFxNcL ) !== isNaN ( oFyNcL ) ) { return ( isNaN ( oFxNcL ) ) ? 1 : - 1 ; } else if ( typeof oFxNcL !== typeof oFyNcL ) { oFxNcL += '' ; oFyNcL += '' ; } if ( oFxNcL < oFyNcL ) return - 1 ; if ( oFxNcL > oFyNcL ) return 1 ; } return 0 ; }
This function performs a "natural sort" comparison of two items.
This function performs a " natural sort " comparison of two items .
// convert all to strings strip whitespace
 // chunk/tokenize
 // numeric, hex or date detection
 // first try and sort Hex codes or Dates
 // natural sorting through split numeric strings and default strings
 // find floats not starting with '0', string or 0 if not defined (Clint Priest)
 // handle numeric vs string comparison - number < string - (Kyle Adams)
 // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
