//
// Multi-Column Sorting  - Written by Scott Johnson
//                                    Muthu Soundararajan
//
// This code was generated by Streamline DB
// History
//   + 10/18/01 - ported to stdb -sj
//   + 7/29/01 -removed case sensitivity sorting -sj
//   + 7/20/01 -Added MultiColumn Sorting to Query/ParameterQuery -sj
//   + 7/9/01 -Fixed the column ordering -sj
//   + 5/6/01 -Redesigned column selection visualization -sj
//   + 3/1/01 -Original code generator (created buttons) - sj/ms
//
// For more information, visit: www.streamlinetech.net
//

	var numberID=0;
	var order_depth = 0;
	var sjBGColor = new Array('D1D1D1');

	var column_order = new Array('');

	var date_format = new String('MM/DD/YYYY HH:NN:SSAM');
	var month_pos = date_format.indexOf('MM');
	var day_pos = date_format.indexOf('DD');
	var year_pos = date_format.indexOf('YYYY');

	var hour_pos = date_format.indexOf('HH');
	var min_pos = date_format.indexOf('NN');
	var sec_pos = date_format.indexOf('SS');
	var ampm_pos = date_format.indexOf('AM');

	function col_obj(col_type, col_length, col_max_val, col_precision)
	{
		this.type = col_type;
		this.length = col_length;
		this.max_val = col_max_val;
		this.precision = col_precision;
	}

	var stdb_mcs_sortID_c1 = new col_obj('c',48,0,'0');

	var column_objects = new Array(stdb_mcs_sortID_c1);


	function lpad(in_text, length, fill_char, leading_char)
	{
		var tmp_text = new String(in_text);
		var i = 0;
		var out_text = '';
		var len = 0;

		len = tmp_text.length;
		out_text = leading_char;

		for (i=0; i<(length - len); i++)
		{
			out_text += fill_char;
		}

		out_text += in_text;
		return(out_text);
	}

	function rpad(in_text, length, fill_char)
	{
		var i = 0;
		var tmp_text = new String(in_text);
		var out_text = '';
		var len = 0;

		len = tmp_text.length;
		out_text = tmp_text;

		for (i=0; i<(length - len); i++)
		{
			out_text += fill_char;
		}

		return(out_text);
	}

	function real_pad(in_text, length, precision,leading_char)
	{
		var tmp_text = new String(in_text);
		var len = 0;
		var spot = 0;
		var m = 0;
		var d = 0;
		var v = '';
		var rv = '';

		d = parseFloat(tmp_text);
		d *= parseFloat(precision);
		d *= parseInt(rpad('1', m, '0'));

		v = String(d);
		rv = lpad(v, length, '0', leading_char);

		return(rv);
	}

	function get_date(in_date)
	{
		var tmp_date = new String(in_date);
		var date_string = '';
		var month
		var day
		var year
		var hour
		var min
		var sec
		var ampm
		
		//MM - Month
		//YYYY - Year
		//DD - Date
		//HH - Hour
		//NN - Min
		//SS - Sec
		//AM - AM
		//PM - PM

		month = tmp_date.substr(month_pos,2);
		day = tmp_date.substr(day_pos,2);
		year = tmp_date.substr(year_pos,4);
		hour = tmp_date.substr(hour_pos,2);
		min = tmp_date.substr(min_pos,2);
		sec = tmp_date.substr(sec_pos,2);

		//alert('Hour: ' + hour);

		ampm = new String(tmp_date.substr(ampm_pos,2));
		hourN = parseInt(hour);

		if (ampm.toUpperCase() == 'PM')
		{
			hourN += 12;
		}

		hour_str = new String(hourN);
		hour_str = lpad(hour_str,2,'0','0');

		//alert('Date: ' + tmp_date);
		date_string = year + month + day + hour_str +
			min + sec;

		return(date_string);

	}

	function build_key(row_id)
	{
		var tmp_key = '';
		var cid = 0;
		var rid = 0;
		var i = 0;
		var t = '';
		var int_val = 0;
		var rv = '';

		rid = row_id;
		       
		for (i=0; i < order_depth; i++)
		{
			cid = column_order[i];

			t = String(document.all.item('oTable').rows(rid).cells(cid).innerText);

			switch (column_objects[cid].type)
			{
			           
			case 'i':  // integer/long/byte/autonumber
				if (t == '')
				{
					t = '-' + column_objects[cid].max_val;
				}
				//Lpad with zeros for the length specified
				int_val = parseInt(t);

				if (int_val < 0)
				{
					tmp_t = t.substr(1,t.length-1);
					tmp_t = parseFloat(column_objects[cid].max_val) - parseFloat(tmp_t);
					rv = lpad(tmp_t, column_objects[cid].length, '0', '0');
				}
				else
				{
					rv = lpad(t, column_objects[cid].length, '0', '1');
				}
				break;

			case 'd':  // date

				if (t != '')
				{
					the_date = get_date(t);
				}
				else
				{
					the_date = '-' + column_objects[cid].max_val;
				}
				rv = lpad(the_date, 21, '0', '0');
				break;
					                   
			case 'c':  // char
			           
				if (t == '')
				{
					t = ' ';
				}
				rv = rpad(t, column_objects[cid].length, ' ', ' ');
				break;

			case 'r':  // real

				if (t == '')
				{
					t = '-' + column_objects[cid].max_val;
				}
				real_val = parseFloat(t);
				if (real_val < 0)
				{
					tmp_t = t.substr(1,t.length-1);
					tmp_t = parseFloat(column_objects[cid].max_val) - parseFloat(tmp_t);
					rv = real_pad(tmp_t, column_objects[cid].length, column_objects[cid].precision, '0');
				}
				else
				{
					rv = real_pad(t, column_objects[cid].length, column_objects[cid].precision, '1');
				}
				break; 
			} //End of switch

			tmp_key += rv;

		}//End of for loop

		return(tmp_key);
	}

	function sortTable(sortOrder)
	{
		var iColumnCount;
		var iRowCount;
		var c1,d1,c2;
		var iRow;
		var iCol;
		var t;
		var nrow;
		var c=0;
		var indx=0;

		iColumnCount = document.all.item('oTable').rows(3).cells.length;
		iRowCount = document.all.item('oTable').rows.length;

		//alert('Col Count: ' + iColumnCount);
		//alert('Row Count: ' + iRowCount);

		if (order_depth == 0)
		{
			alert('Please Choose Column Order for Sorting');
			return('');
		}

		iRowCount = iRowCount-3;

		if(sortOrder=='A')
		{
			for(iRow = iRowCount;iRow>2;iRow--)
			{
				d1 = c1 = build_key(iRow);
				//alert(d1);
				indx=0;
				for(j=3;j<=iRow;j++)
				{
					c2 = build_key(j);
					if(c2<c1)
					{
						c1=c2;
						indx=j;
					}
				}
				if(d1!=c1)
				{
					for(iCol=0;iCol<iColumnCount;iCol++)
					{
						t=document.all.item('oTable').rows(iRow).cells(iCol).innerHTML;
						document.all.item('oTable').rows(iRow).cells(iCol).innerHTML=document.all.item("oTable").rows(indx).cells(iCol).innerHTML;
						document.all.item('oTable').rows(indx).cells(iCol).innerHTML=t;
					}
				}
			}
			//alert('Aft For: ' + iRow);
		}
		else
		{
			for(iRow = iRowCount;iRow>2;iRow--)
			{
				d1 = c1 = build_key(iRow);
				indx=0;
				for(j=3;j<=iRow;j++)
				{
					c2 = build_key(j);
					if(c2>c1)
					{
						c1=c2;
						indx=j;
					}
				}
				if(d1!=c1)
				{
					for(iCol=0;iCol<iColumnCount;iCol++)
					{
						t=document.all.item('oTable').rows(iRow).cells(iCol).innerHTML;
						document.all.item('oTable').rows(iRow).cells(iCol).innerHTML=document.all.item("oTable").rows(indx).cells(iCol).innerHTML;
						document.all.item('oTable').rows(indx).cells(iCol).innerHTML=t;
					}
				}
			}
		}
		
	}

	function onClickColumnSelector(nColID)
	{
		var t;


		switch(nColID)
		{
		case 1:
			t = document.form1.stdb_mcs_sortID_c1.value;
			break;
		}

		if(t=='0')
		{
			// global number of column selected

			numberID++;

			switch(nColID)
			{
			case 1:
				document.all.__c1__.style.backgroundColor=sjBGColor[numberID-1];
				document.form1.stdb_mcs_sortID_c1.value=numberID;
				column_order[numberID-1] = nColID-1;
				order_depth++;
				break;
			}
		}
		else
		{
			msg = 'To change the selection order, press the Clear Button';
			alert(msg);
		}
	}

	function onClickClear()
	{
		var i;

		numberID=0;

		document.form1.stdb_mcs_sortID_c1.value='0';
		document.all.__c1__.style.backgroundColor="eeeeee";

		for(i=0; i<1; i++)
		{
			column_order[i] = '';
		}

		order_depth=0;
	}

