Subversion Repositories ALCASAR

Rev

Rev 2976 | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
2808 rexy 1
/*
2
 * File:        jquery.dataTables.js
3179 rexy 3
 * Version:     1.8.2+jquery1.9fix+parseJSONfix2+bindfix+samesitefix+noeval
2808 rexy 4
 * Description: Paginate, search and sort HTML tables
5
 * Author:      Allan Jardine (www.sprymedia.co.uk)
6
 * Created:     28/3/2008
7
 * Language:    Javascript
8
 * License:     GPL v2 or BSD 3 point style
9
 * Project:     Mtaala
10
 * Contact:     allan.jardine@sprymedia.co.uk
11
 * 
12
 * Copyright 2008-2011 Allan Jardine, all rights reserved.
13
 *
14
 * This source file is free software, under either the GPL v2 license or a
15
 * BSD style license, as supplied with this software.
16
 * 
17
 * This source file is distributed in the hope that it will be useful, but 
18
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
19
 * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
20
 * 
21
 * For details please refer to: http://www.datatables.net
22
 */
23
 
24
/*
25
 * When considering jsLint, we need to allow eval() as it it is used for reading cookies
26
 */
27
/*jslint evil: true, undef: true, browser: true */
28
/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageProcess,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnArrayCmp,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn*/
29
 
30
(function($, window, document) {
31
	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
32
	 * Section - DataTables variables
33
	 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
34
 
35
	/*
36
	 * Variable: dataTableSettings
37
	 * Purpose:  Store the settings for each dataTables instance
38
	 * Scope:    jQuery.fn
39
	 */
40
	$.fn.dataTableSettings = [];
41
	var _aoSettings = $.fn.dataTableSettings; /* Short reference for fast internal lookup */
42
 
43
	/*
44
	 * Variable: dataTableExt
45
	 * Purpose:  Container for customisable parts of DataTables
46
	 * Scope:    jQuery.fn
47
	 */
48
	$.fn.dataTableExt = {};
49
	var _oExt = $.fn.dataTableExt;
50
 
51
 
52
	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
53
	 * Section - DataTables extensible objects
54
	 * 
55
	 * The _oExt object is used to provide an area where user defined plugins can be 
56
	 * added to DataTables. The following properties of the object are used:
57
	 *   oApi - Plug-in API functions
58
	 *   aTypes - Auto-detection of types
59
	 *   oSort - Sorting functions used by DataTables (based on the type)
60
	 *   oPagination - Pagination functions for different input styles
61
	 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
62
 
63
	/*
64
	 * Variable: sVersion
65
	 * Purpose:  Version string for plug-ins to check compatibility
66
	 * Scope:    jQuery.fn.dataTableExt
67
	 * Notes:    Allowed format is a.b.c.d.e where:
68
	 *   a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional
69
	 */
70
	_oExt.sVersion = "1.8.2";
71
 
72
	/*
73
	 * Variable: sErrMode
74
	 * Purpose:  How should DataTables report an error. Can take the value 'alert' or 'throw'
75
	 * Scope:    jQuery.fn.dataTableExt
76
	 */
77
	_oExt.sErrMode = "alert";
78
 
79
	/*
80
	 * Variable: iApiIndex
81
	 * Purpose:  Index for what 'this' index API functions should use
82
	 * Scope:    jQuery.fn.dataTableExt
83
	 */
84
	_oExt.iApiIndex = 0;
85
 
86
	/*
87
	 * Variable: oApi
88
	 * Purpose:  Container for plugin API functions
89
	 * Scope:    jQuery.fn.dataTableExt
90
	 */
91
	_oExt.oApi = { };
92
 
93
	/*
94
	 * Variable: aFiltering
95
	 * Purpose:  Container for plugin filtering functions
96
	 * Scope:    jQuery.fn.dataTableExt
97
	 */
98
	_oExt.afnFiltering = [ ];
99
 
100
	/*
101
	 * Variable: aoFeatures
102
	 * Purpose:  Container for plugin function functions
103
	 * Scope:    jQuery.fn.dataTableExt
104
	 * Notes:    Array of objects with the following parameters:
105
	 *   fnInit: Function for initialisation of Feature. Takes oSettings and returns node
106
	 *   cFeature: Character that will be matched in sDom - case sensitive
107
	 *   sFeature: Feature name - just for completeness :-)
108
	 */
109
	_oExt.aoFeatures = [ ];
110
 
111
	/*
112
	 * Variable: ofnSearch
113
	 * Purpose:  Container for custom filtering functions
114
	 * Scope:    jQuery.fn.dataTableExt
115
	 * Notes:    This is an object (the name should match the type) for custom filtering function,
116
	 *   which can be used for live DOM checking or formatted text filtering
117
	 */
118
	_oExt.ofnSearch = { };
119
 
120
	/*
121
	 * Variable: afnSortData
122
	 * Purpose:  Container for custom sorting data source functions
123
	 * Scope:    jQuery.fn.dataTableExt
124
	 * Notes:    Array (associative) of functions which is run prior to a column of this 
125
	 *   'SortDataType' being sorted upon.
126
	 *   Function input parameters:
127
	 *     object:oSettings-  DataTables settings object
128
	 *     int:iColumn - Target column number
129
	 *   Return value: Array of data which exactly matched the full data set size for the column to
130
	 *     be sorted upon
131
	 */
132
	_oExt.afnSortData = [ ];
133
 
134
	/*
135
	 * Variable: oStdClasses
136
	 * Purpose:  Storage for the various classes that DataTables uses
137
	 * Scope:    jQuery.fn.dataTableExt
138
	 */
139
	_oExt.oStdClasses = {
140
		/* Two buttons buttons */
141
		"sPagePrevEnabled": "paginate_enabled_previous",
142
		"sPagePrevDisabled": "paginate_disabled_previous",
143
		"sPageNextEnabled": "paginate_enabled_next",
144
		"sPageNextDisabled": "paginate_disabled_next",
145
		"sPageJUINext": "",
146
		"sPageJUIPrev": "",
147
 
148
		/* Full numbers paging buttons */
149
		"sPageButton": "paginate_button",
150
		"sPageButtonActive": "paginate_active",
151
		"sPageButtonStaticDisabled": "paginate_button paginate_button_disabled",
152
		"sPageFirst": "first",
153
		"sPagePrevious": "previous",
154
		"sPageNext": "next",
155
		"sPageLast": "last",
156
 
157
		/* Striping classes */
158
		"sStripeOdd": "odd",
159
		"sStripeEven": "even",
160
 
161
		/* Empty row */
162
		"sRowEmpty": "dataTables_empty",
163
 
164
		/* Features */
165
		"sWrapper": "dataTables_wrapper",
166
		"sFilter": "dataTables_filter",
167
		"sInfo": "dataTables_info",
168
		"sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
169
		"sLength": "dataTables_length",
170
		"sProcessing": "dataTables_processing",
171
 
172
		/* Sorting */
173
		"sSortAsc": "sorting_asc",
174
		"sSortDesc": "sorting_desc",
175
		"sSortable": "sorting", /* Sortable in both directions */
176
		"sSortableAsc": "sorting_asc_disabled",
177
		"sSortableDesc": "sorting_desc_disabled",
178
		"sSortableNone": "sorting_disabled",
179
		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
180
		"sSortJUIAsc": "",
181
		"sSortJUIDesc": "",
182
		"sSortJUI": "",
183
		"sSortJUIAscAllowed": "",
184
		"sSortJUIDescAllowed": "",
185
		"sSortJUIWrapper": "",
186
		"sSortIcon": "",
187
 
188
		/* Scrolling */
189
		"sScrollWrapper": "dataTables_scroll",
190
		"sScrollHead": "dataTables_scrollHead",
191
		"sScrollHeadInner": "dataTables_scrollHeadInner",
192
		"sScrollBody": "dataTables_scrollBody",
193
		"sScrollFoot": "dataTables_scrollFoot",
194
		"sScrollFootInner": "dataTables_scrollFootInner",
195
 
196
		/* Misc */
197
		"sFooterTH": ""
198
	};
199
 
200
	/*
201
	 * Variable: oJUIClasses
202
	 * Purpose:  Storage for the various classes that DataTables uses - jQuery UI suitable
203
	 * Scope:    jQuery.fn.dataTableExt
204
	 */
205
	_oExt.oJUIClasses = {
206
		/* Two buttons buttons */
207
		"sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left",
208
		"sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
209
		"sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right",
210
		"sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
211
		"sPageJUINext": "ui-icon ui-icon-circle-arrow-e",
212
		"sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w",
213
 
214
		/* Full numbers paging buttons */
215
		"sPageButton": "fg-button ui-button ui-state-default",
216
		"sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled",
217
		"sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled",
218
		"sPageFirst": "first ui-corner-tl ui-corner-bl",
219
		"sPagePrevious": "previous",
220
		"sPageNext": "next",
221
		"sPageLast": "last ui-corner-tr ui-corner-br",
222
 
223
		/* Striping classes */
224
		"sStripeOdd": "odd",
225
		"sStripeEven": "even",
226
 
227
		/* Empty row */
228
		"sRowEmpty": "dataTables_empty",
229
 
230
		/* Features */
231
		"sWrapper": "dataTables_wrapper",
232
		"sFilter": "dataTables_filter",
233
		"sInfo": "dataTables_info",
234
		"sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
235
			"ui-buttonset-multi paging_", /* Note that the type is postfixed */
236
		"sLength": "dataTables_length",
237
		"sProcessing": "dataTables_processing",
238
 
239
		/* Sorting */
240
		"sSortAsc": "ui-state-default",
241
		"sSortDesc": "ui-state-default",
242
		"sSortable": "ui-state-default",
243
		"sSortableAsc": "ui-state-default",
244
		"sSortableDesc": "ui-state-default",
245
		"sSortableNone": "ui-state-default",
246
		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
247
		"sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n",
248
		"sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s",
249
		"sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s",
250
		"sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n",
251
		"sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s",
252
		"sSortJUIWrapper": "DataTables_sort_wrapper",
253
		"sSortIcon": "DataTables_sort_icon",
254
 
255
		/* Scrolling */
256
		"sScrollWrapper": "dataTables_scroll",
257
		"sScrollHead": "dataTables_scrollHead ui-state-default",
258
		"sScrollHeadInner": "dataTables_scrollHeadInner",
259
		"sScrollBody": "dataTables_scrollBody",
260
		"sScrollFoot": "dataTables_scrollFoot ui-state-default",
261
		"sScrollFootInner": "dataTables_scrollFootInner",
262
 
263
		/* Misc */
264
		"sFooterTH": "ui-state-default"
265
	};
266
 
267
	/*
268
	 * Variable: oPagination
269
	 * Purpose:  Container for the various type of pagination that dataTables supports
270
	 * Scope:    jQuery.fn.dataTableExt
271
	 */
272
	_oExt.oPagination = {
273
		/*
274
		 * Variable: two_button
275
		 * Purpose:  Standard two button (forward/back) pagination
276
		 * Scope:    jQuery.fn.dataTableExt.oPagination
277
		 */
278
		"two_button": {
279
			/*
280
			 * Function: oPagination.two_button.fnInit
281
			 * Purpose:  Initialise dom elements required for pagination with forward/back buttons only
282
			 * Returns:  -
283
			 * Inputs:   object:oSettings - dataTables settings object
284
			 *           node:nPaging - the DIV which contains this pagination control
285
			 *           function:fnCallbackDraw - draw function which must be called on update
286
			 */
287
			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
288
			{
289
				var nPrevious, nNext, nPreviousInner, nNextInner;
290
 
291
				/* Store the next and previous elements in the oSettings object as they can be very
292
				 * usful for automation - particularly testing
293
				 */
294
				if ( !oSettings.bJUI )
295
				{
296
					nPrevious = document.createElement( 'div' );
297
					nNext = document.createElement( 'div' );
298
				}
299
				else
300
				{
301
					nPrevious = document.createElement( 'a' );
302
					nNext = document.createElement( 'a' );
303
 
304
					nNextInner = document.createElement('span');
305
					nNextInner.className = oSettings.oClasses.sPageJUINext;
306
					nNext.appendChild( nNextInner );
307
 
308
					nPreviousInner = document.createElement('span');
309
					nPreviousInner.className = oSettings.oClasses.sPageJUIPrev;
310
					nPrevious.appendChild( nPreviousInner );
311
				}
312
 
313
				nPrevious.className = oSettings.oClasses.sPagePrevDisabled;
314
				nNext.className = oSettings.oClasses.sPageNextDisabled;
315
 
316
				nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious;
317
				nNext.title = oSettings.oLanguage.oPaginate.sNext;
318
 
319
				nPaging.appendChild( nPrevious );
320
				nPaging.appendChild( nNext );
321
 
322
				$(nPrevious).on( 'click.DT', function() {
323
					if ( oSettings.oApi._fnPageChange( oSettings, "previous" ) )
324
					{
325
						/* Only draw when the page has actually changed */
326
						fnCallbackDraw( oSettings );
327
					}
328
				} );
329
 
330
				$(nNext).on( 'click.DT', function() {
331
					if ( oSettings.oApi._fnPageChange( oSettings, "next" ) )
332
					{
333
						fnCallbackDraw( oSettings );
334
					}
335
				} );
336
 
337
				/* Take the brutal approach to cancelling text selection */
338
				$(nPrevious).on( 'selectstart.DT', function () { return false; } );
339
				$(nNext).on( 'selectstart.DT', function () { return false; } );
340
 
341
				/* ID the first elements only */
342
				if ( oSettings.sTableId !== '' && typeof oSettings.aanFeatures.p == "undefined" )
343
				{
344
					nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' );
345
					nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' );
346
					nNext.setAttribute( 'id', oSettings.sTableId+'_next' );
347
				}
348
			},
349
 
350
			/*
351
			 * Function: oPagination.two_button.fnUpdate
352
			 * Purpose:  Update the two button pagination at the end of the draw
353
			 * Returns:  -
354
			 * Inputs:   object:oSettings - dataTables settings object
355
			 *           function:fnCallbackDraw - draw function to call on page change
356
			 */
357
			"fnUpdate": function ( oSettings, fnCallbackDraw )
358
			{
359
				if ( !oSettings.aanFeatures.p )
360
				{
361
					return;
362
				}
363
 
364
				/* Loop over each instance of the pager */
365
				var an = oSettings.aanFeatures.p;
366
				for ( var i=0, iLen=an.length ; i<iLen ; i++ )
367
				{
368
					if ( an[i].childNodes.length !== 0 )
369
					{
370
						an[i].childNodes[0].className = 
371
							( oSettings._iDisplayStart === 0 ) ? 
372
							oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled;
373
 
374
						an[i].childNodes[1].className = 
375
							( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? 
376
							oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled;
377
					}
378
				}
379
			}
380
		},
381
 
382
 
383
		/*
384
		 * Variable: iFullNumbersShowPages
385
		 * Purpose:  Change the number of pages which can be seen
386
		 * Scope:    jQuery.fn.dataTableExt.oPagination
387
		 */
388
		"iFullNumbersShowPages": 5,
389
 
390
		/*
391
		 * Variable: full_numbers
392
		 * Purpose:  Full numbers pagination
393
		 * Scope:    jQuery.fn.dataTableExt.oPagination
394
		 */
395
		"full_numbers": {
396
			/*
397
			 * Function: oPagination.full_numbers.fnInit
398
			 * Purpose:  Initialise dom elements required for pagination with a list of the pages
399
			 * Returns:  -
400
			 * Inputs:   object:oSettings - dataTables settings object
401
			 *           node:nPaging - the DIV which contains this pagination control
402
			 *           function:fnCallbackDraw - draw function which must be called on update
403
			 */
404
			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
405
			{
406
				var nFirst = document.createElement( 'span' );
407
				var nPrevious = document.createElement( 'span' );
408
				var nList = document.createElement( 'span' );
409
				var nNext = document.createElement( 'span' );
410
				var nLast = document.createElement( 'span' );
411
 
412
				nFirst.innerHTML = oSettings.oLanguage.oPaginate.sFirst;
413
				nPrevious.innerHTML = oSettings.oLanguage.oPaginate.sPrevious;
414
				nNext.innerHTML = oSettings.oLanguage.oPaginate.sNext;
415
				nLast.innerHTML = oSettings.oLanguage.oPaginate.sLast;
416
 
417
				var oClasses = oSettings.oClasses;
418
				nFirst.className = oClasses.sPageButton+" "+oClasses.sPageFirst;
419
				nPrevious.className = oClasses.sPageButton+" "+oClasses.sPagePrevious;
420
				nNext.className= oClasses.sPageButton+" "+oClasses.sPageNext;
421
				nLast.className = oClasses.sPageButton+" "+oClasses.sPageLast;
422
 
423
				nPaging.appendChild( nFirst );
424
				nPaging.appendChild( nPrevious );
425
				nPaging.appendChild( nList );
426
				nPaging.appendChild( nNext );
427
				nPaging.appendChild( nLast );
428
 
429
				$(nFirst).on( 'click.DT', function () {
430
					if ( oSettings.oApi._fnPageChange( oSettings, "first" ) )
431
					{
432
						fnCallbackDraw( oSettings );
433
					}
434
				} );
435
 
436
				$(nPrevious).on( 'click.DT', function() {
437
					if ( oSettings.oApi._fnPageChange( oSettings, "previous" ) )
438
					{
439
						fnCallbackDraw( oSettings );
440
					}
441
				} );
442
 
443
				$(nNext).on( 'click.DT', function() {
444
					if ( oSettings.oApi._fnPageChange( oSettings, "next" ) )
445
					{
446
						fnCallbackDraw( oSettings );
447
					}
448
				} );
449
 
450
				$(nLast).on( 'click.DT', function() {
451
					if ( oSettings.oApi._fnPageChange( oSettings, "last" ) )
452
					{
453
						fnCallbackDraw( oSettings );
454
					}
455
				} );
456
 
457
				/* Take the brutal approach to cancelling text selection */
458
				$('span', nPaging)
459
					.on( 'mousedown.DT', function () { return false; } )
460
					.on( 'selectstart.DT', function () { return false; } );
461
 
462
				/* ID the first elements only */
463
				if ( oSettings.sTableId !== '' && typeof oSettings.aanFeatures.p == "undefined" )
464
				{
465
					nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' );
466
					nFirst.setAttribute( 'id', oSettings.sTableId+'_first' );
467
					nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' );
468
					nNext.setAttribute( 'id', oSettings.sTableId+'_next' );
469
					nLast.setAttribute( 'id', oSettings.sTableId+'_last' );
470
				}
471
			},
472
 
473
			/*
474
			 * Function: oPagination.full_numbers.fnUpdate
475
			 * Purpose:  Update the list of page buttons shows
476
			 * Returns:  -
477
			 * Inputs:   object:oSettings - dataTables settings object
478
			 *           function:fnCallbackDraw - draw function to call on page change
479
			 */
480
			"fnUpdate": function ( oSettings, fnCallbackDraw )
481
			{
482
				if ( !oSettings.aanFeatures.p )
483
				{
484
					return;
485
				}
486
 
487
				var iPageCount = _oExt.oPagination.iFullNumbersShowPages;
488
				var iPageCountHalf = Math.floor(iPageCount / 2);
489
				var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
490
				var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
491
				var sList = "";
492
				var iStartButton, iEndButton, i, iLen;
493
				var oClasses = oSettings.oClasses;
494
 
495
				/* Pages calculation */
496
				if (iPages < iPageCount)
497
< iPageCount)				{
498
< iPageCount)					iStartButton = 1;
499
< iPageCount)					iEndButton = iPages;
500
< iPageCount)				}
501
< iPageCount)				else
502
< iPageCount)				{
503
< iPageCount)					if (iCurrentPage <= iPageCountHalf)
504
< iPageCount)<= iPageCountHalf)					{
505
< iPageCount)<= iPageCountHalf)						iStartButton = 1;
506
< iPageCount)<= iPageCountHalf)						iEndButton = iPageCount;
507
< iPageCount)<= iPageCountHalf)					}
508
< iPageCount)<= iPageCountHalf)					else
509
< iPageCount)<= iPageCountHalf)					{
510
< iPageCount)<= iPageCountHalf)						if (iCurrentPage >= (iPages - iPageCountHalf))
511
< iPageCount)<= iPageCountHalf)						{
512
< iPageCount)<= iPageCountHalf)							iStartButton = iPages - iPageCount + 1;
513
< iPageCount)<= iPageCountHalf)							iEndButton = iPages;
514
< iPageCount)<= iPageCountHalf)						}
515
< iPageCount)<= iPageCountHalf)						else
516
< iPageCount)<= iPageCountHalf)						{
517
< iPageCount)<= iPageCountHalf)							iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
518
< iPageCount)<= iPageCountHalf)							iEndButton = iStartButton + iPageCount - 1;
519
< iPageCount)<= iPageCountHalf)						}
520
< iPageCount)<= iPageCountHalf)					}
521
< iPageCount)<= iPageCountHalf)				}
522
 
