docs: function (column, col) {
  		var rawColumns = this.rawColumns,
  			columns = this.columns, 
  			row = column.length,
  			val,
  			floatVal,
  			trimVal,
  			trimInsideVal,
  			firstRowAsNames = this.firstRowAsNames,
  			isXColumn = inArray(col, this.valueCount.xColumns) !== -1,
  			dateVal,
  			backup = [],
  			diff,
  			chartOptions = this.chartOptions,
  			descending,
  			columnTypes = this.options.columnTypes || [],
  			columnType = columnTypes[col],
  			forceCategory = isXColumn && ((chartOptions && chartOptions.xAxis && splat(chartOptions.xAxis)[0].type === 'category') || columnType === 'string');
  		
  		if (!rawColumns[col]) {
  			rawColumns[col] = [];
  		}
  		while (row--) {
  			val = backup[row] || column[row];
  			
  			trimVal = this.trim(val);
  			trimInsideVal = this.trim(val, true);
  			floatVal = parseFloat(trimInsideVal);
  
  			// Set it the first time
  			if (rawColumns[col][row] === undefined) {
  				rawColumns[col][row] = trimVal;
  			}
  			
  			// Disable number or date parsing by setting the X axis type to category
  			if (forceCategory || (row === 0 && firstRowAsNames)) {
  				column[row] = trimVal;
  
  			} else if (+trimInsideVal === floatVal) { // is numeric
  			
  				column[row] = floatVal;
  				
  				// If the number is greater than milliseconds in a year, assume datetime
  				if (floatVal > 365 * 24 * 3600 * 1000 && columnType !== 'float') {
  					column.isDatetime = true;
  				} else {
  					column.isNumeric = true;
  				}
  
  				if (column[row + 1] !== undefined) {
  					descending = floatVal > column[row + 1];
  				}
  			
  			// String, continue to determine if it is a date string or really a string
  			} else {
  				dateVal = this.parseDate(val);
  				// Only allow parsing of dates if this column is an x-column
  				if (isXColumn && typeof dateVal === 'number' && !isNaN(dateVal) && columnType !== 'float') { // is date
  					backup[row] = val; 
  					column[row] = dateVal;
  					column.isDatetime = true;
  
  					// Check if the dates are uniformly descending or ascending. If they 
  					// are not, chances are that they are a different time format, so check
  					// for alternative.
  					if (column[row + 1] !== undefined) {
  						diff = dateVal > column[row + 1];
  						if (diff !== descending && descending !== undefined) {
  							if (this.alternativeFormat) {
  								this.dateFormat = this.alternativeFormat;
  								row = column.length;
  								this.alternativeFormat = this.dateFormats[this.dateFormat].alternative;
  							} else {
  								column.unsorted = true;
  							}
  						}
  						descending = diff;
  					}
  				
  				} else { // string
  					column[row] = trimVal === '' ? null : trimVal;
  					if (row !== 0 && (column.isDatetime || column.isNumeric)) {
  						column.mixed = true;
  					}
  				}
  			}
  		}
  
  		// If strings are intermixed with numbers or dates in a parsed column, it is an indication
  		// that parsing went wrong or the data was not intended to display as numbers or dates and 
  		// parsing is too aggressive. Fall back to categories. Demonstrated in the 
  		// highcharts/demo/column-drilldown sample.
  		if (isXColumn && column.mixed) {
  			columns[col] = rawColumns[col];
  		}
  
  		// If the 0 column is date or number and descending, reverse all columns. 
  		if (isXColumn && descending && this.options.sort) {
  			for (col = 0; col < columns.length; col++) {
  				columns[col].reverse();
  				if (firstRowAsNames) {
  					columns[col].unshift(columns[col].pop());
  				}
  			}
  		}
  	}