


var timeout = 0;

var setup_idle_count = 0;

function resetUpdate()	{

	if(timeout!=0)	{ clearTimeout(timeout);  timeout=0; }
		
	if(human_mode)	{

		var wait_time = 0;    // backoff wait time id idle
		
		if(setup_idle_count>300)	wait_time = 6000;
		else						wait_time = 3000;	
		
		timeout = setTimeout("getHumanUpdate();", wait_time);
	}
}

//////

function getHumanUpdate()	{

	resetUpdate();

	xmlconn.request("/bball/h2h/proxy/setup_with_human?gameID=" + gameID + (setup_state==null?"":"&setup_state=" + setup_state) + "&chat_index=" + chat_index);

	setup_idle_count++;
}

function saveToServer()	{

	var params =  getParams( getParamArray() );

	resetUpdate();


	xmlconn.request("/bball/h2h/proxy/setup_save?gameID=" + gameID + params + (setup_state==null?"":"&setup_state=" + setup_state) + "&chat_index=" + chat_index);
}

function startOver()	{

	if(!confirm("Are you sure you want to start over?")) return;

	resetUpdate();

	xmlconn.request("/bball/h2h/proxy/startover?gameID=" + gameID + "&chat_index=" + chat_index);
}

function approve(approve)	{

	resetUpdate();

	xmlconn.request("/bball/h2h/proxy/setup_approve?gameID=" + gameID + "&approve=" + approve + (setup_state==null?"":"&setup_state=" + setup_state) + "&chat_index=" + chat_index);
}


function sendInvite()	{

	var username = findObj("invite_username").value;

	xmlconn.request("/bball/h2h/proxy/send_invite?gameID=" + gameID + "&username=" + escape(username));
}




////////

function getParamArray()	{

	if(setup_state=='basics')	{
	
		return ( ["ParkID", "creator_is_home", "DH_rule", "Injury_rule", "EraID"] );
	}
	else if(setup_state=='weather')	{
	
		return ( ["tempInDegrees", "fldCond", "skyCond", "windDir", "windInMPH"] );
	}
	else if(setup_state=='teams')	{
	
		return ( ["my_teamID", "computer_teamID", "default_lineups"] );
	}
	else if(setup_state=='final_options')	{
	
		return ( ["mode", "action_timeout", "non_responsive", "guest_access"] );
	}
	else if(setup_state=='SP')	{
	
		return ( ["my_SP", "computer_SP"] );
	}

	else if(setup_state=='my_lineup')	{
	
		return ( ["mylinup_drag_order", "my_playerID_1", "my_playerID_2", "my_playerID_3", "my_playerID_4", "my_playerID_5", "my_playerID_6", "my_playerID_7", "my_playerID_8", "my_playerID_9"] );
	}

	else if(setup_state=='computer_lineup')	{
	
		return ( ["opplinup_drag_order", "comp_playerID_1", "comp_playerID_2", "comp_playerID_3", "comp_playerID_4", "comp_playerID_5", "comp_playerID_6", "comp_playerID_7", "comp_playerID_8", "comp_playerID_9"] );
	}

	return ( [] );
}



function getParams(fields)	{

	var params = "";

	for(var i=0; i<fields.length; i++)	{
	
		var param = fields[i];
	
		var input = findObj(param);
		
		if(input==null)	continue;  // field no visible
		
		var value = null;
		
		if(input.type=="hidden")	{
		
			value = input.value;
		}
		else if(input.type=="select-one")	{
		
			value = input.options[input.selectedIndex].value;
		}
		else	{
		
			for(var j=0; j<input.length; j++)	{
	
				var radio = input[j];
				
				if(radio.checked)	value = radio.value;
			}
		}
		
		if(value!=null)	{
		
			params+="&" + param + "=" + escape(value);
		}
	}
	
	return(params);
}


function disableFields()	{

	var fields = getParamArray()

	for(var i=0; i<fields.length; i++)	{
	
		var input = findObj(fields[i]);
		
		if(input==null)	continue;  // field not visible
		
		if(input.type=="hidden")	{}

		else if(input.type=="select-one")	{
		
			input.disabled = true;
		}
		else	{
		
			for(var j=0; j<input.length; j++)	{
	
				input[j].disabled = true;
			}
		}
	}
}



function setOptions(values)	{

	var fields = getParamArray()

	for(var i=0; i<fields.length; i++)	{
	
		var input = findObj(fields[i]);
		
		var value = values[fields[i]];
		
		if(input==null)	continue;  // field not visible
		
		if(input.type=="hidden")	{}

		else if(input.type=="select-one")	{
		
			for(var j=0; j<input.options.length; j++)	{
			
				if(input.options[j].value==value)	{
				
					input.selectedIndex = j;
					break;
				}
			}
		}
		else	{
		
			for(var j=0; j<input.length; j++)	{
	
				if(input[j].value==value)	input[j].checked = true;
			}
		}
	}
}





function isArray(testObject) {     
	return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}







xmlconn.setRespHandler('invite_sent', processInviteSent);