523
< iPageCount)<= iPageCountHalf)				/* Build the dynamic list */
524
< iPageCount)<= iPageCountHalf)				for ( i=iStartButton ; i<=iEndButton ; i++ )
525
< iPageCount)<= iPageCountHalf)				{
526
< iPageCount)<= iPageCountHalf)					if ( iCurrentPage != i )
527
< iPageCount)<= iPageCountHalf)					{
528
< iPageCount)<= iPageCountHalf)						sList += '<span class="'+oClasses.sPageButton+'">'+i+'</span>';
529
< iPageCount)<= iPageCountHalf)					}
530
< iPageCount)<= iPageCountHalf)					else
531
< iPageCount)<= iPageCountHalf)					{
532
< iPageCount)<= iPageCountHalf)						sList += '<span class="'+oClasses.sPageButtonActive+'">'+i+'</span>';
533
< iPageCount)<= iPageCountHalf)					}
534
< iPageCount)<= iPageCountHalf)				}
535
 
536
< iPageCount)<= iPageCountHalf)				/* Loop over each instance of the pager */
537
< iPageCount)<= iPageCountHalf)				var an = oSettings.aanFeatures.p;
538
< iPageCount)<= iPageCountHalf)				var anButtons, anStatic, nPaginateList;
539
< iPageCount)<= iPageCountHalf)				var fnClick = function(e) {
540
< iPageCount)<= iPageCountHalf)					/* Use the information in the element to jump to the required page */
541
< iPageCount)<= iPageCountHalf)					var iTarget = (this.innerHTML * 1) - 1;
542
< iPageCount)<= iPageCountHalf)					oSettings._iDisplayStart = iTarget * oSettings._iDisplayLength;
543
< iPageCount)<= iPageCountHalf)					fnCallbackDraw( oSettings );
544
< iPageCount)<= iPageCountHalf)					e.preventDefault();
545
< iPageCount)<= iPageCountHalf)				};
546
< iPageCount)<= iPageCountHalf)				var fnFalse = function () { return false; };
547
 
548
< iPageCount)<= iPageCountHalf)				for ( i=0, iLen=an.length ; i<iLen ; i++ )
549
< iPageCount)<= iPageCountHalf)				{
550
< iPageCount)<= iPageCountHalf)					if ( an[i].childNodes.length === 0 )
551
< iPageCount)<= iPageCountHalf)					{
552
< iPageCount)<= iPageCountHalf)						continue;
553
< iPageCount)<= iPageCountHalf)					}
554
 
555
< iPageCount)<= iPageCountHalf)					/* Build up the dynamic list forst - html and listeners */
556
< iPageCount)<= iPageCountHalf)					var qjPaginateList = $('span:eq(2)', an[i]);
557
< iPageCount)<= iPageCountHalf)					qjPaginateList.html( sList );
558
< iPageCount)<= iPageCountHalf)					$('span', qjPaginateList).on( 'click.DT', fnClick ).on( 'mousedown.DT', fnFalse )
559
< iPageCount)<= iPageCountHalf)						.on( 'selectstart.DT', fnFalse );
560
 
561
< iPageCount)<= iPageCountHalf)					/* Update the 'premanent botton's classes */
562
< iPageCount)<= iPageCountHalf)					anButtons = an[i].getElementsByTagName('span');
563
< iPageCount)<= iPageCountHalf)					anStatic = [
564
< iPageCount)<= iPageCountHalf)						anButtons[0], anButtons[1], 
565
< iPageCount)<= iPageCountHalf)						anButtons[anButtons.length-2], anButtons[anButtons.length-1]
566
< iPageCount)<= iPageCountHalf)					];
567
< iPageCount)<= iPageCountHalf)					$(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
568
< iPageCount)<= iPageCountHalf)					if ( iCurrentPage == 1 )
569
< iPageCount)<= iPageCountHalf)					{
570
< iPageCount)<= iPageCountHalf)						anStatic[0].className += " "+oClasses.sPageButtonStaticDisabled;
571
< iPageCount)<= iPageCountHalf)						anStatic[1].className += " "+oClasses.sPageButtonStaticDisabled;
572
< iPageCount)<= iPageCountHalf)					}
573
< iPageCount)<= iPageCountHalf)					else
574
< iPageCount)<= iPageCountHalf)					{
575
< iPageCount)<= iPageCountHalf)						anStatic[0].className += " "+oClasses.sPageButton;
576
< iPageCount)<= iPageCountHalf)						anStatic[1].className += " "+oClasses.sPageButton;
577
< iPageCount)<= iPageCountHalf)					}
578
 
579
< iPageCount)<= iPageCountHalf)					if ( iPages === 0 || iCurrentPage == iPages || oSettings._iDisplayLength == -1 )
580
< iPageCount)<= iPageCountHalf)					{
581
< iPageCount)<= iPageCountHalf)						anStatic[2].className += " "+oClasses.sPageButtonStaticDisabled;
582
< iPageCount)<= iPageCountHalf)						anStatic[3].className += " "+oClasses.sPageButtonStaticDisabled;
583
< iPageCount)<= iPageCountHalf)					}
584
< iPageCount)<= iPageCountHalf)					else
585
< iPageCount)<= iPageCountHalf)					{
586
< iPageCount)<= iPageCountHalf)						anStatic[2].className += " "+oClasses.sPageButton;
587
< iPageCount)<= iPageCountHalf)						anStatic[3].className += " "+oClasses.sPageButton;
588
< iPageCount)<= iPageCountHalf)					}
589
< iPageCount)<= iPageCountHalf)				}
590
< iPageCount)<= iPageCountHalf)			}
591
< iPageCount)<= iPageCountHalf)		}
592
< iPageCount)<= iPageCountHalf)	};
593
 
