/**
 * Tabular data sorting customization
 * @version $Id: sortinCustomization.js 1000 2009-11-28 00:32:32Z maros $
 * @author Martin Adamec
 */

TableKit.Sortable.complexCells = $A($w('rankSort editableSort wholeNameSort avgResponesSort'));

TableKit.Sortable.addSortType(
	new TableKit.Sortable.Type('rankSort', {
		pattern: /^.*$/,
		compare : function(a,b){
			Element.extend(a);
			Element.extend(b);
			aChildren = a ? a.childElements() : $A([]);
			bChildren = b ? b.childElements() : $A([]);
			aLen = aChildren ? aChildren.length : 0;
			bLen = bChildren ? bChildren.length : 0;
			return aLen < bLen ? -1 : aLen == bLen ? 0 : 1;
		}
	 }),
	 new TableKit.Sortable.Type('editableSort', { 
		pattern: /^.*$/,
		compare : function(a,b){
			aVal = a.firstDescendant().value.toLowerCase();
			bVal = b.firstDescendant().value.toLowerCase();
			return aVal < bVal ? -1 : aVal === bVal ? 0 : 1;
		}
	 }),
	 new TableKit.Sortable.Type('wholeNameSort', { 
		pattern: /^.*$/,
		normal : function(v) {
	    	vName = reverseName(getInner(v));
	    	return vName ? vName.toLowerCase() : '';
		}
	 }),
	 new TableKit.Sortable.Type('avgResponesSort', { 
			pattern: /^.*$/,
			compare : function(a,b) {
		    	aNum = parseTimeIntervalString(getInner(a));
		    	bNum = parseTimeIntervalString(getInner(b));
		    	return aNum < bNum ? -1 : aNum == bNum ? 0 : 1;
			}
	 }),
	 new TableKit.Sortable.Type('regStatus', {
			pattern : /^[Complete|Partial|Invited|Not Invited Yet|NotYet]$/,
			normal : function(v) {
				switch(v) {
					case 'Complete':
						return 0;
						break;
					case 'Partial':
						return 1;
						break;
					case 'Invited':
						return 2;
						break;
					case 'Not Invited Yet':
						return 3;
						break;
					case 'NotYet':
						return 4;
						break;
					default:
						return 5;
				}
			}
	})
);



var getInner = function(elem) {
	return elem.textContent ? elem.textContent : elem.innerText;
}

var reverseName = function(name) {
	if (!name) {
		return name
	}
	nameArr = name.split(' ');
	index = nameArr.length - 1;
	retName = '';
	while (index >= 0) {
		retName += nameArr[index];
		index -= 1;
	}
	return retName;
}

var min = 60;
var hr = min * 60;
var day = hr * 24;
var week = day * 7;

var parseTimeIntervalString = function(tiStr) {
	var timeNum = 0;
	if (tiStr && tiStr.length && tiStr != '-') {
		tiArr = tiStr.split(' ');
		while (arrElem = tiArr.shift()) {
			switch(arrElem.charAt(arrElem.length-1)) {
				case 'w':
					timeNum += week;
					break;
				case 'd':
					timeNum += day;
					break;
				case 'h':
					timeNum += hr;
					break;
				case 'm':
					timeNum += min;
					break;		
			}
		}
	}
	return timeNum;
}