function processInviteSent(xmldoc) {

	try	{

		findObj("invite_username").value = "";
		
		findObj("invite_form").style.display = "none";
		
		findObj("invite_sent").style.display = "block";
		
	} catch(e)	{

		displayError(e);
 	}
}



			
var WAIT_IMG = "<img src=/html/bball/h2h/web/images/wait.gif width=16 height=16 valign=bottom> ";

var OPTIONS_WAIT_HTML = WAIT_IMG + "<i><b>Waiting for opponent to set options...</b></i>";
var APPROVAL_WAIT_HTML = "<img src=/html/bball/h2h/web/images/icon_checkmark.png width=16 height=15 valign=bottom> <b>Your opponent set the options above - Do you approve?</b><div style='margin-top: 8px;'><input type=button value=Approve onclick=\"approve('true');\"> <input type=button value=Reject onclick=\"approve('false');\"></div>"; 
var OPP_APPROVAL_WAIT_HTML = WAIT_IMG + "<i><b>Waiting for approval from opponent...</b></i>";


xmlconn.setRespHandler('setup_updated', processSetupUpdate);

function processSetupUpdate(xmldoc) {


	try	{

		var new_state = loadRequiredXMLParam(xmldoc, "new_state");

		var new_page = new_state!=setup_state;

		var continue_link = loadOptionalXMLParam(xmldoc, "continue_link");

		if(continue_link!='')	{
		
			window.location.href = continue_link;
			return;
		}

		//////

		var my_SP = loadOptionalXMLParam(xmldoc, "my_SP");
		
		if(my_SP!='' && new_page)	{
		
			findObj("my_SP_span").innerHTML = my_SP;
		}
		
		
		var computer_SP = loadOptionalXMLParam(xmldoc, "computer_SP");
		if(computer_SP!='')	findObj("computer_SP_span").innerHTML = computer_SP;

		//////

		var my_lineup = loadOptionalXMLParam(xmldoc, "my_lineup");
		
		if(my_lineup!='' && new_page)	{
		
			findObj("my_lineup_table").innerHTML = my_lineup;
			dragsort.makeListSortable(document.getElementById("mylinup_drag"), verticalOnly, saveOrder);
			current_drag = 'mylinup_drag';
			
			eval(loadRequiredXMLParam(xmldoc, "player_id_to_name"));
			eval(loadOptionalXMLParam(xmldoc, "injured_players"));
		}

		//////

		var computer_lineup = loadOptionalXMLParam(xmldoc, "computer_lineup");
		
		if(computer_lineup!='' && new_page)	{
		
			findObj("computer_lineup_table").innerHTML = computer_lineup;

			dragsort.makeListSortable(document.getElementById("opplinup_drag"), verticalOnly, saveOrder);

			current_drag = 'opplinup_drag';
			
			eval(loadRequiredXMLParam(xmldoc, "player_id_to_name"));
			eval(loadOptionalXMLParam(xmldoc, "injured_players"));
		}

		/////

		var challenger = loadOptionalXMLParam(xmldoc, "challenger");
		if(challenger!='')	findObj("challenger").innerHTML = challenger;
		
		var startover = loadRequiredXMLParam(xmldoc, "startover")=="true";
		if(startover)	{
		
			setTimeout("showStartOver();", 50);
		}
		
		//////// change page

		if(new_page)	{

			switchDivs(new_state);
			setup_state = new_state;
			setup_idle_count = 0;
		}
		
		
		////// approval management displays
		
		var wait_state = loadOptionalXMLParam(xmldoc, "wait_state");
		
		if(wait_state!='')	{
		
			var wait_html = "";
		
			if(wait_state=='options_wait')		wait_html = OPTIONS_WAIT_HTML;
			if(wait_state=='approval_wait')		{
			
				eval(loadRequiredXMLParam(xmldoc, "approve_fields"));
			
				setOptions(approve_fields);
			
				wait_html = APPROVAL_WAIT_HTML;
			}
			
			if(wait_state=='opp_approval_wait')	wait_html = OPP_APPROVAL_WAIT_HTML;
			
			var wait = findObj(setup_state + "_wait");
			if(wait!=null)	wait.innerHTML = wait_html;
			
			var button = findObj(setup_state + "_button");
			if(button!=null)	button.style.display = "none";
		}
		else	{
		
			var wait = findObj(setup_state + "_wait");
			if(wait!=null)	wait.innerHTML = "";

			var button = findObj(setup_state + "_button");
			
			if(button!=null)	{
			
				button.style.display = "block";
				button.disabled = false;
			}
		}
		
		var can_edit = loadRequiredXMLParam(xmldoc, "can_edit")=="true";
		if(!can_edit)	disableFields();

		var rejected = loadRequiredXMLParam(xmldoc, "rejected")=="true";
		if(rejected)	{
		
			findObj(current_div.id + "_button").disabled = false;
			setTimeout("showReject();", 50);
		}
		
		
	} catch(e)	{

		displayError(e);
 	}
}



function showReject()	{

	alert("Your opponent rejected these settings");
}

function showStartOver()	{

	alert("Your opponent has chosen to start the game setup over...");
}



xmlconn.setRespHandler('error', processError);

function processError(xmldoc) {

	try	{

		var error_msg = loadOptionalXMLParam(xmldoc, "error_msg");

		alert("Error: " + error_msg);

	} catch(e)	{

		displayError(e);
 	}
}