594
< iPageCount)<= iPageCountHalf)	/*
595
< iPageCount)<= iPageCountHalf)	 * Variable: oSort
596
< iPageCount)<= iPageCountHalf)	 * Purpose:  Wrapper for the sorting functions that can be used in DataTables
597
< iPageCount)<= iPageCountHalf)	 * Scope:    jQuery.fn.dataTableExt
598
< iPageCount)<= iPageCountHalf)	 * Notes:    The functions provided in this object are basically standard javascript sort
599
< iPageCount)<= iPageCountHalf)	 *   functions - they expect two inputs which they then compare and then return a priority
600
< iPageCount)<= iPageCountHalf)	 *   result. For each sort method added, two functions need to be defined, an ascending sort and
601
< iPageCount)<= iPageCountHalf)	 *   a descending sort.
602
< iPageCount)<= iPageCountHalf)	 */
603
< iPageCount)<= iPageCountHalf)	_oExt.oSort = {
604
< iPageCount)<= iPageCountHalf)		/*
605
< iPageCount)<= iPageCountHalf)		 * text sorting
606
< iPageCount)<= iPageCountHalf)		 */
607
< iPageCount)<= iPageCountHalf)		"string-asc": function ( a, b )
608
< iPageCount)<= iPageCountHalf)		{
609
< iPageCount)<= iPageCountHalf)			if ( typeof a != 'string' ) { a = ''; }
610
< iPageCount)<= iPageCountHalf)			if ( typeof b != 'string' ) { b = ''; }
611
< iPageCount)<= iPageCountHalf)			var x = a.toLowerCase();
612
< iPageCount)<= iPageCountHalf)			var y = b.toLowerCase();
613
< iPageCount)<= iPageCountHalf)			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
614
< iPageCount)<= iPageCountHalf)		},
615
 
616
< iPageCount)<= iPageCountHalf)		"string-desc": function ( a, b )
617
< iPageCount)<= iPageCountHalf)		{
618
< iPageCount)<= iPageCountHalf)			if ( typeof a != 'string' ) { a = ''; }
619
< iPageCount)<= iPageCountHalf)			if ( typeof b != 'string' ) { b = ''; }
620
< iPageCount)<= iPageCountHalf)			var x = a.toLowerCase();
621
< iPageCount)<= iPageCountHalf)			var y = b.toLowerCase();
622
< iPageCount)<= iPageCountHalf)			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
623
< iPageCount)<= iPageCountHalf)		},
624
 
625
 
626
< iPageCount)<= iPageCountHalf)		/*
627
< iPageCount)<= iPageCountHalf)		 * html sorting (ignore html tags)
628
< iPageCount)<= iPageCountHalf)		 */
629
< iPageCount)<= iPageCountHalf)		"html-asc": function ( a, b )
630
< iPageCount)<= iPageCountHalf)		{
631
< iPageCount)<= iPageCountHalf)			var x = a.replace( /<.*?>/g, "" ).toLowerCase();
632
< iPageCount)<= iPageCountHalf)<.*?>			var y = b.replace( /<.*?>/g, "" ).toLowerCase();
633
< iPageCount)<= iPageCountHalf)<.*?><.*?>			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
634
< iPageCount)<= iPageCountHalf)<.*?><.*?>		},
635
 
636
< iPageCount)<= iPageCountHalf)<.*?><.*?>		"html-desc": function ( a, b )
637
< iPageCount)<= iPageCountHalf)<.*?><.*?>		{
638
< iPageCount)<= iPageCountHalf)<.*?><.*?>			var x = a.replace( /<.*?>/g, "" ).toLowerCase();
639
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?>			var y = b.replace( /<.*?>/g, "" ).toLowerCase();
640
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
641
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
642
 
643
 
644
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
645
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * date sorting
646
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
647
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		"date-asc": function ( a, b )
648
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
649
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var x = Date.parse( a );
650
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var y = Date.parse( b );
651
 
652
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( isNaN(x) || x==="" )
653
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
654
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			x = Date.parse( "01/01/1970 00:00:00" );
655
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
656
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( isNaN(y) || y==="" )
657
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
658
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				y =	Date.parse( "01/01/1970 00:00:00" );
659
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
660
 
661
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return x - y;
662
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
663
 
664
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		"date-desc": function ( a, b )
665
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
666
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var x = Date.parse( a );
667
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var y = Date.parse( b );
668
 
669
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( isNaN(x) || x==="" )
670
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
671
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			x = Date.parse( "01/01/1970 00:00:00" );
672
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
673
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( isNaN(y) || y==="" )
674
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
675
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				y =	Date.parse( "01/01/1970 00:00:00" );
676
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
677
 
678
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return y - x;
679
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
680
 
681
 
682
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
683
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * numerical sorting
684
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
685
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		"numeric-asc": function ( a, b )
686
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
687
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var x = (a=="-" || a==="") ? 0 : a*1;
688
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var y = (b=="-" || b==="") ? 0 : b*1;
689
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return x - y;
690
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
691
 
692
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		"numeric-desc": function ( a, b )
693
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
694
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var x = (a=="-" || a==="") ? 0 : a*1;
695
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var y = (b=="-" || b==="") ? 0 : b*1;
696
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return y - x;
697
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
698
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	};
699
 
700
 
701
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	/*
702
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Variable: aTypes
703
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Purpose:  Container for the various type of type detection that dataTables supports
704
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Scope:    jQuery.fn.dataTableExt
705
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Notes:    The functions in this array are expected to parse a string to see if it is a data
706
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   type that it recognises. If so then the function should return the name of the type (a
707
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   corresponding sort function should be defined!), if the type is not recognised then the
708
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   function should return null such that the parser and move on to check the next type.
709
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   Note that ordering is important in this array - the functions are processed linearly,
710
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   starting at index 0.
711
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   Note that the input for these functions is always a string! It cannot be any other data
712
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   type
713
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 */
714
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	_oExt.aTypes = [
715
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
716
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: -
717
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Check to see if a string is numeric
718
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  string:'numeric' or null
719
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   mixed:sText - string to check
720
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
721
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function ( sData )
722
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
723
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Allow zero length strings as a number */
724
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof sData == 'number' )
725
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
726
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return 'numeric';
727
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
728
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( typeof sData != 'string' )
729
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
730
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return null;
731
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
732
 
733
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var sValidFirstChars = "0123456789-";
734
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var sValidChars = "0123456789.";
735
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var Char;
736
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var bDecimal = false;
737
 
738
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check for a valid first char (no period and allow negatives) */
739
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			Char = sData.charAt(0); 
740
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if (sValidFirstChars.indexOf(Char) == -1) 
741
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
742
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return null;
743
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
744
 
745
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check all the other characters are valid */
746
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( var i=1 ; i<sData.length ; i++ ) 
747
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
748
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				Char = sData.charAt(i); 
749
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if (sValidChars.indexOf(Char) == -1) 
750
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
751
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return null;
752
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
753
 
754
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Only allowed one decimal place... */
755
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( Char == "." )
756
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
757
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( bDecimal )
758
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
759
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						return null;
760
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
761
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					bDecimal = true;
762
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
763
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
764
 
765
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return 'numeric';
766
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
767
 
768
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
769
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: -
770
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Check to see if a string is actually a formatted date
771
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  string:'date' or null
772
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   string:sText - string to check
773
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
774
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function ( sData )
775
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
776
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iParse = Date.parse(sData);
777
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( (iParse !== null && !isNaN(iParse)) || (typeof sData == 'string' && sData.length === 0) )
778
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
779
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return 'date';
780
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
781
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return null;
782
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		},
783
 
784
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
785
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: -
786
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Check to see if a string should be treated as an HTML string
787
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  string:'html' or null
788
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   string:sText - string to check
789
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
790
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function ( sData )
791
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
792
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof sData == 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 )
793
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
794
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return 'html';
795
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
796
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return null;
797
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
798
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	];
799
 
