// File to put jQuery extended functions written by us
// hxwiki:systems:web_development_systems:common_javascript
jQuery.extend( jQuery.fn, { // PC added 29/10/07, sort elements on the page
	sort: function ( selector, dir, mode ) {
		var nSort = function ( a, b ) { return dir == 'desc' ? a.k - b.k : b.k - a.k }; /* numeric */
		var aSort = function( a, b ) { /* rough, bad alpha sort */
			a = a.k.toLowerCase();
			b = b.k.toLowerCase();
			if ( a == b ) return 0;
			if ( a < b ) return dir == 'desc' ? 1 : -1;
			return dir == 'desc' ? -1 : 1;
		};
		var sortFunction;
		switch ( mode ) {
			case 'alpha': sortFunction = aSort; break;
			default: sortFunction = nSort;
		}
		var list = [];
		var p = $(this).parent().eq(0); /* get first parent, for reattaching all the divs */
		$(this).each( function () {
			list[list.length] = { k: $(selector, this).text(), o: $(this) }; /* make an object, k is sort key and o is object */
			$(this).remove();
		} );
		for (	var o in list.sort( sortFunction )) {
			$(p).append( list[o].o );
		}
		return this;
	}
} );
$( function() {  
	$('.sortHandle').click( function () {
		$(this).removeClass('bothArrows');
		$('.downArrow').addClass('bothArrows');
		$('.upArrow').addClass('bothArrows');
		$('.downArrow').removeClass('downArrow');
		$('.upArrow').removeClass('upArrow');
		
		var p = $(this).attr( 'rel' ).split(','); /* rel should be comma separated list of params, something like .list,.price,desc,alpha */
		p[0] = p[0] ? $.trim( p[0] ) : '';
		p[1] = p[1] ? $.trim( p[1] ) : '';
		p[2] = p[2] ? $.trim( p[2] ) : '';
		p[3] = p[3] ? $.trim( p[3] ) : '';
		$( p[0] ).sort( p[1], p[2], p[3] );
		if (p[1] == '.distance') {
			$(this).attr( 'rel', p[0] + ',' + p[1] + ', desc' + ( p[3] ? ',' + p[3] : '' ));
		}
		else {
			$(this).attr( 'rel', p[0] + ',' + p[1] + ',' + ( p[2] != 'desc' ? 'desc' : '' ) + ( p[3] ? ',' + p[3] : '' ));
		}
		if (p[2] == "desc") {
			$(this).addClass('upArrow');
			$(this).removeClass('downArrow');
		}
		else {
			$(this).removeClass('upArrow');
			$(this).addClass('downArrow');
		}
		return false;
	} );
} );

