////////////////////////////////////////////////////////////////////////////////
// CONTRA DANCE DESIGNER - graphical display of contra dances, version 2.3
// COPYRIGHT (C) 2001  GCH & FRR Productions
// COPYRIGHT (C) 2001  GCH & AC Productions
////////////////////////////////////////////////////////////////////////////////
// this reference includes the most current GNU GENERAL PUBLIC LICENSE
// available online at www.gnu.org
////////////////////////////////////////////////////////////////////////////////
// VERSION 2.3 ONLY SUPPORTS MS/IE4.0+ FOR WINDOWS, MS/IE5.0+ FOR APPLES
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

function process_command(cmd)
{
	trace("process_command begin = " + cmd);

	var i = 0;
	var parms = cmd.split(" ");
	var op1 = ((parms.length > 1) ? parms[1] : g_randomize_delay);

	document.MAIN.COMMAND.value = "";
	stop_all();

	switch(parms[0])
	{
	case "c":
	{
		process_command_contras(parms);
		break;
	}
	case "d":
	{
		process_command_dancers(parms);
		break;
	}
	case "h":
	{
		show_help();
		break;
	}
	case "l":
	{
		process_command("m " + g_move_lineup + " r");
		break;
	}
	case "m":
	{
		process_command_moves(parms);
		break;
	}
	case "r":
	{
		if ((op1 < 1) || (op1 > 5000))
		{
			trace("ERROR: invalid randomize delay");
			return;
		}
		g_randomize_delay = op1;
		move_randomize();
		break;
	}
	case "s":
	{
		process_command_show(parms);
		break;
	}
	case "t":
	{
		if (trace_flag == false)
		{
			trace_flag = true;
		}
		else
		{
			trace_flag = false;
			if (trace_win != null)
			{
				trace_win.close();
				trace_win = null;
			}
		}
		break;
	}
	default:
	{
		trace("ERROR: unknown command = " + cmd);
		break;
	}
	}

	trace("process_command end = " + cmd);
}

////////////////////////////////////////////////////////////////////////////////

function process_command_contras(parms)
{
	var cix = ((parms.length > 1) ? parms[1] : -1);
	var op1 = ((parms.length > 2) ? parms[2] : null);
	var op2 = ((parms.length > 3) ? parms[3] : null);

	if ((cix < 0) || (cix >= g_contra_count))
	{
		trace("ERROR: invalid contra ix");
		return;
	}

	switch(op1)
	{
	case "a":
	{
		if ((op2 < 0) || (op2 >= g_move_count))
		{
			trace("ERROR: invalid move ix");
			return;
		}
		contra_addmovebyindex(cix,op2);
		break;
	}
	case "n":
	{
		contra_addcontra(op2,"author","info1","info2");
		break;
	}
	case "u":
	{
		contra_undoadd(cix);
		break;
	}
	default:
	{
		trace("ERROR: unknown op1 = " + op1);
		break;
	}
	}
}

////////////////////////////////////////////////////////////////////////////////

function process_command_dancers(parms)
{
	var i = 0;
	var pix = ((parms.length > 1) ? parms[1] : -1);
	var op1 = ((parms.length > 2) ? parms[2] : null);
	var op2 = ((parms.length > 3) ? parms[3] : 1);

	if ((pix < 0) || (pix >= g_dancer_count))
	{
		trace("ERROR: invalid dancer ix");
		return;
	}

	switch(op1)
	{
	case "tl":
	{
		g_dancers[pix].d_goto(g_floor_x_top,g_floor_y_left);
		break;
	}
	case "tr":
	{
		g_dancers[pix].d_goto(g_floor_x_top,g_floor_y_right);
		break;
	}
	case "bl":
	{
		g_dancers[pix].d_goto(g_floor_x_bottom,g_floor_y_left);
		break;
	}
	case "br":
	{
		g_dancers[pix].d_goto(g_floor_x_bottom,g_floor_y_right);
		break;
	}
	case "1":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_moveup();
		}
		break;
	}
	case "2":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_moveupright();
		}
		break;
	}
	case "3":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_moveright();
		}
		break;
	}
	case "4":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_movedownright();
		}
		break;
	}
	case "5":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_movedown();
		}
		break;
	}
	case "6":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_movedownleft();
		}
		break;
	}
	case "7":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_moveleft();
		}
		break;
	}
	case "8":
	{
		for (i=0; i<op2; i+=1)
		{
			g_dancers[pix].d_moveupleft();
		}
		break;
	}
	default:
	{
		trace("ERROR: unknown op1 = " + op1);
		break;
	}
	}
}