800
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	/*
801
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Function: fnVersionCheck
802
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Purpose:  Check a version string against this version of DataTables. Useful for plug-ins
803
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Returns:  bool:true -this version of DataTables is greater or equal to the required version
804
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *                false -this version of DataTales is not suitable
805
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Inputs:   string:sVersion - the version to check against. May be in the following formats:
806
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *             "a", "a.b" or "a.b.c"
807
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Notes:    This function will only check the first three parts of a version string. It is
808
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 *   assumed that beta and dev versions will meet the requirements. This might change in future
809
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 */
810
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	_oExt.fnVersionCheck = function( sVersion )
811
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	{
812
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* This is cheap, but very effective */
813
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		var fnZPad = function (Zpad, count)
814
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
815
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			while(Zpad.length < count) {
816
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				Zpad += '0';
817
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
818
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return Zpad;
819
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
820
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		var aThis = _oExt.sVersion.split('.');
821
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		var aThat = sVersion.split('.');
822
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		var sThis = '', sThat = '';
823
 
824
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
825
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
826
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			sThis += fnZPad( aThis[i], 3 );
827
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			sThat += fnZPad( aThat[i], 3 );
828
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
829
 
830
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		return parseInt(sThis, 10) >= parseInt(sThat, 10);
831
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	};
832
 
833
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	/*
834
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Variable: _oExternConfig
835
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Purpose:  Store information for DataTables to access globally about other instances
836
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Scope:    jQuery.fn.dataTableExt
837
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 */
838
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	_oExt._oExternConfig = {
839
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* int:iNextUnique - next unique number for an instance */
840
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		"iNextUnique": 0
841
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	};
842
 
843
 
844
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
845
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Section - DataTables prototype
846
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
847
 
848
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	/*
849
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Function: dataTable
850
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Purpose:  DataTables information
851
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Returns:  -
852
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 * Inputs:   object:oInit - initialisation options for the table
853
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	 */
854
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	$.fn.dataTable = function( oInit )
855
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>	{
856
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
857
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: classSettings
858
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Settings container function for all 'class' properties which are required
859
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   by dataTables
860
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
861
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   -
862
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
863
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function classSettings ()
864
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
865
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnRecordsTotal = function ()
866
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
867
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( this.oFeatures.bServerSide ) {
868
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return parseInt(this._iRecordsTotal, 10);
869
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				} else {
870
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return this.aiDisplayMaster.length;
871
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
872
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
873
 
874
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnRecordsDisplay = function ()
875
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
876
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( this.oFeatures.bServerSide ) {
877
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return parseInt(this._iRecordsDisplay, 10);
878
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				} else {
879
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return this.aiDisplay.length;
880
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
881
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
882
 
883
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnDisplayEnd = function ()
884
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
885
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( this.oFeatures.bServerSide ) {
886
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) {
887
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						return this._iDisplayStart+this.aiDisplay.length;
888
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					} else {
889
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						return Math.min( this._iDisplayStart+this._iDisplayLength, 
890
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							this._iRecordsDisplay );
891
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
892
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				} else {
893
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return this._iDisplayEnd;
894
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
895
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
896
 
897
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
898
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oInstance
899
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  The DataTables object for this table
900
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
901
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
902
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oInstance = null;
903
 
904
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
905
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sInstance
906
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Unique idendifier for each instance of the DataTables object
907
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
908
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
909
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sInstance = null;
910
 
911
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
912
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oFeatures
913
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Indicate the enablement of key dataTable features
914
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
915
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
916
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oFeatures = {
917
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bPaginate": true,
918
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bLengthChange": true,
919
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bFilter": true,
920
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bSort": true,
921
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bInfo": true,
922
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bAutoWidth": true,
923
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bProcessing": false,
924
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bSortClasses": true,
925
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bStateSave": false,
926
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bServerSide": false,
927
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bDeferRender": false
928
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
929
 
930
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
931
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oScroll
932
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Container for scrolling options
933
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
934
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
935
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oScroll = {
936
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sX": "",
937
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sXInner": "",
938
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sY": "",
939
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bCollapse": false,
940
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bInfinite": false,
941
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"iLoadGap": 100,
942
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"iBarWidth": 0,
943
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bAutoCss": true
944
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
945
 
946
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
947
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aanFeatures
948
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array referencing the nodes which are used for the features
949
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
950
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    The parameters of this object match what is allowed by sDom - i.e.
951
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   'l' - Length changing
952
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   'f' - Filtering input
953
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   't' - The table!
954
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   'i' - Information
955
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   'p' - Pagination
956
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   'r' - pRocessing
957
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
958
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aanFeatures = [];
959
 
960
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
961
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oLanguage
962
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store the language strings used by dataTables
963
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
964
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    The words in the format _VAR_ are variables which are dynamically replaced
965
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   by javascript
966
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
967
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oLanguage = {
968
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sProcessing": "Processing...",
969
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sLengthMenu": "Show _MENU_ entries",
970
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sZeroRecords": "No matching records found",
971
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sEmptyTable": "No data available in table",
972
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sLoadingRecords": "Loading...",
973
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
974
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sInfoEmpty": "Showing 0 to 0 of 0 entries",
975
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sInfoFiltered": "(filtered from _MAX_ total entries)",
976
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sInfoPostFix": "",
977
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sInfoThousands": ",",
978
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sSearch": "Search:",
979
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sUrl": "",
980
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"oPaginate": {
981
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sFirst":    "First",
982
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sPrevious": "Previous",
983
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sNext":     "Next",
984
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sLast":     "Last"
985
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				},
986
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"fnInfoCallback": null
987
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
988
 
989
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
990
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoData
991
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store data information
992
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
993
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    This is an array of objects with the following parameters:
994
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   int: _iId - internal id for tracking
995
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   array: _aData - internal data - used for sorting / filtering etc
996
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   node: nTr - display node
997
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   array node: _anHidden - hidden TD nodes
998
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   string: _sRowStripe
999
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1000
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoData = [];
1001
 
1002
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1003
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aiDisplay
1004
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array of indexes which are in the current display (after filtering etc)
1005
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1006
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1007
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aiDisplay = [];
1008
 
1009
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1010
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aiDisplayMaster
1011
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array of indexes for display - no filtering
1012
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1013
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1014
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aiDisplayMaster = [];
1015
 
1016
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1017
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoColumns
1018
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store information about each column that is in use
1019
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
1020
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1021
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoColumns = [];
1022
 
1023
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1024
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoHeader
1025
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store information about the table's header
1026
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
1027
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1028
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoHeader = [];
1029
 
1030
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1031
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoFooter
1032
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store information about the table's footer
1033
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
1034
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1035
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoFooter = [];
1036
 
1037
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1038
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: iNextId
1039
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store the next unique id to be used for a new row
1040
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings 
1041
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1042
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.iNextId = 0;
1043
 
1044
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1045
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: asDataSearch
1046
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Search data array for regular expression searching
1047
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1048
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1049
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.asDataSearch = [];
1050
 
1051
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1052
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oPreviousSearch
1053
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store the previous search incase we want to force a re-search
1054
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   or compare the old search to a new one
1055
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1056
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1057
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oPreviousSearch = {
1058
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sSearch": "",
1059
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bRegex": false,
1060
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bSmart": true
1061
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
1062
 
1063
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1064
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoPreSearchCols
1065
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Store the previous search for each column
1066
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1067
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1068
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoPreSearchCols = [];
1069
 
1070
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1071
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aaSorting
1072
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Sorting information
1073
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1074
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Index 0 - column number
1075
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           Index 1 - current sorting direction
1076
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           Index 2 - index of asSorting for this column
1077
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1078
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aaSorting = [ [0, 'asc', 0] ];
1079
 
1080
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1081
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aaSortingFixed
1082
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Sorting information that is always applied
1083
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1084
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1085
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aaSortingFixed = null;
1086
 
1087
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1088
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: asStripeClasses
1089
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Classes to use for the striping of a table
1090
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1091
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1092
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.asStripeClasses = [];
1093
 
1094
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1095
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: asDestroyStripes
1096
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  If restoring a table - we should restore its striping classes as well
1097
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1098
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1099
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.asDestroyStripes = [];
1100
 
1101
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1102
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sDestroyWidth
1103
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  If restoring a table - we should restore its width
1104
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1105
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1106
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sDestroyWidth = 0;
1107
 
1108
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1109
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnRowCallback
1110
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Call this function every time a row is inserted (draw)
1111
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1112
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1113
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnRowCallback = null;
1114
 
1115
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1116
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnHeaderCallback
1117
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Callback function for the header on each draw
1118
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1119
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1120
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnHeaderCallback = null;
1121
 
1122
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1123
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnFooterCallback
1124
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Callback function for the footer on each draw
1125
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1126
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1127
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnFooterCallback = null;
1128
 
1129
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1130
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoDrawCallback
1131
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array of callback functions for draw callback functions
1132
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1133
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Each array element is an object with the following parameters:
1134
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   function:fn - function to call
1135
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   string:sName - name callback (feature). useful for arranging array
1136
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1137
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoDrawCallback = [];
1138
 
1139
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1140
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnPreDrawCallback
1141
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Callback function for just before the table is redrawn. A return of false
1142
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           will be used to cancel the draw.
1143
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1144
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1145
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnPreDrawCallback = null;
1146
 
1147
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1148
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnInitComplete
1149
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Callback function for when the table has been initialised
1150
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1151
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1152
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnInitComplete = null;
1153
 
1154
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1155
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sTableId
1156
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Cache the table ID for quick access
1157
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1158
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1159
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sTableId = "";
1160
 
1161
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1162
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: nTable
1163
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Cache the table node for quick access
1164
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1165
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1166
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.nTable = null;
1167
 
1168
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1169
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: nTHead
1170
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Permanent ref to the thead element
1171
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1172
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1173
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.nTHead = null;
1174
 
1175
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1176
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: nTFoot
1177
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Permanent ref to the tfoot element - if it exists
1178
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1179
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1180
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.nTFoot = null;
1181
 
1182
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1183
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: nTBody
1184
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Permanent ref to the tbody element
1185
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1186
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1187
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.nTBody = null;
1188
 
1189
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1190
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: nTableWrapper
1191
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Cache the wrapper node (contains all DataTables controlled elements)
1192
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1193
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1194
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.nTableWrapper = null;
1195
 
1196
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1197
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bDeferLoading
1198
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Indicate if when using server-side processing the loading of data 
1199
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           should be deferred until the second draw
1200
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1201
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1202
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bDeferLoading = false;
1203
 
1204
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1205
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bInitialised
1206
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Indicate if all required information has been read in
1207
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1208
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1209
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bInitialised = false;
1210
 
1211
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1212
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoOpenRows
1213
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Information about open rows
1214
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1215
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Has the parameters 'nTr' and 'nParent'
1216
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1217
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoOpenRows = [];
1218
 
1219
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1220
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sDom
1221
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Dictate the positioning that the created elements will take
1222
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1223
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    
1224
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   The following options are allowed:
1225
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'l' - Length changing
1226
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'f' - Filtering input
1227
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     't' - The table!
1228
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'i' - Information
1229
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'p' - Pagination
1230
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'r' - pRocessing
1231
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   The following constants are allowed:
1232
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'H' - jQueryUI theme "header" classes
1233
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     'F' - jQueryUI theme "footer" classes
1234
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   The following syntax is expected:
1235
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     '<' and '>' - div elements
1236
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     '<"class" and '>' - div with a class
1237
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   Examples:
1238
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     '<"wrapper"flipt>', '<lf<t>ip>'
1239
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1240
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sDom = 'lfrtip';
1241
 
1242
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1243
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sPaginationType
1244
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Note which type of sorting should be used
1245
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1246
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1247
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sPaginationType = "two_button";
1248
 
1249
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1250
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: iCookieDuration
1251
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  The cookie duration (for bStateSave) in seconds - default 2 hours
1252
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1253
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1254
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.iCookieDuration = 60 * 60 * 2;
1255
 
1256
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1257
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sCookiePrefix
1258
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  The cookie name prefix
1259
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1260
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1261
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sCookiePrefix = "SpryMedia_DataTables_";
1262
 
1263
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1264
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnCookieCallback
1265
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Callback function for cookie creation
1266
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1267
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1268
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnCookieCallback = null;
1269
 
1270
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1271
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoStateSave
1272
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array of callback functions for state saving
1273
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1274
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Each array element is an object with the following parameters:
1275
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   function:fn - function to call. Takes two parameters, oSettings and the JSON string to
1276
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     save that has been thus far created. Returns a JSON string to be inserted into a 
1277
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     json object (i.e. '"param": [ 0, 1, 2]')
1278
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   string:sName - name of callback
1279
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1280
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoStateSave = [];
1281
 
1282
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1283
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoStateLoad
1284
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Array of callback functions for state loading
1285
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1286
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Each array element is an object with the following parameters:
1287
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   function:fn - function to call. Takes two parameters, oSettings and the object stored.
1288
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *     May return false to cancel state loading.
1289
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   string:sName - name of callback
1290
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1291
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoStateLoad = [];
1292
 
1293
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1294
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oLoadedState
1295
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  State that was loaded from the cookie. Useful for back reference
1296
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1297
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1298
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oLoadedState = null;
1299
 
1300
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1301
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sAjaxSource
1302
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Source url for AJAX data for the table
1303
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1304
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1305
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sAjaxSource = null;
1306
 
1307
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1308
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: sAjaxDataProp
1309
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Property from a given object from which to read the table data from. This can
1310
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           be an empty string (when not server-side processing), in which case it is 
1311
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           assumed an an array is given directly.
1312
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1313
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1314
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.sAjaxDataProp = 'aaData';
1315
 
1316
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1317
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bAjaxDataGet
1318
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Note if draw should be blocked while getting data
1319
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1320
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1321
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bAjaxDataGet = true;
1322
 
1323
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1324
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: jqXHR
1325
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  The last jQuery XHR object that was used for server-side data gathering. 
1326
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           This can be used for working with the XHR information in one of the callbacks
1327
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1328
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1329
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.jqXHR = null;
1330
 
1331
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1332
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnServerData
1333
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Function to get the server-side data - can be overruled by the developer
1334
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1335
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1336
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnServerData = function ( url, data, callback, settings ) {
1337
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				settings.jqXHR = $.ajax( {
1338
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"url": url,
1339
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"data": data,
1340
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"success": function (json) {
1341
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$(settings.oInstance).trigger('xhr', settings);
1342
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						callback( json );
1343
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					},
1344
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"dataType": "json",
1345
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"cache": false,
1346
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"error": function (xhr, error, thrown) {
1347
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( error == "parsererror" ) {
1348
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							alert( "DataTables warning: JSON data from server could not be parsed. "+
1349
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								"This is caused by a JSON formatting error." );
1350
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
1351
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1352
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				} );
1353
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
1354
 
1355
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1356
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoServerParams
1357
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Functions which are called prior to sending an Ajax request so extra parameters
1358
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           can easily be sent to the server
1359
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1360
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    Each array element is an object with the following parameters:
1361
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   function:fn - function to call
1362
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   string:sName - name callback - useful for knowing where it came from (plugin etc)
1363
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1364
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoServerParams = [];
1365
 
1366
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1367
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: fnFormatNumber
1368
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Format numbers for display
1369
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1370
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1371
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnFormatNumber = function ( iIn )
1372
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1373
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( iIn < 1000 )
1374
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1375
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* A small optimisation for what is likely to be the vast majority of use cases */
1376
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return iIn;
1377
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1378
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				else
1379
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1380
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var s=(iIn+""), a=s.split(""), out="", iLen=s.length;
1381
 
1382
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( var i=0 ; i<iLen ; i++ )
1383
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1384
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( i%3 === 0 && i !== 0 )
1385
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
1386
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							out = this.oLanguage.sInfoThousands+out;
1387
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
1388
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						out = a[iLen-i-1]+out;
1389
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1390
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1391
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return out;
1392
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
1393
 
1394
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1395
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aLengthMenu
1396
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  List of options that can be used for the user selectable length menu
1397
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1398
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Note:     This varaible can take for form of a 1D array, in which case the value and the 
1399
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   displayed value in the menu are the same, or a 2D array in which case the value comes
1400
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   from the first array, and the displayed value to the end user comes from the second
1401
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   array. 2D example: [ [ 10, 25, 50, 100, -1 ], [ 10, 25, 50, 100, 'All' ] ];
1402
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1403
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aLengthMenu = [ 10, 25, 50, 100 ];
1404
 
1405
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1406
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: iDraw
1407
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Counter for the draws that the table does. Also used as a tracker for
1408
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   server-side processing
1409
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1410
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1411
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.iDraw = 0;
1412
 
1413
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1414
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bDrawing
1415
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Indicate if a redraw is being done - useful for Ajax
1416
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1417
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1418
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bDrawing = 0;
1419
 
1420
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1421
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: iDrawError
1422
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Last draw error
1423
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1424
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1425
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.iDrawError = -1;
1426
 
1427
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1428
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: _iDisplayLength, _iDisplayStart, _iDisplayEnd
1429
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Display length variables
1430
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1431
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    These variable must NOT be used externally to get the data length. Rather, use
1432
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   the fnRecordsTotal() (etc) functions.
1433
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1434
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this._iDisplayLength = 10;
1435
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this._iDisplayStart = 0;
1436
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this._iDisplayEnd = 10;
1437
 
1438
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1439
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: _iRecordsTotal, _iRecordsDisplay
1440
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Display length variables used for server side processing
1441
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1442
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Notes:    These variable must NOT be used externally to get the data length. Rather, use
1443
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *   the fnRecordsTotal() (etc) functions.
1444
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1445
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this._iRecordsTotal = 0;
1446
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this._iRecordsDisplay = 0;
1447
 
1448
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1449
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bJUI
1450
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Should we add the markup needed for jQuery UI theming?
1451
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1452
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1453
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bJUI = false;
1454
 
1455
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1456
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oClasses
1457
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Should we add the markup needed for jQuery UI theming?
1458
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1459
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1460
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oClasses = _oExt.oStdClasses;
1461
 
1462
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1463
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bFiltered and bSorted
1464
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Flags to allow callback functions to see what actions have been performed
1465
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1466
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1467
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bFiltered = false;
1468
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bSorted = false;
1469
 
1470
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1471
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: bSortCellsTop
1472
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Indicate that if multiple rows are in the header and there is more than one
1473
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           unique cell per column, if the top one (true) or bottom one (false) should
1474
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 *           be used for sorting / title by DataTables
1475
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1476
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1477
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.bSortCellsTop = false;
1478
 
1479
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1480
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: oInit
1481
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Initialisation object that is used for the table
1482
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1483
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1484
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.oInit = null;
1485
 
1486
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
1487
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Variable: aoDestroyCallback
1488
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Purpose:  Destroy callback functions
1489
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Scope:    jQuery.dataTable.classSettings
1490
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1491
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.aoDestroyCallback = [];
1492
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
1493
 
1494
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1495
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Variable: oApi
1496
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Container for publicly exposed 'private' functions
1497
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Scope:    jQuery.dataTable
1498
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1499
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.oApi = {};
1500
 
1501
 
1502
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1503
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Section - API functions
1504
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1505
 
1506
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1507
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnDraw
1508
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Redraw the table
1509
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1510
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   bool:bComplete - Refilter and resort (if enabled) the table before the draw.
1511
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             Optional: default - true
1512
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1513
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnDraw = function( bComplete )
1514
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1515
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1516
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bComplete != 'undefined' && bComplete === false )
1517
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1518
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCalculateEnd( oSettings );
1519
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
1520
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1521
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
1522
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1523
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnReDraw( oSettings );
1524
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1525
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1526
 
1527
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1528
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnFilter
1529
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Filter the input based on data
1530
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1531
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   string:sInput - string to filter the table on
1532
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iColumn - optional - column to limit filtering to
1533
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRegex - optional - treat as regular expression or not - default false
1534
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bSmart - optional - perform smart filtering or not - default true
1535
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bShowGlobal - optional - show the input global filter in it's input box(es)
1536
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *              - default true
1537
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1538
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal )
1539
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1540
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1541
 
1542
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oSettings.oFeatures.bFilter )
1543
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1544
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return;
1545
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1546
 
1547
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRegex == 'undefined' )
1548
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1549
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				bRegex = false;
1550
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1551
 
1552
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bSmart == 'undefined' )
1553
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1554
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				bSmart = true;
1555
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1556
 
1557
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bShowGlobal == 'undefined' )
1558
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1559
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				bShowGlobal = true;
1560
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1561
 
1562
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof iColumn == "undefined" || iColumn === null )
1563
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1564
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Global filter */
1565
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnFilterComplete( oSettings, {
1566
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sSearch":sInput,
1567
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"bRegex": bRegex,
1568
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"bSmart": bSmart
1569
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}, 1 );
1570
 
1571
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( bShowGlobal && typeof oSettings.aanFeatures.f != 'undefined' )
1572
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1573
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var n = oSettings.aanFeatures.f;
1574
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( var i=0, iLen=n.length ; i<iLen ; i++ )
1575
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1576
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$('input', n[i]).val( sInput );
1577
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1578
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1579
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1580
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
1581
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1582
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Single column filter */
1583
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoPreSearchCols[ iColumn ].sSearch = sInput;
1584
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoPreSearchCols[ iColumn ].bRegex = bRegex;
1585
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoPreSearchCols[ iColumn ].bSmart = bSmart;
1586
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
1587
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1588
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1589
 
1590
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1591
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnSettings
1592
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Get the settings for a particular table for extern. manipulation
1593
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1594
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   -
1595
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1596
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnSettings = function( nNode  )
1597
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1598
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return _fnSettingsFromNode( this[_oExt.iApiIndex] );
1599
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1600
 
1601
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1602
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnVersionCheck
1603
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    The function is the same as the 'static' function provided in the ext variable
1604
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1605
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnVersionCheck = _oExt.fnVersionCheck;
1606
 
1607
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1608
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnSort
1609
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Sort the table by a particular row
1610
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1611
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   int:iCol - the data index to sort on. Note that this will
1612
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   not match the 'display index' if you have hidden data entries
1613
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1614
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnSort = function( aaSort )
1615
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1616
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1617
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aaSorting = aaSort;
1618
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnSort( oSettings );
1619
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1620
 
1621
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1622
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnSortListener
1623
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Attach a sort listener to an element for a given column
1624
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1625
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   node:nNode - the element to attach the sort listener to
1626
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iColumn - the column that a click on this node will sort on
1627
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           function:fnCallback - callback function when sort is run - optional
1628
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1629
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnSortListener = function( nNode, iColumn, fnCallback )
1630
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1631
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnSortAttachListener( _fnSettingsFromNode( this[_oExt.iApiIndex] ), nNode, iColumn,
1632
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 	fnCallback );
1633
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1634
 
1635
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1636
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnAddData
1637
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Add new row(s) into the table
1638
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  array int: array of indexes (aoData) which have been added (zero length on error)
1639
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   array:mData - the data to be added. The length must match
1640
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *               the original data from the DOM
1641
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             or
1642
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             array array:mData - 2D array of data to be added
1643
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRedraw - redraw the table or not - default true
1644
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    Warning - the refilter here will cause the table to redraw
1645
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             starting at zero
1646
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    Thanks to Yekimov Denis for contributing the basis for this function!
1647
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1648
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnAddData = function( mData, bRedraw )
1649
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1650
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( mData.length === 0 )
1651
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1652
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return [];
1653
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1654
 
1655
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var aiReturn = [];
1656
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iTest;
1657
 
1658
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Find settings from table node */
1659
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1660
 
1661
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check if we want to add multiple rows or not */
1662
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof mData[0] == "object" )
1663
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1664
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( var i=0 ; i<mData.length ; i++ )
1665
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1666
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					iTest = _fnAddData( oSettings, mData[i] );
1667
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( iTest == -1 )
1668
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1669
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						return aiReturn;
1670
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1671
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					aiReturn.push( iTest );
1672
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1673
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1674
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
1675
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1676
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				iTest = _fnAddData( oSettings, mData );
1677
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( iTest == -1 )
1678
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1679
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return aiReturn;
1680
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1681
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				aiReturn.push( iTest );
1682
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1683
 
1684
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
1685
 
1686
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
1687
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1688
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnReDraw( oSettings );
1689
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1690
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return aiReturn;
1691
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1692
 
1693
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1694
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnDeleteRow
1695
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Remove a row for the table
1696
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  array:aReturn - the row that was deleted
1697
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   mixed:mTarget - 
1698
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             int: - index of aoData to be deleted, or
1699
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             node(TR): - TR element you want to delete
1700
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           function:fnCallBack - callback function - default null
1701
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRedraw - redraw the table or not - default true
1702
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1703
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw )
1704
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1705
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Find settings from table node */
1706
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1707
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iAODataIndex;
1708
 
1709
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			iAODataIndex = (typeof mTarget == 'object') ? 
1710
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnNodeToDataIndex(oSettings, mTarget) : mTarget;
1711
 
1712
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Return the data array from this row */
1713
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oData = oSettings.aoData.splice( iAODataIndex, 1 );
1714
 
1715
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Remove the target row from the search array */
1716
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay );
1717
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.asDataSearch.splice( iDisplayIndex, 1 );
1718
 
1719
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Delete from the display arrays */
1720
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex );
1721
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnDeleteIndex( oSettings.aiDisplay, iAODataIndex );
1722
 
1723
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If there is a user callback function - call it */
1724
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof fnCallBack == "function" )
1725
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1726
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				fnCallBack.call( this, oSettings, oData );
1727
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1728
 
