// ソート情報設定 
function sortTable(sortCell, sortType) {
	var objTable = document.getElementById('sortTable');
	var intRowCnt = objTable.rows.length;
	var arrData = new Array(intRowCnt);
	
	for( var i=0; i<intRowCnt; i++ ){
		arrData[i] = parseInt((objTable.rows[i].cells[sortCell].firstChild.nodeValue)*100);
	}
	quickSort(arrData, 0, (intRowCnt-1), sortType);
	
	var tableRows = objTable.getElementsByTagName("tr");	
	for( var j = 0; j < tableRows.length; j++ ){
		if( j%2 == 0 ) {
			tableRows[j].className = "stripe";
		} else {			
			tableRows[j].className = "";	
		}
		objTable.rows[j].cells[0].firstChild.nodeValue = j+1;
	}
	
	var tableTh = objTable.getElementsByTagName("th");
	for( var k = 0; k < tableTh.length; k++ ) {		
		if( k == 0 ) {
			tableTh[k].className = "first";
		} else if( k == 1 ) {
			tableTh[k].className = "second";
		} else if( k == 2 ) {
			tableTh[k].className = "third";
		} else {
			tableTh[k].className = "";
		}	
	}
}

// クイックソート（再帰的）
function quickSort(arrData, intStart, intEnd, sortType){
	if( intStart == intEnd ) return;
	
	var strPivot;
	if( sortType == 0 ){
		strPivot = pivotDesc(arrData, intStart, intEnd);
	} else {
		strPivot = pivotAsc(arrData, intStart, intEnd);
	}
    
	if( strPivot != -1 ){
		var intPartition;
		if( sortType == 0 ){
			intPartition = partitionDesc(arrData, intStart, intEnd, arrData[strPivot]);
		} else {
			intPartition = partitionAsc(arrData, intStart, intEnd, arrData[strPivot]);
		}

		quickSort(arrData, intStart, intPartition-1, sortType);
		quickSort(arrData, intPartition, intEnd, sortType);
	}
}

// 軸要素の選択 (昇順)  
function pivotAsc(arrData,intStart, intEnd){
	var intNext = intStart+1;
    
	// 全部同じ要素の場合は -1 を返す
	while( intNext <= intEnd && arrData[intStart] == arrData[intNext]) intNext++;
	if( intNext > intEnd ) return -1;
	if( arrData[intStart] > arrData[intNext] ) return intStart;
	return intNext;
}

// パーティション分割 (昇順)  
function partitionAsc(arrData, intStart, intEnd, intPartition){
	var intPointSt = intStart;
	var intPointEnd = intEnd;

	while( intPointSt <= intPointEnd ){
		while( intPointSt <= intEnd && arrData[intPointSt] < intPartition ) intPointSt++;
		while( intPointEnd >= intStart && arrData[intPointEnd] >= intPartition ) intPointEnd--;

		if( intPointSt > intPointEnd ) break;
		var t = arrData[intPointSt];
		arrData[intPointSt] = arrData[intPointEnd];
		arrData[intPointEnd] = t;
	      
		var objTable = document.getElementById('sortTable');
		objTable.insertBefore(objTable.rows[intPointSt],objTable.rows[intPointEnd]);
		objTable.insertBefore(objTable.rows[intPointEnd],objTable.rows[intPointSt]);
	      
		intPointSt++;
		intPointEnd--;
	}
	return intPointSt;
}

// 軸要素の選択 (降順)  
function pivotDesc( arrData, intStart, intEnd ){
	var intNext = intStart+1;
    
	while( intNext <= intEnd && arrData[intStart] == arrData[intNext] ) intNext++;
	if( intNext > intEnd ) return -1;
    
	if( arrData[intStart] > arrData[intNext] ) return intNext;
	return intStart;
}

// パーティション分割 (降順)  
function partitionDesc( arrData, intStart, intEnd, intPartition ){
	var intPointSt = intStart;
	var intPointEnd = intEnd;

	while( intPointSt <= intPointEnd ){
		while( intPointSt <= intEnd && arrData[intPointSt] > intPartition ) intPointSt++;
		while( intPointEnd >= intStart && arrData[intPointEnd] <= intPartition ) intPointEnd--;

		if( intPointSt > intPointEnd ) break;
	      
		var t = arrData[intPointSt];
		arrData[intPointSt] = arrData[intPointEnd];
		arrData[intPointEnd] = t;
	      
		var objTable = document.getElementById('sortTable');
		objTable.insertBefore(objTable.rows[intPointSt],objTable.rows[intPointEnd]);
		objTable.insertBefore(objTable.rows[intPointEnd],objTable.rows[intPointSt]);
	      
		intPointSt++;
		intPointEnd--;
	}
	return intPointSt;
}