////////////////////////////////////////////////////////////////////////////////

function process_command_moves(parms)
{
	var mix = ((parms.length > 1) ? parms[1] : -1);
	var op1 = ((parms.length > 2) ? parms[2] : null);
	var op2 = ((parms.length > 3) ? parms[3] : g_move_delay);

	if ((mix < 0) || (mix >= g_move_count))
	{
		trace("ERROR: invalid move ix");
		return;
	}

	switch(op1)
	{
	case "c":
	{
		g_move_continue = false;
		break;
	}
	case "d":
	{
		if ((op2 < 50) || (op2 > 3000))
		{
			g_move_delay = 500;
			trace("ERROR: invalid move delay");
			return;
		}
		g_move_delay = op2;
		break;
	}
	case "r":
	{
		move_run(mix);
		break;
	}
	default:
	{
		trace("ERROR: unknown op1 = " + op1);
		break;
	}
	}
}

////////////////////////////////////////////////////////////////////////////////

function process_command_show(parms)
{
	var i = 0;
	var op1 = ((parms.length > 1) ? parms[1] : null);
	var op2 = ((parms.length > 2) ? 0 : -1);
	var hamster_win = null;

	switch(op1)
	{
	case "a":
	{
		for (i=0; i<g_contra_count; i+=1)
		{
			contra_show(i);
		}
		for (i=0; i<g_move_count; i+=1)
		{
			move_show(i);
		}
		for (i=0; i<g_dancer_count; i+=1)
		{
			dancer_show(i);
		}
		process_showetc();
		break;
	}
	case "c":
	{
		for (i=0; i<g_contra_count; i+=1)
		{
			contra_show(i);
		}
		break;
	}
	case "d":
	{
		for (i=0; i<g_dancer_count; i+=1)
		{
			dancer_show(i);
		}
		break;
	}
	case "e":
	{
		process_showetc();
		break;
	}
	case "h":
	{
		hamster_win = window.open("","HAMSTER","width=212,height=70,left=275,top=10");
		hamster_win.document.open("text/html");
		hamster_win.document.writeln("<HTML><HEAD></HEAD>");
		hamster_win.document.writeln("<BODY bgcolor=\"#FFFFFF\">");
		hamster_win.document.writeln("<DIV ID=\"ham1\" STYLE=\"position:absolute; left:10px; top:10px; z-index:1\"><IMG SRC=\"hamster.gif\"></DIV>");
		hamster_win.document.writeln("<DIV ID=\"ham2\" STYLE=\"position:absolute; left:75px; top:10px; z-index:1\"><IMG SRC=\"hamster.gif\"></DIV>");
		hamster_win.document.writeln("<DIV ID=\"ham3\" STYLE=\"position:absolute; left:140px; top:10px; z-index:1\"><IMG SRC=\"hamster.gif\"></DIV>");
		hamster_win.document.writeln("</BODY></HTML>");
		break;
	}
	case "m":
	{
		for (i=0; i<g_move_count; i+=1)
		{
			move_show(i,op2);
		}
		break;
	}
	default:
	{
		trace("ERROR: unknown op1 = " + op1);
		break;
	}
	}
}

////////////////////////////////////////////////////////////////////////////////