1729
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check for an 'overflow' they case for dislaying the table */
1730
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings._iDisplayStart >= oSettings.aiDisplay.length )
1731
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1732
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings._iDisplayStart -= oSettings._iDisplayLength;
1733
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings._iDisplayStart < 0 )
1734
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1735
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings._iDisplayStart = 0;
1736
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1737
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1738
 
1739
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
1740
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1741
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCalculateEnd( oSettings );
1742
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
1743
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1744
 
1745
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return oData;
1746
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1747
 
1748
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1749
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnClearTable
1750
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Quickly and simply clear a table
1751
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
1752
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   bool:bRedraw - redraw the table or not - default true
1753
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    Thanks to Yekimov Denis for contributing the basis for this function!
1754
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1755
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnClearTable = function( bRedraw )
1756
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1757
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Find settings from table node */
1758
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1759
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnClearTable( oSettings );
1760
 
1761
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
1762
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1763
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
1764
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1765
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1766
 
1767
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1768
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnOpen
1769
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Open a display row (append a row after the row in question)
1770
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  node:nNewRow - the row opened
1771
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   node:nTr - the table row to 'open'
1772
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           string|node|jQuery:mHtml - the HTML to put into the row
1773
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           string:sClass - class to give the new TD cell
1774
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1775
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnOpen = function( nTr, mHtml, sClass )
1776
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1777
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Find settings from table node */
1778
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1779
 
1780
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* the old open one if there is one */
1781
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			this.fnClose( nTr );
1782
 
1783
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nNewRow = document.createElement("tr");
1784
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nNewCell = document.createElement("td");
1785
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			nNewRow.appendChild( nNewCell );
1786
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			nNewCell.className = sClass;
1787
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			nNewCell.colSpan = _fnVisbleColumns( oSettings );
1788
 
1789
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if( typeof mHtml.jquery != 'undefined' || typeof mHtml == "object" )
1790
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1791
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				nNewCell.appendChild( mHtml );
1792
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1793
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
1794
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1795
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				nNewCell.innerHTML = mHtml;
1796
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1797
 
1798
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If the nTr isn't on the page at the moment - then we don't insert at the moment */
1799
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nTrs = $('tr', oSettings.nTBody);
1800
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( $.inArray(nTr, nTrs) != -1 )
1801
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1802
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$(nNewRow).insertAfter(nTr);
1803
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1804
 
1805
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aoOpenRows.push( {
1806
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"nTr": nNewRow,
1807
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"nParent": nTr
1808
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			} );
1809
 
1810
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return nNewRow;
1811
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1812
 
1813
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1814
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnClose
1815
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Close a display row
1816
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  int: 0 (success) or 1 (failed)
1817
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   node:nTr - the table row to 'close'
1818
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1819
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnClose = function( nTr )
1820
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1821
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Find settings from table node */
1822
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1823
 
1824
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
1825
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1826
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoOpenRows[i].nParent == nTr )
1827
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1828
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode;
1829
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( nTrParent )
1830
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1831
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Remove it if it is currently on display */
1832
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTrParent.removeChild( oSettings.aoOpenRows[i].nTr );
1833
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1834
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoOpenRows.splice( i, 1 );
1835
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return 0;
1836
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1837
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1838
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return 1;
1839
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1840
 
1841
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1842
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnGetData
1843
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Return an array with the data which is used to make up the table
1844
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  array array string: 2d data array ([row][column]) or array string: 1d data array
1845
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           or string if both row and column are given
1846
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   mixed:mRow - optional - if not present, then the full 2D array for the table 
1847
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             if given then:
1848
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *               int: - return data object for aoData entry of this index
1849
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *               node(TR): - return data object for this TR element
1850
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iCol - optional - the column that you want the data of. This will take into
1851
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *               account mDataProp and return the value DataTables uses for this column
1852
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1853
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnGetData = function( mRow, iCol )
1854
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1855
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1856
 
1857
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof mRow != 'undefined' )
1858
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1859
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var iRow = (typeof mRow == 'object') ? 
1860
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_fnNodeToDataIndex(oSettings, mRow) : mRow;
1861
 
1862
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof iCol != 'undefined' )
1863
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1864
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return _fnGetCellData( oSettings, iRow, iCol, '' );
1865
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1866
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return (typeof oSettings.aoData[iRow] != 'undefined') ? 
1867
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoData[iRow]._aData : null;
1868
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1869
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return _fnGetDataMaster( oSettings );
1870
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1871
 
1872
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1873
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnGetNodes
1874
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Return an array with the TR nodes used for drawing the table
1875
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  array node: TR elements
1876
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           or
1877
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           node (if iRow specified)
1878
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   int:iRow - optional - if present then the array returned will be the node for
1879
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             the row with the index 'iRow'
1880
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1881
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnGetNodes = function( iRow )
1882
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1883
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1884
 
1885
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof iRow != 'undefined' )
1886
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1887
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return (typeof oSettings.aoData[iRow] != 'undefined') ? oSettings.aoData[iRow].nTr : null;
1888
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1889
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return _fnGetTrNodes( oSettings );
1890
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1891
 
1892
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1893
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnGetPosition
1894
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Get the array indexes of a particular cell from it's DOM element
1895
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  int: - row index, or array[ int, int, int ]: - row index, column index (visible)
1896
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             and column index including hidden columns
1897
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   node:nNode - this can either be a TR, TD or TH in the table's body, the return is
1898
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             dependent on this input
1899
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1900
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnGetPosition = function( nNode )
1901
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1902
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1903
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var sNodeName = nNode.nodeName.toUpperCase();
1904
 
1905
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( sNodeName == "TR" )
1906
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1907
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return _fnNodeToDataIndex(oSettings, nNode);
1908
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1909
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( sNodeName == "TD" || sNodeName == "TH" )
1910
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1911
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var iDataIndex = _fnNodeToDataIndex(oSettings, nNode.parentNode);
1912
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var anCells = _fnGetTdNodes( oSettings, iDataIndex );
1913
 
1914
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( var i=0 ; i<oSettings.aoColumns.length ; i++ )
1915
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1916
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( anCells[i] == nNode )
1917
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1918
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						return [ iDataIndex, _fnColumnIndexToVisible(oSettings, i ), i ];
1919
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1920
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1921
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1922
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return null;
1923
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
1924
 
1925
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
1926
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnUpdate
1927
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Update a table cell or row - this method will accept either a single value to
1928
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             update the cell with, an array of values with one element for each column or
1929
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             an object in the same format as the original data source. The function is
1930
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             self-referencing in order to make the multi column updates easier.
1931
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  int: 0 okay, 1 error
1932
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object | array string | string:mData - data to update the cell/row with
1933
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           mixed:mRow - 
1934
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             int: - index of aoData to be updated, or
1935
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             node(TR): - TR element you want to update
1936
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iColumn - the column to update - optional (not used of mData is an array or object)
1937
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRedraw - redraw the table or not - default true
1938
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bAction - perform predraw actions or not (you will want this as 'true' if
1939
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             you have bRedraw as true) - default true
1940
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
1941
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
1942
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
1943
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
1944
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iVisibleColumn, i, iLen, sDisplay;
1945
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iRow = (typeof mRow == 'object') ? 
1946
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnNodeToDataIndex(oSettings, mRow) : mRow;
1947
 
1948
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( $.isArray(mData) && typeof mData == 'object' )
1949
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1950
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Array update - update the whole row */
1951
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoData[iRow]._aData = mData.slice();
1952
 
1953
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
1954
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1955
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
1956
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1957
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1958
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( mData !== null && typeof mData == 'object' )
1959
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1960
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Object update - update the whole row - assume the developer gets the object right */
1961
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
1962
 
