// tableData - Custom settings and ordering plugins

/**
* Sort properly numbers with commas that may be enclosed in HTML tags, e.g. 1,000  1,100,090 1,234.56 <strong>1000</strong>, $100, 5% 3.2%
*/

function isCommaFormattedNumber (str) {		
  var r1 = /^[+-]?\d+(,\d{3})*\.?\d*$/;
  var r2 = /^[+-]?\d+(\.\d{3})*\,?\d*$/;
  var r3 = /^[+-]?\d+(,\d+)$/;
  if (r1.test(str)) { regex_id = 1; return true; }
  else if (r2.test(str)) { regex_id = 2; return true; }
  else if (r3.test(str)) { regex_id = 3; return true; }
  else { regex_id = 0; return false; }
}

function getCommaFormattedNumber (str) {
    var r1 = /^[+-]?\d+(,\d{3})*\.?\d*$/;
    var r2 = /^[+-]?\d+(\.\d{3})*\,?\d*$/;
    var r3 = /^[+-]?\d+(,\d+)$/;
    var regex_id = 0;
    if (r1.test(str)) { regex_id = 1;  }
    else if (r2.test(str)) { regex_id = 2;  }
    else if (r3.test(str)) { regex_id = 3;  }
    else { regex_id = 0; return str; }

	var x = null;
    switch (regex_id) {
        case 1: x = str.replace( /,/, "" );
            break;
        case 2: x = str.replace( /\./, "" );
            x = x.replace( /,/, "." );
            break;
        case 3: x = str.replace( /,/, "." );
            break;
        default:
            // we should never reach this line!
            return str;
    }
    x = parseFloat( x );
    return x;
}

function parseCommaFormattedNumber(a, sorting_order) {  
	var empty_value = (sorting_order == 'asc') ? Number.MAX_VALUE : -Number.MAX_VALUE; 
	a = a.replace(/<\/?[^>]+(>|$)/g, "").replace(/[\s|\+|%|\$\£\€]/g, "");
	if (( a == "-" ) || (a == "+") || (a == "") || (a == "&nbsp;")) a = empty_value;
	else a = getCommaFormattedNumber(a);
	return a;
}

jtQuery.fn.dataTableExt.aTypes.unshift(
	function ( sData )
	{			    
		sData = sData.replace(/<\/?[^>]+(>|$)/g, "").replace(/[\s|\+|%|\$\£\€]/g, "");
		if ((sData == "")||(sData == "&nbsp;")) return 'numeric-comma';		
		if (isCommaFormattedNumber(sData)) return 'numeric-comma';
		else return null;										
	}
);
	
jtQuery.fn.dataTableExt.oSort['numeric-comma-asc']  = function(a,b) {
	var x = parseCommaFormattedNumber(a, 'asc'), y = parseCommaFormattedNumber(b, 'asc');	
	return ((x < y) ? -1 : ((x > y) ?  1 : 0));	
};

jtQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) {
	var x = parseCommaFormattedNumber(a, 'desc'), y = parseCommaFormattedNumber(b, 'desc');	
	return ((x < y) ?  1 : ((x > y) ? -1 : 0));		
};

/*
// Uncomment this for date string comparisons

function isDateStrType(str) {
    var d = Date.parse(str);
    if (isNaN(d) == false) return true;
    else return false;
}

function parseDateStrType(str) {
    var d = Date.parse(str);
    if (isNaN(d) == false) return 0;
    else return d;
}

jtQuery.fn.dataTableExt.aTypes.unshift(
    function ( sData )
    {
        sData = sData.replace(/<\/?[^>]+(>|$)/g, "");
        if ((sData == "")||(sData == "&nbsp;")) return 'date-str';
        if (isDateStrType(sData)) return 'date-str';
        else return null;
    }
);

jtQuery.fn.dataTableExt.oSort['date-str-asc']  = function(a,b) {
    var x = parseDateStrType(a, 'asc'), y = parseDateStrType(b, 'asc');
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jtQuery.fn.dataTableExt.oSort['date-str-desc'] = function(a,b) {
    var x = parseDateStrType(a, 'desc'), y = parseDateStrType(b, 'desc');
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};
 */