function process_showetc()
{
	trace("");
	trace("show etc");
	trace("  version = 2.3");
	trace("  g_contra_beats = " + g_contra_beats);
	trace("  g_contra_count = " + g_contra_count);
	trace("  g_contra_skip = " + g_contra_skip);
	trace("  g_contra_selected = " + g_contra_selected);
	trace("  g_contra_loop = " + g_contra_loop);
	trace("  g_contra_next = " + g_contra_next);
	trace("  g_dancer_count = " + g_dancer_count);
	trace("  g_dancer_size = " + g_dancer_size);
	trace("  g_dancer_move = " + g_dancer_move);
	trace("");
	trace("  g_move_count = " + g_move_count);
	trace("  g_move_continue = " + g_move_continue);
	trace("  g_move_selected = " + g_move_selected);
	trace("  g_move_delay = " + g_move_delay);
	trace("  g_randomize_delay = " + g_randomize_delay);
	trace("  g_move_increment = " + g_move_increment);
	trace("  g_move_lineup = " + g_move_lineup);
	trace("  g_move_progression = " + g_move_progression);
	trace("  g_move_activesxo = " + g_move_activesxo);
	trace("  g_move_becketleft = " + g_move_becketleft);
	trace("  g_move_becketright = " + g_move_becketright);
	trace("");
	trace("  g_floor_width = " + g_floor_width);
	trace("  g_floor_height = " + g_floor_height);
	trace("  g_floor_square = " + g_floor_square);
	trace("  g_floor_x_top = " + g_floor_x_top);
	trace("  g_floor_x_topedge = " + g_floor_x_topedge);
	trace("  g_floor_x_middle = " + g_floor_x_middle);
	trace("  g_floor_x_bottomedge = " + g_floor_x_bottomedge);
	trace("  g_floor_x_bottom = " + g_floor_x_bottom);
	trace("  g_floor_y_left = " + g_floor_y_left);
	trace("  g_floor_y_leftedge = " + g_floor_y_leftedge);
	trace("  g_floor_y_center = " + g_floor_y_center);
	trace("  g_floor_y_rightedge = " + g_floor_y_rightedge);
	trace("  g_floor_y_right = " + g_floor_y_right);
	trace("");
	trace("  g_stepcode_wait = " + g_stepcode_wait);
	trace("  g_stepcode_exit = " + g_stepcode_exit);
	trace("  g_stepcode_moveup = " + g_stepcode_moveup);
	trace("  g_stepcode_moveupright = " + g_stepcode_moveupright);
	trace("  g_stepcode_moveright = " + g_stepcode_moveright);
	trace("  g_stepcode_movedownright = " + g_stepcode_movedownright);
	trace("  g_stepcode_movedown = " + g_stepcode_movedown);
	trace("  g_stepcode_movedownleft = " + g_stepcode_movedownleft);
	trace("  g_stepcode_moveleft = " + g_stepcode_moveleft);
	trace("  g_stepcode_moveupleft = " + g_stepcode_moveupleft);
	trace("  g_stepcode_lwstopleft = " + g_stepcode_lwstopleft);
	trace("  g_stepcode_lwstopright = " + g_stepcode_lwstopright);
	trace("  g_stepcode_lwsbottomleft = " + g_stepcode_lwsbottomleft);
	trace("  g_stepcode_lwsbottomright = " + g_stepcode_lwsbottomright);
	trace("  g_stepcode_sqltop = " + g_stepcode_sqltop);
	trace("  g_stepcode_sqlmiddle = " + g_stepcode_sqlmiddle);
	trace("  g_stepcode_sqlbottom = " + g_stepcode_sqlbottom);
	trace("  g_stepcode_dfztophalf = " + g_stepcode_dfztophalf);
	trace("  g_stepcode_dfzbottomhalf = " + g_stepcode_dfzbottomhalf);
	trace("  g_stepcode_dfzlefthalf = " + g_stepcode_dfzlefthalf);
	trace("  g_stepcode_dfzrighthalf = " + g_stepcode_dfzrighthalf);
	trace("  g_stepcode_dfztopedge = " + g_stepcode_dfztopedge);
	trace("  g_stepcode_dfzbottomedge = " + g_stepcode_dfzbottomedge);
	trace("  g_stepcode_dfzleftedge = " + g_stepcode_dfzleftedge);
	trace("  g_stepcode_dfzrightedge = " + g_stepcode_dfzrightedge);
	trace("  g_stepcode_dfzmiddle = " + g_stepcode_dfzmiddle);
	trace("  g_stepcode_lead = " + g_stepcode_lead);
	trace("  g_stepcode_follow = " + g_stepcode_follow);
	trace("  g_stepcode_active = " + g_stepcode_active);
	trace("  g_stepcode_inactive = " + g_stepcode_inactive);
	trace("  g_stepcode_in = " + g_stepcode_in);
	trace("  g_stepcode_out = " + g_stepcode_out);
}

////////////////////////////////////////////////////////////////////////////////
// CONTRA DANCE DESIGNER - graphical display of contra dances, version 2.3
// COPYRIGHT (C) 2001  GCH & FRR Productions
// COPYRIGHT (C) 2001  GCH & AC Productions
////////////////////////////////////////////////////////////////////////////////
// this reference includes the most current GNU GENERAL PUBLIC LICENSE
// available online at www.gnu.org
////////////////////////////////////////////////////////////////////////////////
// VERSION 2.3 ONLY SUPPORTS MS/IE4.0+ FOR WINDOWS, MS/IE5.0+ FOR APPLES
////////////////////////////////////////////////////////////////////////////////