1963
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
1964
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1965
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
1966
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1967
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1968
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
1969
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
1970
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Individual cell update */
1971
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				sDisplay = mData;
1972
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnSetCellData( oSettings, iRow, iColumn, sDisplay );
1973
 
1974
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoColumns[iColumn].fnRender !== null )
1975
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1976
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					sDisplay = oSettings.aoColumns[iColumn].fnRender( {
1977
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"iDataRow": iRow,
1978
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"iDataColumn": iColumn,
1979
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"aData": oSettings.aoData[iRow]._aData,
1980
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"oSettings": oSettings
1981
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					} );
1982
 
1983
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[iColumn].bUseRendered )
1984
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
1985
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnSetCellData( oSettings, iRow, iColumn, sDisplay );
1986
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
1987
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1988
 
1989
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoData[iRow].nTr !== null )
1990
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
1991
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Do the actual HTML update */
1992
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay;
1993
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
1994
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
1995
 
1996
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Modify the search index for this row (strictly this is likely not needed, since fnReDraw
1997
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * will rebuild the search array - however, the redraw might be disabled by the user)
1998
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
1999
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
2000
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings, 
2001
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnGetRowData( oSettings, iRow, 'filter' ) );
2002
 
2003
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Perform pre-draw actions */
2004
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bAction == 'undefined' || bAction )
2005
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2006
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnAdjustColumnSizing( oSettings );
2007
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2008
 
2009
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Redraw the table */
2010
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
2011
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2012
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnReDraw( oSettings );
2013
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2014
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return 0;
2015
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
2016
 
2017
 
2018
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2019
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnShowColoumn
2020
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Show a particular column
2021
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2022
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   int:iCol - the column whose display should be changed
2023
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bShow - show (true) or hide (false) the column
2024
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRedraw - redraw the table or not - default true
2025
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2026
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
2027
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2028
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
2029
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iLen;
2030
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iColumns = oSettings.aoColumns.length;
2031
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nTd, nCell, anTrs, jqChildren, bAppend, iBefore;
2032
 
2033
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* No point in doing anything if we are requesting what is already true */
2034
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.aoColumns[iCol].bVisible == bShow )
2035
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2036
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return;
2037
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2038
 
2039
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Show the column */
2040
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( bShow )
2041
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2042
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var iInsert = 0;
2043
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0 ; i<iCol ; i++ )
2044
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2045
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[i].bVisible )
2046
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2047
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						iInsert++;
2048
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2049
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2050
 
2051
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Need to decide if we should use appendChild or insertBefore */
2052
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				bAppend = (iInsert >= _fnVisbleColumns( oSettings ));
2053
 
2054
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Which coloumn should we be inserting before? */
2055
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( !bAppend )
2056
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2057
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( i=iCol ; i<iColumns ; i++ )
2058
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2059
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( oSettings.aoColumns[i].bVisible )
2060
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2061
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							iBefore = i;
2062
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							break;
2063
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2064
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2065
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2066
 
2067
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
2068
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2069
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoData[i].nTr !== null )
2070
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2071
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( bAppend )
2072
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2073
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oSettings.aoData[i].nTr.appendChild( 
2074
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								oSettings.aoData[i]._anHidden[iCol]
2075
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							);
2076
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2077
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						else
2078
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2079
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oSettings.aoData[i].nTr.insertBefore(
2080
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								oSettings.aoData[i]._anHidden[iCol], 
2081
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								_fnGetTdNodes( oSettings, i )[iBefore] );
2082
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2083
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2084
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2085
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2086
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
2087
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2088
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Remove a column from display */
2089
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
2090
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2091
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoData[i].nTr !== null )
2092
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2093
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTd = _fnGetTdNodes( oSettings, i )[iCol];
2094
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oSettings.aoData[i]._anHidden[iCol] = nTd;
2095
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTd.parentNode.removeChild( nTd );
2096
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2097
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2098
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2099
 
2100
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Clear to set the visible flag */
2101
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aoColumns[iCol].bVisible = bShow;
2102
 
2103
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Redraw the header and footer based on the new column visibility */
2104
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnDrawHead( oSettings, oSettings.aoHeader );
2105
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTFoot )
2106
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2107
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDrawHead( oSettings, oSettings.aoFooter );
2108
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2109
 
2110
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If there are any 'open' rows, then we need to alter the colspan for this col change */
2111
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ )
2112
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2113
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings );
2114
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2115
 
2116
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Do a redraw incase anything depending on the table columns needs it 
2117
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * (built-in: scrolling) 
2118
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2119
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
2120
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2121
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnAdjustColumnSizing( oSettings );
2122
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
2123
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2124
 
2125
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnSaveState( oSettings );
2126
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
2127
 
2128
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2129
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnPageChange
2130
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Change the pagination
2131
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2132
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   string:sAction - paging action to take: "first", "previous", "next" or "last"
2133
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bRedraw - redraw the table or not - optional - default true
2134
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2135
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnPageChange = function ( sAction, bRedraw )
2136
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2137
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
2138
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnPageChange( oSettings, sAction );
2139
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnCalculateEnd( oSettings );
2140
 
2141
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
2142
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2143
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
2144
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2145
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
2146
 
2147
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2148
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnDestroy
2149
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Destructor for the DataTable
2150
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2151
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   -
2152
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2153
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnDestroy = function ( )
2154
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2155
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
2156
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nOrig = oSettings.nTableWrapper.parentNode;
2157
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nBody = oSettings.nTBody;
2158
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iLen;
2159
 
2160
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Flag to note that the table is currently being destoryed - no action should be taken */
2161
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.bDestroying = true;
2162
 
2163
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Restore hidden columns */
2164
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=oSettings.aoDestroyCallback.length ; i<iLen ; i++ ) {
2165
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoDestroyCallback[i].fn();
2166
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2167
 
2168
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Restore hidden columns */
2169
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
2170
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2171
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoColumns[i].bVisible === false )
2172
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2173
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					this.fnSetColumnVis( i, true );
2174
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2175
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2176
 
2177
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Blitz all DT events */
2178
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$(oSettings.nTableWrapper).find('*').andSelf().off('.DT');
2179
 
2180
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If there is an 'empty' indicator row, remove it */
2181
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
2182
 
2183
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* When scrolling we had to break the table up - restore it */
2184
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTable != oSettings.nTHead.parentNode )
2185
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2186
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$(oSettings.nTable).children('thead').remove();
2187
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.nTable.appendChild( oSettings.nTHead );
2188
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2189
 
2190
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
2191
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2192
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$(oSettings.nTable).children('tfoot').remove();
2193
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.nTable.appendChild( oSettings.nTFoot );
2194
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2195
 
2196
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Remove the DataTables generated nodes, events and classes */
2197
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.nTable.parentNode.removeChild( oSettings.nTable );
2198
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$(oSettings.nTableWrapper).remove();
2199
 
2200
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aaSorting = [];
2201
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aaSortingFixed = [];
2202
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnSortingClasses( oSettings );
2203
 
2204
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') );
2205
 
2206
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oSettings.bJUI )
2207
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2208
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$('th', oSettings.nTHead).removeClass( [ _oExt.oStdClasses.sSortable,
2209
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oStdClasses.sSortableAsc,
2210
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oStdClasses.sSortableDesc,
2211
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oStdClasses.sSortableNone ].join(' ')
2212
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				);
2213
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2214
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
2215
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2216
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$('th', oSettings.nTHead).removeClass( [ _oExt.oStdClasses.sSortable,
2217
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oJUIClasses.sSortableAsc,
2218
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oJUIClasses.sSortableDesc,
2219
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_oExt.oJUIClasses.sSortableNone ].join(' ')
2220
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				);
2221
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$('th span.'+_oExt.oJUIClasses.sSortIcon, oSettings.nTHead).remove();
2222
 
2223
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$('th', oSettings.nTHead).each( function () {
2224
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var jqWrapper = $('div.'+_oExt.oJUIClasses.sSortJUIWrapper, this);
2225
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var kids = jqWrapper.contents();
2226
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					$(this).append( kids );
2227
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					jqWrapper.remove();
2228
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				} );
2229
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2230
 
2231
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Add the TR elements back into the table in their original order */
2232
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTableReinsertBefore )
2233
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2234
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore );
2235
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2236
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
2237
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2238
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				nOrig.appendChild( oSettings.nTable );
2239
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2240
 
2241
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
2242
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2243
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoData[i].nTr !== null )
2244
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2245
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nBody.appendChild( oSettings.aoData[i].nTr );
2246
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2247
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2248
 
2249
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Restore the width of the original table */
2250
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.oFeatures.bAutoWidth === true )
2251
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2252
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			  oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
2253
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2254
 
2255
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If the were originally odd/even type classes - then we add them back here. Note
2256
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * this is not fool proof (for example if not all rows as odd/even classes - but 
2257
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * it's a good effort without getting carried away
2258
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2259
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] );
2260
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			$(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] );
2261
 
2262
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Remove the settings object from the settings array */
2263
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=_aoSettings.length ; i<iLen ; i++ )
2264
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2265
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( _aoSettings[i] == oSettings )
2266
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2267
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_aoSettings.splice( i, 1 );
2268
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2269
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2270
 
2271
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* End it all */
2272
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings = null;
2273
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
2274
 
2275
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2276
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: fnAdjustColumnSizing
2277
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Update table sizing based on content. This would most likely be used for scrolling
2278
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   and will typically need a redraw after it.
2279
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2280
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   bool:bRedraw - redraw the table or not, you will typically want to - default true
2281
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2282
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		this.fnAdjustColumnSizing = function ( bRedraw )
2283
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2284
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]);
2285
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnAdjustColumnSizing( oSettings );
2286
 
2287
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bRedraw == 'undefined' || bRedraw )
2288
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2289
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				this.fnDraw( false );
2290
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2291
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
2292
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2293
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
2294
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				this.oApi._fnScrollDraw(oSettings);
2295
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2296
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		};
2297
 
2298
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2299
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Plugin API functions
2300
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * 
2301
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * This call will add the functions which are defined in _oExt.oApi to the
2302
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * DataTables object, providing a rather nice way to allow plug-in API functions. Note that
2303
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * this is done here, so that API function can actually override the built in API functions if
2304
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * required for a particular purpose.
2305
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2306
 
2307
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2308
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnExternApiFunc
2309
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Create a wrapper function for exporting an internal func to an external API func
2310
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  function: - wrapped function
2311
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   string:sFunc - API function name
2312
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2313
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnExternApiFunc (sFunc)
2314
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2315
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return function() {
2316
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var aArgs = [_fnSettingsFromNode(this[_oExt.iApiIndex])].concat( 
2317
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						Array.prototype.slice.call(arguments) );
2318
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					return _oExt.oApi[sFunc].apply( this, aArgs );
2319
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				};
2320
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2321
 
2322
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		for ( var sFunc in _oExt.oApi )
2323
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2324
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( sFunc )
2325
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2326
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/*
2327
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 * Function: anon
2328
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 * Purpose:  Wrap the plug-in API functions in order to provide the settings as 1st arg 
2329
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 *   and execute in this scope
2330
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 * Returns:  -
2331
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 * Inputs:   -
2332
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 */
2333
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				this[sFunc] = _fnExternApiFunc(sFunc);
2334
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2335
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2336
 
2337
 
2338
 
2339
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2340
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Section - Local functions
2341
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2342
 
2343
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2344
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Section - Initialisation
2345
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2346
 
2347
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2348
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnInitialise
2349
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Draw the table for the first time, adding all required features
2350
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2351
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2352
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2353
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnInitialise ( oSettings )
2354
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2355
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iLen, iAjaxStart=oSettings.iInitDisplayStart;
2356
 
2357
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Ensure that the table data is fully initialised */
2358
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.bInitialised === false )
2359
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2360
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				setTimeout( function(){ _fnInitialise( oSettings ); }, 200 );
2361
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return;
2362
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2363
 
2364
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Show the display HTML options */
2365
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnAddOptionsHtml( oSettings );
2366
 
2367
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Build and draw the header / footer for the table */
2368
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnBuildHead( oSettings );
2369
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnDrawHead( oSettings, oSettings.aoHeader );
2370
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTFoot )
2371
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2372
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDrawHead( oSettings, oSettings.aoFooter );
2373
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2374
 
2375
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Okay to show that something is going on now */
2376
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnProcessingDisplay( oSettings, true );
2377
 
2378
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Calculate sizes for columns */
2379
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.oFeatures.bAutoWidth )
2380
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2381
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCalculateColumnWidths( oSettings );
2382
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2383
 
2384
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
2385
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2386
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoColumns[i].sWidth !== null )
2387
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2388
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth );
2389
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2390
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2391
 
2392
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If there is default sorting required - let's do it. The sort function will do the
2393
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows
2394
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * the table to look initialised for Ajax sourcing data (show 'loading' message possibly)
2395
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2396
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.oFeatures.bSort )
2397
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2398
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnSort( oSettings );
2399
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2400
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( oSettings.oFeatures.bFilter )
2401
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2402
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
2403
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2404
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
2405
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2406
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
2407
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCalculateEnd( oSettings );
2408
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDraw( oSettings );
2409
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2410
 
2411
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* if there is an ajax source load the data */
2412
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
2413
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2414
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var aoData = [];
2415
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnServerParams( oSettings, aoData );
2416
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) {
2417
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var aData = json;
2418
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.sAjaxDataProp !== "" )
2419
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2420
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						var fnDataSrc = _fnGetObjectDataFn( oSettings.sAjaxDataProp );
2421
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aData = fnDataSrc( json );
2422
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2423
 
2424
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Got the data - add it to the table */
2425
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( i=0 ; i<aData.length ; i++ )
2426
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2427
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnAddData( oSettings, aData[i] );
2428
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2429
 
