/* Define two custom functions (asc and desc) for date sorting */
$(document).ready(function() {
	jQuery.fn.dataTableExt.oSort['date-case-asc']  = function(x,y) {
		var dateFormat = $.datepicker._defaults.dateFormat;
		if (x == null || y ==null)
			return 0;
		var dateX = null;
		var dateY = null;
		try {
			dateX = $.datepicker.parseDate(dateFormat,x);
		} catch (e) {
			return -1;
		}
		try {
			dateY = $.datepicker.parseDate(dateFormat,y);
		} catch (e) {
			return 1;
		}
		return ((dateX.getTime() < dateY.getTime()) ?  -1 : ((dateX.getTime() > dateY.getTime()) ? 1 : 0));
	};
	
	jQuery.fn.dataTableExt.oSort['date-case-desc'] = function(x,y) {
		var dateFormat = $.datepicker._defaults.dateFormat;		
		if (x == null || y ==null)
			return 0;
		var dateX = null;
		var dateY = null;
		try {
			dateX = $.datepicker.parseDate(dateFormat,x);
		} catch (e) {
			return 1;
		}
		try {
			dateY = $.datepicker.parseDate(dateFormat,y);
		} catch (e) {
			return -1;
		}
		return ((dateX.getTime() < dateY.getTime()) ?  1 : ((dateX.getTime() > dateY.getTime()) ? -1 : 0));
	};	

	// sort for french full datetime format "dd/mm/YYY hh:ii:ss"
        jQuery.fn.dataTableExt.oSort['dateTime-case-asc'] = function(a, b) {
                if (trim(a) != '') {
           				var aWithoutHTML = a.replace(/\n/g," ").replace(/&nbsp;/g,"").replace(/<.*?>/g,"");
                        var frDatea = trim(aWithoutHTML).split(' ');
                        var frTimea = frDatea[1].split(':');
                        var frDatea2 = frDatea[0].split('/');
                        var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1] + frTimea[2]) * 1;
                        } else {
                        var x = 10000000000000; // = l'an 1000 ...
                        }
                if (trim(b) != '') {
		                var bWithoutHTML = b.replace(/\n/g," ").replace(/&nbsp;/g,"").replace(/<.*?>/g,"");
                        var frDateb = trim(bWithoutHTML).split(' ');
                        var frTimeb = frDateb[1].split(':');
                        frDateb = frDateb[0].split('/');
                        var y = (frDateb[2] + frDateb[1] + frDateb[0] + frTimeb[0] + frTimeb[1] + frTimeb[2]) * 1;                      
                } else {
                        var y = 10000000000000;                 
                }
                var z = ((x < y) ? -1 : ((x > y) ? 1 : 0));
                return z;
        };

        jQuery.fn.dataTableExt.oSort['dateTime-case-desc'] = function(a, b) {
    // rsort for french full datetime format "dd/mm/YYY hh:ii:ss"
                if (trim(a) != '') {
           				var aWithoutHTML = a.replace(/\n/g," ").replace(/&nbsp;/g,"").replace(/<.*?>/g,"");
                        var frDatea = trim(aWithoutHTML).split(' ');
                        var frTimea = frDatea[1].split(':');
                        var frDatea2 = frDatea[0].split('/');
                        var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1] + frTimea[2]) * 1;                     
                } else {
                        var x = 10000000000000;                 
                }
                if (trim(b) != '') {
		                var bWithoutHTML = b.replace(/\n/g," ").replace(/&nbsp;/g,"").replace(/<.*?>/g,"");
                        var frDateb = trim(bWithoutHTML).split(' ');
                        var frTimeb = frDateb[1].split(':');
                        frDateb = frDateb[0].split('/');
                        var y = (frDateb[2] + frDateb[1] + frDateb[0] + frTimeb[0] + frTimeb[1] + frTimeb[2]) * 1;                            
                } else {
                        var y = 10000000000000;                 
                }                         
                var z = ((x < y) ? 1 : ((x > y) ? -1 : 0));                     
                return z;
        }; 
});
/* Trim String var */
function trim(str) 
{
	str = str.replace(/^\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}
/* Formating function for row details */
function fnFormatDetails ( nTr, label )
{
	var iIndex = oTable.fnGetPosition( nTr );
	var aData = oTable.fnSettings().aoData[iIndex]._aData;
	
	var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
	sOut += '<tr><td valign=top>'+label+'</td><td valign=top>'+aData[4]+'</td></tr>';
	sOut += '</table>';
	
	return sOut;
}