2430
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Reset the init display for cookie saving. We've already done a filter, and
2431
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 * therefore cleared it before. So we need to make it appear 'fresh'
2432
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 */
2433
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.iInitDisplayStart = iAjaxStart;
2434
 
2435
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.oFeatures.bSort )
2436
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2437
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnSort( oSettings );
2438
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2439
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					else
2440
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2441
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
2442
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnCalculateEnd( oSettings );
2443
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnDraw( oSettings );
2444
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2445
 
2446
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_fnProcessingDisplay( oSettings, false );
2447
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_fnInitComplete( oSettings, json );
2448
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}, oSettings );
2449
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return;
2450
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2451
 
2452
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Server-side processing initialisation complete is done at the end of _fnDraw */
2453
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oSettings.oFeatures.bServerSide )
2454
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2455
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnProcessingDisplay( oSettings, false );
2456
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnInitComplete( oSettings );
2457
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2458
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2459
 
2460
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2461
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnInitComplete
2462
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Draw the table for the first time, adding all required features
2463
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2464
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2465
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2466
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnInitComplete ( oSettings, json )
2467
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2468
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings._bInitComplete = true;
2469
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oSettings.fnInitComplete == 'function' )
2470
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2471
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof json != 'undefined' )
2472
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2473
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.fnInitComplete.call( oSettings.oInstance, oSettings, json );
2474
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2475
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				else
2476
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2477
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.fnInitComplete.call( oSettings.oInstance, oSettings );
2478
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2479
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2480
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2481
 
2482
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2483
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnLanguageProcess
2484
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Copy language variables from remote object to a local one
2485
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2486
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2487
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           object:oLanguage - Language information
2488
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           bool:bInit - init once complete
2489
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2490
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnLanguageProcess( oSettings, oLanguage, bInit )
2491
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2492
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.oLanguage = $.extend( true, oSettings.oLanguage, oLanguage );
2493
 
2494
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Backwards compatibility - if there is no sEmptyTable given, then use the same as
2495
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * sZeroRecords - assuming that is given.
2496
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2497
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oLanguage.sEmptyTable == 'undefined' && 
2498
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			     typeof oLanguage.sZeroRecords != 'undefined' )
2499
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2500
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oSettings.oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
2501
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2502
 
2503
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Likewise with loading records */
2504
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oLanguage.sLoadingRecords == 'undefined' && 
2505
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			     typeof oLanguage.sZeroRecords != 'undefined' )
2506
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2507
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oSettings.oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
2508
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2509
 
2510
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( bInit )
2511
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2512
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnInitialise( oSettings );
2513
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2514
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2515
 
2516
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2517
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnAddColumn
2518
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Add a column to the list used for the table with default values
2519
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2520
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2521
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           node:nTh - the th element for this column
2522
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2523
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnAddColumn( oSettings, nTh )
2524
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2525
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iCol = oSettings.aoColumns.length;
2526
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oCol = {
2527
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sType": null,
2528
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"_bAutoType": true,
2529
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bVisible": true,
2530
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bSearchable": true,
2531
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bSortable": true,
2532
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"asSorting": [ 'asc', 'desc' ],
2533
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sSortingClass": oSettings.oClasses.sSortable,
2534
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sSortingClassJUI": oSettings.oClasses.sSortJUI,
2535
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sTitle": nTh ? nTh.innerHTML : '',
2536
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sName": '',
2537
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sWidth": null,
2538
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sWidthOrig": null,
2539
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sClass": null,
2540
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"fnRender": null,
2541
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"bUseRendered": true,
2542
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"iDataSort": iCol,
2543
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"mDataProp": iCol,
2544
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"fnGetData": null,
2545
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"fnSetData": null,
2546
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sSortDataType": 'std',
2547
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sDefaultContent": null,
2548
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"sContentPadding": "",
2549
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"nTh": nTh ? nTh : document.createElement('th'),
2550
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"nTf": null
2551
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
2552
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aoColumns.push( oCol );
2553
 
2554
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Add a column specific filter */
2555
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oSettings.aoPreSearchCols[ iCol ] == 'undefined' ||
2556
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			     oSettings.aoPreSearchCols[ iCol ] === null )
2557
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2558
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.aoPreSearchCols[ iCol ] = {
2559
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"sSearch": "",
2560
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"bRegex": false,
2561
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"bSmart": true
2562
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				};
2563
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2564
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
2565
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2566
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Don't require that the user must specify bRegex and / or bSmart */
2567
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oSettings.aoPreSearchCols[ iCol ].bRegex == 'undefined' )
2568
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2569
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoPreSearchCols[ iCol ].bRegex = true;
2570
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2571
 
2572
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oSettings.aoPreSearchCols[ iCol ].bSmart == 'undefined' )
2573
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2574
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoPreSearchCols[ iCol ].bSmart = true;
2575
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2576
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2577
 
2578
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Use the column options function to initialise classes etc */
2579
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			_fnColumnOptions( oSettings, iCol, null );
2580
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2581
 
2582
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2583
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnColumnOptions
2584
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Apply options for a column
2585
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2586
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2587
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iCol - column index to consider
2588
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           object:oOptions - object with sType, bVisible and bSearchable
2589
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2590
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnColumnOptions( oSettings, iCol, oOptions )
2591
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2592
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oCol = oSettings.aoColumns[ iCol ];
2593
 
2594
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* User specified column options */
2595
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oOptions != 'undefined' && oOptions !== null )
2596
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2597
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oOptions.sType != 'undefined' )
2598
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2599
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oCol.sType = oOptions.sType;
2600
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oCol._bAutoType = false;
2601
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2602
 
2603
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "bVisible" );
2604
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "bSearchable" );
2605
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "bSortable" );
2606
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sTitle" );
2607
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sName" );
2608
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sWidth" );
2609
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
2610
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sClass" );
2611
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "fnRender" );
2612
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "bUseRendered" );
2613
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "iDataSort" );
2614
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "mDataProp" );
2615
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "asSorting" );
2616
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sSortDataType" );
2617
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sDefaultContent" );
2618
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnMap( oCol, oOptions, "sContentPadding" );
2619
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2620
 
2621
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Cache the data get and set functions for speed */
2622
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oCol.fnGetData = _fnGetObjectDataFn( oCol.mDataProp );
2623
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oCol.fnSetData = _fnSetObjectDataFn( oCol.mDataProp );
2624
 
2625
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Feature sorting overrides column specific when off */
2626
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oSettings.oFeatures.bSort )
2627
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2628
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.bSortable = false;
2629
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2630
 
2631
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check that the class assignment is correct for sorting */
2632
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oCol.bSortable ||
2633
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				 ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
2634
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2635
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClass = oSettings.oClasses.sSortableNone;
2636
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClassJUI = "";
2637
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2638
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( oCol.bSortable ||
2639
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			          ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
2640
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2641
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			  oCol.sSortingClass = oSettings.oClasses.sSortable;
2642
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			  oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI;
2643
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2644
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
2645
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2646
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClass = oSettings.oClasses.sSortableAsc;
2647
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed;
2648
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2649
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 )
2650
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2651
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClass = oSettings.oClasses.sSortableDesc;
2652
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed;
2653
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2654
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2655
 
2656
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2657
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnAddData
2658
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Add a data array to the table, creating DOM node etc
2659
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  int: - >=0 if successful (index of new aoData entry), -1 if failed
2660
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2661
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           array:aData - data array to be added
2662
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    There are two basic methods for DataTables to get data to display - a JS array
2663
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   (which is dealt with by this function), and the DOM, which has it's own optimised
2664
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   function (_fnGatherData). Be careful to make the same changes here as there and vice-versa
2665
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2666
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnAddData ( oSettings, aDataSupplied )
2667
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2668
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oCol;
2669
 
2670
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Take an independent copy of the data source so we can bash it about as we wish */
2671
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var aDataIn = ($.isArray(aDataSupplied)) ?
2672
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				aDataSupplied.slice() :
2673
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$.extend( true, {}, aDataSupplied );
2674
 
2675
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Create the object for storing information about this new row */
2676
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iRow = oSettings.aoData.length;
2677
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oData = {
2678
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"nTr": null,
2679
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"_iId": oSettings.iNextId++,
2680
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"_aData": aDataIn,
2681
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"_anHidden": [],
2682
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				"_sRowStripe": ""
2683
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
2684
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aoData.push( oData );
2685
 
2686
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Create the cells */
2687
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nTd, sThisType;
2688
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
2689
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2690
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oCol = oSettings.aoColumns[i];
2691
 
2692
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Use rendered data for filtering/sorting */
2693
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oCol.fnRender == 'function' && oCol.bUseRendered && oCol.mDataProp !== null )
2694
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2695
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					_fnSetCellData( oSettings, iRow, i, oCol.fnRender( {
2696
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"iDataRow": iRow,
2697
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"iDataColumn": i,
2698
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"aData": oData._aData,
2699
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						"oSettings": oSettings
2700
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					} ) );
2701
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2702
 
2703
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* See if we should auto-detect the column type */
2704
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oCol._bAutoType && oCol.sType != 'string' )
2705
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2706
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Attempt to auto detect the type - same as _fnGatherData() */
2707
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' );
2708
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( sVarType !== null && sVarType !== '' )
2709
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2710
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						sThisType = _fnDetectType( sVarType );
2711
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( oCol.sType === null )
2712
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2713
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oCol.sType = sThisType;
2714
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2715
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						else if ( oCol.sType != sThisType && oCol.sType != "html" )
2716
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2717
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							/* String is always the 'fallback' option */
2718
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oCol.sType = 'string';
2719
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2720
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2721
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2722
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2723
 
2724
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Add to the display array */
2725
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.aiDisplayMaster.push( iRow );
2726
 
2727
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Create the DOM imformation */
2728
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( !oSettings.oFeatures.bDeferRender )
2729
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2730
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCreateTr( oSettings, iRow );
2731
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2732
 
2733
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			return iRow;
2734
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2735
 
2736
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2737
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnCreateTr
2738
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Create a new TR element (and it's TD children) for a row
2739
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  void
2740
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2741
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           int:iRow - Row to consider
2742
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2743
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnCreateTr ( oSettings, iRow )
2744
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2745
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var oData = oSettings.aoData[iRow];
2746
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var nTd;
2747
 
2748
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oData.nTr === null )
2749
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2750
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oData.nTr = document.createElement('tr');
2751
 
2752
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Special parameters can be given by the data source to be used on the row */
2753
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oData._aData.DT_RowId != 'undefined' )
2754
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2755
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oData.nTr.setAttribute( 'id', oData._aData.DT_RowId );
2756
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2757
 
2758
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( typeof oData._aData.DT_RowClass != 'undefined' )
2759
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2760
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					$(oData.nTr).addClass( oData._aData.DT_RowClass );
2761
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2762
 
2763
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Process each column */
2764
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
2765
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2766
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var oCol = oSettings.aoColumns[i];
2767
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTd = document.createElement('td');
2768
 
2769
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Render if needed - if bUseRendered is true then we already have the rendered
2770
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 * value in the data source - so can just use that
2771
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 */
2772
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( typeof oCol.fnRender == 'function' && (!oCol.bUseRendered || oCol.mDataProp === null) )
2773
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2774
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTd.innerHTML = oCol.fnRender( {
2775
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"iDataRow": iRow,
2776
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"iDataColumn": i,
2777
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"aData": oData._aData,
2778
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"oSettings": oSettings
2779
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						} );
2780
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2781
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					else
2782
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2783
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );
2784
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2785
 
2786
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Add user defined class */
2787
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oCol.sClass !== null )
2788
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2789
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTd.className = oCol.sClass;
2790
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2791
 
2792
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oCol.bVisible )
2793
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2794
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oData.nTr.appendChild( nTd );
2795
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oData._anHidden[i] = null;
2796
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2797
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					else
2798
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2799
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oData._anHidden[i] = nTd;
2800
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2801
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2802
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2803
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2804
 
2805
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2806
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnGatherData
2807
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Read in the data from the target table from the DOM
2808
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2809
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2810
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Notes:    This is a optimised version of _fnAddData (more or less) for reading information
2811
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *   from the DOM. The basic actions must be identical in the two functions.
2812
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2813
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnGatherData( oSettings )
2814
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2815
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iLoop, i, iLen, j, jLen, jInner,
2816
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 	nTds, nTrs, nTd, aLocalData, iThisIndex,
2817
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				iRow, iRows, iColumn, iColumns, sNodeName;
2818
 
2819
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/*
2820
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Process by row first
2821
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * Add the data object for the whole table - storing the tr node. Note - no point in getting
2822
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * DOM based data if we are going to go and replace it with Ajax source data.
2823
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2824
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
2825
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2826
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				nTrs = oSettings.nTBody.childNodes;
2827
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
2828
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2829
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( nTrs[i].nodeName.toUpperCase() == "TR" )
2830
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2831
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						iThisIndex = oSettings.aoData.length;
2832
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oSettings.aoData.push( {
2833
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"nTr": nTrs[i],
2834
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"_iId": oSettings.iNextId++,
2835
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"_aData": [],
2836
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"_anHidden": [],
2837
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							"_sRowStripe": ''
2838
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						} );
2839
 
2840
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oSettings.aiDisplayMaster.push( iThisIndex );
2841
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTds = nTrs[i].childNodes;
2842
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						jInner = 0;
2843
 
2844
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
2845
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2846
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							sNodeName = nTds[j].nodeName.toUpperCase();
2847
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							if ( sNodeName == "TD" || sNodeName == "TH" )
2848
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							{
2849
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								_fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTds[j].innerHTML) );
2850
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								jInner++;
2851
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							}
2852
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2853
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2854
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2855
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2856
 
2857
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Gather in the TD elements of the Table - note that this is basically the same as
2858
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet
2859
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 * setup!
2860
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			 */
2861
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			nTrs = _fnGetTrNodes( oSettings );
2862
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			nTds = [];
2863
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
2864
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2865
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ )
2866
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2867
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTd = nTrs[i].childNodes[j];
2868
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					sNodeName = nTd.nodeName.toUpperCase();
2869
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( sNodeName == "TD" || sNodeName == "TH" )
2870
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2871
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTds.push( nTd );
2872
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2873
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2874
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2875
 
2876
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Sanity check */
2877
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( nTds.length != nTrs.length * oSettings.aoColumns.length )
2878
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2879
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnLog( oSettings, 1, "Unexpected number of TD elements. Expected "+
2880
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					(nTrs.length * oSettings.aoColumns.length)+" and got "+nTds.length+". DataTables does "+
2881
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"not support rowspan / colspan in the table body, and there must be one cell for each "+
2882
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					"row/column combination." );
2883
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2884
 
2885
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Now process by column */
2886
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
2887
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2888
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Get the title of the column - unless there is a user set one */
2889
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.aoColumns[iColumn].sTitle === null )
2890
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2891
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings.aoColumns[iColumn].sTitle = oSettings.aoColumns[iColumn].nTh.innerHTML;
2892
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2893
 
2894
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var
2895
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					bAutoType = oSettings.aoColumns[iColumn]._bAutoType,
2896
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					bRender = typeof oSettings.aoColumns[iColumn].fnRender == 'function',
2897
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					bClass = oSettings.aoColumns[iColumn].sClass !== null,
2898
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					bVisible = oSettings.aoColumns[iColumn].bVisible,
2899
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nCell, sThisType, sRendered, sValType;
2900
 
2901
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* A single loop to rule them all (and be more efficient) */
2902
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( bAutoType || bRender || bClass || !bVisible )
2903
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2904
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ )
2905
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2906
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nCell = nTds[ (iRow*iColumns) + iColumn ];
2907
 
2908
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Type detection */
2909
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( bAutoType && oSettings.aoColumns[iColumn].sType != 'string' )
2910
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2911
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' );
2912
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							if ( sValType !== '' )
2913
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							{
2914
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								sThisType = _fnDetectType( sValType );
2915
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								if ( oSettings.aoColumns[iColumn].sType === null )
2916
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								{
2917
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									oSettings.aoColumns[iColumn].sType = sThisType;
2918
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								}
2919
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								else if ( oSettings.aoColumns[iColumn].sType != sThisType && 
2920
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								          oSettings.aoColumns[iColumn].sType != "html" )
2921
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								{
2922
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									/* String is always the 'fallback' option */
2923
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									oSettings.aoColumns[iColumn].sType = 'string';
2924
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								}
2925
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							}
2926
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2927
 
2928
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Rendering */
2929
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( bRender )
2930
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2931
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							sRendered = oSettings.aoColumns[iColumn].fnRender( {
2932
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									"iDataRow": iRow,
2933
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									"iDataColumn": iColumn,
2934
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									"aData": oSettings.aoData[iRow]._aData,
2935
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>									"oSettings": oSettings
2936
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								} );
2937
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							nCell.innerHTML = sRendered;
2938
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							if ( oSettings.aoColumns[iColumn].bUseRendered )
2939
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							{
2940
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								/* Use the rendered data for filtering/sorting */
2941
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								_fnSetCellData( oSettings, iRow, iColumn, sRendered );
2942
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							}
2943
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2944
 
2945
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Classes */
2946
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( bClass )
2947
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2948
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							nCell.className += ' '+oSettings.aoColumns[iColumn].sClass;
2949
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2950
 
2951
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Column visability */
2952
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						if ( !bVisible )
2953
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2954
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oSettings.aoData[iRow]._anHidden[iColumn] = nCell;
2955
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							nCell.parentNode.removeChild( nCell );
2956
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2957
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						else
2958
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
2959
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							oSettings.aoData[iRow]._anHidden[iColumn] = null;
2960
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
2961
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2962
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2963
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
2964
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
2965
 
2966
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
2967
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnBuildHead
2968
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Create the HTML header for the table
2969
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
2970
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
2971
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
2972
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnBuildHead( oSettings )
2973
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
2974
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, nTh, iLen, j, jLen;
2975
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var anTr = oSettings.nTHead.getElementsByTagName('tr');
2976
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iThs = oSettings.nTHead.getElementsByTagName('th').length;
2977
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iCorrector = 0;
2978
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var jqChildren;
2979
 
2980
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* If there is a header in place - then use it - otherwise it's going to get nuked... */
2981
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( iThs !== 0 )
2982
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
2983
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */
2984
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
2985
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
2986
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTh = oSettings.aoColumns[i].nTh;
2987
 
2988
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[i].sClass !== null )
2989
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2990
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$(nTh).addClass( oSettings.aoColumns[i].sClass );
2991
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2992
 
2993
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Set the title of the column if it is user defined (not what was auto detected) */
2994
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML )
2995
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
2996
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						nTh.innerHTML = oSettings.aoColumns[i].sTitle;
2997
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
2998
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
2999
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3000
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else
3001
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3002
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* We don't have a header in the DOM - so we are going to have to create one */
3003
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var nTr = document.createElement( "tr" );
3004
 
3005
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
3006
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3007
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTh = oSettings.aoColumns[i].nTh;
3008
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTh.innerHTML = oSettings.aoColumns[i].sTitle;
3009
 
3010
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[i].sClass !== null )
3011
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3012
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$(nTh).addClass( oSettings.aoColumns[i].sClass );
3013
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3014
 
3015
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTr.appendChild( nTh );
3016
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3017
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$(oSettings.nTHead).html( '' )[0].appendChild( nTr );
3018
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnDetectHeader( oSettings.aoHeader, oSettings.nTHead );
3019
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3020
 
3021
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Add the extra markup needed by jQuery UI's themes */
3022
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.bJUI )
3023
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3024
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
3025
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3026
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTh = oSettings.aoColumns[i].nTh;
3027
 
3028
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var nDiv = document.createElement('div');
3029
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nDiv.className = oSettings.oClasses.sSortJUIWrapper;
3030
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					$(nTh).contents().appendTo(nDiv);
3031
 
3032
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					var nSpan = document.createElement('span');
3033
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nSpan.className = oSettings.oClasses.sSortIcon;
3034
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nDiv.appendChild( nSpan );
3035
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					nTh.appendChild( nDiv );
3036
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3037
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3038
 
3039
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Add sort listener */
3040
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var fnNoSelect = function (e) {
3041
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				this.onselectstart = function() { return false; };
3042
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return false;
3043
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			};
3044
 
3045
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.oFeatures.bSort )
3046
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3047
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
3048
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3049
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( oSettings.aoColumns[i].bSortable !== false )
3050
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3051
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						_fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
3052
 
3053
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Take the brutal approach to cancelling text selection in header */
3054
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$(oSettings.aoColumns[i].nTh).on( 'mousedown.DT', fnNoSelect );
3055
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3056
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					else
3057
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3058
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						$(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone );
3059
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3060
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3061
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3062
 
3063
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Deal with the footer - add classes if required */
3064
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.oClasses.sFooterTH !== "" )
3065
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3066
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				$(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH );
3067
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3068
 
3069
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Cache the footer elements */
3070
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.nTFoot !== null )
3071
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3072
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter );
3073
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
3074
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3075
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( typeof anCells[i] != 'undefined' )
3076
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3077
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						oSettings.aoColumns[i].nTf = anCells[i];
3078
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3079
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3080
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3081
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
3082
 
3083
 
3084
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
3085
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Section - Drawing functions
3086
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
3087
 
3088
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
3089
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnDrawHead
3090
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Draw the header (or footer) element based on the column visibility states. The
3091
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           methodology here is to use the layout array from _fnDetectHeader, modified for
3092
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           the instantaneous column visibility, to construct the new layout. The grid is
3093
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           traversed over cell at a time in a rows x columns grid fashion, although each 
3094
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           cell insert can cover multiple elements in the grid - which is tracks using the
3095
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           aApplied array. Cell inserts in the grid will only occur where there isn't
3096
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           already a cell in that position.
3097
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
3098
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
3099
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           array objects:aoSource - Layout array from _fnDetectHeader
3100
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *           boolean:bIncludeHidden - If true then include the hidden columns in the calc, 
3101
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 *             - optional: default false
3102
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
3103
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
3104
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
3105
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iLen, j, jLen, k, kLen;
3106
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var aoLocal = [];
3107
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var aApplied = [];
3108
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iColumns = oSettings.aoColumns.length;
3109
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iRowspan, iColspan;
3110
 
3111
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof bIncludeHidden == 'undefined' )
3112
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3113
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				bIncludeHidden = false;
3114
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3115
 
3116
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Make a copy of the master layout array, but without the visible columns in it */
3117
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
3118
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3119
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				aoLocal[i] = aoSource[i].slice();
3120
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				aoLocal[i].nTr = aoSource[i].nTr;
3121
 
3122
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Remove any columns which are currently hidden */
3123
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( j=iColumns-1 ; j>=0 ; j-- )
3124
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3125
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
3126
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3127
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aoLocal[i].splice( j, 1 );
3128
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3129
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3130
 
3131
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* Prep the applied array - it needs an element for each row */
3132
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				aApplied.push( [] );
3133
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3134
 
3135
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
3136
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3137
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				/* All cells are going to be replaced, so empty out the row */
3138
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( aoLocal[i].nTr )
3139
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3140
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					for ( k=0, kLen=aoLocal[i].nTr.childNodes.length ; k<kLen ; k++ )
3141
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3142
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aoLocal[i].nTr.removeChild( aoLocal[i].nTr.childNodes[0] );
3143
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3144
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3145
 
3146
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
3147
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3148
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					iRowspan = 1;
3149
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					iColspan = 1;
3150
 
3151
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					/* Check to see if there is already a cell (row/colspan) covering our target
3152
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 * insert point. If there is, then there is nothing to do.
3153
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					 */
3154
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					if ( typeof aApplied[i][j] == 'undefined' )
3155
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					{
3156
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aoLocal[i].nTr.appendChild( aoLocal[i][j].cell );
3157
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aApplied[i][j] = 1;
3158
 
3159
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Expand the cell to cover as many rows as needed */
3160
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						while ( typeof aoLocal[i+iRowspan] != 'undefined' &&
3161
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
3162
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
3163
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							aApplied[i+iRowspan][j] = 1;
3164
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							iRowspan++;
3165
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
3166
 
3167
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Expand the cell to cover as many columns as needed */
3168
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						while ( typeof aoLocal[i][j+iColspan] != 'undefined' &&
3169
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
3170
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						{
3171
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							/* Must update the applied array over the rows for the columns */
3172
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							for ( k=0 ; k<iRowspan ; k++ )
3173
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							{
3174
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>								aApplied[i+k][j+iColspan] = 1;
3175
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							}
3176
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>							iColspan++;
3177
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						}
3178
 
3179
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						/* Do the actual expansion in the DOM */
3180
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aoLocal[i][j].cell.rowSpan = iRowspan;
3181
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>						aoLocal[i][j].cell.colSpan = iColspan;
3182
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					}
3183
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3184
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3185
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		}
3186
 
3187
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		/*
3188
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Function: _fnDraw
3189
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Purpose:  Insert the required TR nodes into the table for display
3190
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Returns:  -
3191
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 * Inputs:   object:oSettings - dataTables settings object
3192
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		 */
3193
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		function _fnDraw( oSettings )
3194
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>		{
3195
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var i, iLen;
3196
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var anRows = [];
3197
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iRowCount = 0;
3198
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var bRowError = false;
3199
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iStripes = oSettings.asStripeClasses.length;
3200
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			var iOpenRows = oSettings.aoOpenRows.length;
3201
 
3202
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
3203
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.fnPreDrawCallback !== null &&
3204
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			     oSettings.fnPreDrawCallback.call( oSettings.oInstance, oSettings ) === false )
3205
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3206
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			     return;
3207
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3208
 
3209
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			oSettings.bDrawing = true;
3210
 
3211
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Check and see if we have an initial draw position from state saving */
3212
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( typeof oSettings.iInitDisplayStart != 'undefined' && oSettings.iInitDisplayStart != -1 )
3213
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3214
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.oFeatures.bServerSide )
3215
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3216
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings._iDisplayStart = oSettings.iInitDisplayStart;
3217
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3218
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				else
3219
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3220
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ?
3221
 
3222
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				}
3223
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.iInitDisplayStart = -1;
3224
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				_fnCalculateEnd( oSettings );
3225
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3226
 
3227
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			/* Server-side processing draw intercept */
3228
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.bDeferLoading )
3229
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3230
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.bDeferLoading = false;
3231
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.iDraw++;
3232
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3233
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( !oSettings.oFeatures.bServerSide )
3234
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3235
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				oSettings.iDraw++;
3236
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3237
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
3238
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3239
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				return;
3240
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			}
3241
 
3242
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			if ( oSettings.aiDisplay.length !== 0 )
3243
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>			{
3244
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var iStart = oSettings._iDisplayStart;
3245
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				var iEnd = oSettings._iDisplayEnd;
3246
 
3247
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				if ( oSettings.oFeatures.bServerSide )
3248
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>				{
3249
< iPageCount)<= iPageCountHalf)<.*?><.*?><.*?><.*?>					iStart = 0;