#include common_scripts\utility;

main()
{
}

setup_names()
{
	if ( isdefined( level._names ) )
		return;
		
	nationalities = [];
	nationalities[ 0 ] = "american";
	nationalities[ 1 ] = "seal";
	nationalities[ 2 ] = "taskforce";
	nationalities[ 3 ] = "secretservice";
	nationalities[ 4 ] = "british";
	nationalities[ 5 ] = "arab";
	nationalities[ 6 ] = "russian";
	nationalities[ 7 ] = "multilingual";
	nationalities[ 8 ] = "portuguese";
	nationalities[ 9 ] = "shadowcompany";
	nationalities[ 10 ]= "indonesian";
	nationalities[ 11 ]= "mexican";



	for ( i = 0; i < nationalities.size; i++ )
		level._names[ nationalities[ i ] ] = [];

	// American names will ideally match 1:1 with names that we've recorded, so the friendlies will more obviously talk to each other
	add_name( "american", "Abrahamsson" );
	add_name( "american", "Alavi" );
	add_name( "american", "Alderman" );
	add_name( "american", "Arem" );
	add_name( "american", "Arya" );
	add_name( "american", "Baker" );
	add_name( "american", "Barb" );
	add_name( "american", "Bartolucci" );
	add_name( "american", "Bell" );
	add_name( "american", "Benitez" );
	add_name( "american", "Berry" );
	add_name( "american", "Blumel" );
	add_name( "american", "Boon" );
	add_name( "american", "Bowling" );
	add_name( "american", "Capen" );
	add_name( "american", "Casey" );
	add_name( "american", "Chen" );
	add_name( "american", "Cherubini" );
	add_name( "american", "Cho" );
	add_name( "american", "Cotterell" );
	add_name( "american", "Cournoyer" );
	add_name( "american", "Davis" );
	add_name( "american", "Dionne" );
	add_name( "american", "Dye" );
	add_name( "american", "Eady" );
	add_name( "american", "Emslie" );
	add_name( "american", "Ferriz" );
	add_name( "american", "Field" );
	add_name( "american", "Fukuda" );
	add_name( "american", "Gaines" );
	add_name( "american", "Ganus" );
	add_name( "american", "Giesler" );
	add_name( "american", "Gigliotti" );
	add_name( "american", "Gillis" );
	add_name( "american", "Glasco" );
	add_name( "american", "Glenn" );
	add_name( "american", "Gompert" );
	add_name( "american", "Grenier" );
	add_name( "american", "Grigsby" );
	add_name( "american", "Haggerty" );
	add_name( "american", "Hammon" );
	add_name( "american", "Harmer" );
	add_name( "american", "Harris" );
	add_name( "american", "Heath" );
	add_name( "american", "Hirsh" );
	add_name( "american", "Johnson" );
	add_name( "american", "Kar" );
	add_name( "american", "Keating" );
	add_name( "american", "Kriegler" );
	add_name( "american", "Kuhn" );
	add_name( "american", "Lai" );
	add_name( "american", "Lambert" );
	add_name( "american", "Lastimosa" );
	add_name( "american", "Lopez" );
	add_name( "american", "Lor" );
	add_name( "american", "Luo" );
	add_name( "american", "McCandlish" );
	add_name( "american", "McCord" );
	add_name( "american", "McCoy" );
	add_name( "american", "McLeod" );
	add_name( "american", "Messerly" );
	add_name( "american", "Miller" );
	add_name( "american", "Neel" );
	add_name( "american", "Onur" );
	add_name( "american", "Peas" );
	add_name( "american", "Pelayo" );
	add_name( "american", "Penrod" );
	add_name( "american", "Perez" );
	add_name( "american", "Pierce" );
	add_name( "american", "Porter" );
	add_name( "american", "Rieke" );
	add_name( "american", "Rote" );
	add_name( "american", "Roycewicz" );
	add_name( "american", "Rubin" );
	add_name( "american", "Sandler" );
	add_name( "american", "Sarkisyan" );
	add_name( "american", "Seal" );
	add_name( "american", "Shiring" );
	add_name( "american", "Silvers" );
	add_name( "american", "Slayback" );
	add_name( "american", "Smith" );
	//add_name( "american", "Song" );
	add_name( "american", "Stone" );
	add_name( "american", "Sue" );
	add_name( "american", "Taehoon" );
	add_name( "american", "Tee" );
	add_name( "american", "Theodore" );
	add_name( "american", "Turner" );
	add_name( "american", "Vinson" );
	add_name( "american", "Volker" );
	add_name( "american", "Wang" );
	add_name( "american", "Wapner" );
	add_name( "american", "Wasilczyk" );
	add_name( "american", "West" );
	add_name( "american", "Wiederhold" );
	add_name( "american", "Yang" );
	add_name( "american", "Zampella" );

	
	add_name( "seal", "Angel" );
	add_name( "seal", "Apex" );
	add_name( "seal", "Avatar" );
	add_name( "seal", "Bearcat" );
	add_name( "seal", "Bishop" );
	add_name( "seal", "Boomer" );
	add_name( "seal", "Boxer" );
	add_name( "seal", "Canine" );
	add_name( "seal", "Chemist" );
	add_name( "seal", "Chemo" );
	add_name( "seal", "Cherub" );
	add_name( "seal", "Chino" );
	add_name( "seal", "Coffin" );
	add_name( "seal", "Coma" );
	add_name( "seal", "Cyclops" );
	add_name( "seal", "Cypher" );
	add_name( "seal", "Doc" );
	add_name( "seal", "Druid" );
	add_name( "seal", "Exxon" );
	add_name( "seal", "Gator" );
	add_name( "seal", "Hannibal" );
	add_name( "seal", "Hazard" );
	add_name( "seal", "Hitman" );
	add_name( "seal", "Jayhawk" );
	add_name( "seal", "Jester" );
	add_name( "seal", "Justice" );
	add_name( "seal", "Klepto" );
	add_name( "seal", "Kojak" );
	add_name( "seal", "Langley" );
	add_name( "seal", "Neptune" );
	add_name( "seal", "Mamba" );
	add_name( "seal", "Midnight" );
	add_name( "seal", "Neon" );
	add_name( "seal", "Nomad" );
	add_name( "seal", "Ogre" );
	add_name( "seal", "Ozone" );
	add_name( "seal", "Patron" );
	add_name( "seal", "Peasant" );
	add_name( "seal", "Pharaoh" );
	add_name( "seal", "Pieces" );
	add_name( "seal", "Poet" );
	add_name( "seal", "Preacher" );
	add_name( "seal", "Reaper" );
	add_name( "seal", "Redcell" );
	add_name( "seal", "Roadie" );
	add_name( "seal", "Robot" );
	add_name( "seal", "Rocket" );
	add_name( "seal", "Rooster" );
	add_name( "seal", "Sandman" );
	add_name( "seal", "Sparrow" );
	add_name( "seal", "Taco" );
	add_name( "seal", "Thumper" );
	add_name( "seal", "Trojan" );
	add_name( "seal", "Twister" );
	add_name( "seal", "Undertone" );
	add_name( "seal", "Utah" );
	add_name( "seal", "Whiskey" );
	add_name( "seal", "Worm" );
	add_name( "seal", "Yankee" );
	add_name( "seal", "Zero" );
	
	
	// taskforce = seal, but the non-stealth version
	copy_names( "taskforce", "seal" );
	
	
	add_name( "secretservice", "Smith" );
	add_name( "secretservice", "Jones" );
	add_name( "secretservice", "Jackson" );
	add_name( "secretservice", "Johnson" );
	add_name( "secretservice", "Thompson" );
	add_name( "secretservice", "Ash" );
	add_name( "secretservice", "Bird" );
	add_name( "secretservice", "Finn" );
	add_name( "secretservice", "Fine" );
	add_name( "secretservice", "Brown" );
	add_name( "secretservice", "White" );
	add_name( "secretservice", "Gray" );
	add_name( "secretservice", "Black" );
	add_name( "secretservice", "Wylie" );
	add_name( "secretservice", "Rosenhaus" );
	add_name( "secretservice", "Boras" );
	add_name( "secretservice", "McKinnis" );
	add_name( "secretservice", "Duffy" );
	add_name( "secretservice", "Falk" );
	add_name( "secretservice", "Tellem" );
	add_name( "secretservice", "Goodwin" );
	add_name( "secretservice", "Condon" );
	add_name( "secretservice", "Parker" );
	add_name( "secretservice", "McGuire" );
	add_name( "secretservice", "Steinberg" );


	add_name( "british", "Abbot" );
	add_name( "british", "Adams" );
	add_name( "british", "Bartlett" );
	add_name( "british", "Boyd" );
	add_name( "british", "Boyle" );
	add_name( "british", "Bremner" );
	add_name( "british", "Carlyle" );
	add_name( "british", "Carver" );
	add_name( "british", "Cheek" );
	add_name( "british", "Clarke" );
	add_name( "british", "Collins" );
	add_name( "british", "Compton" );
	add_name( "british", "Connolly" );
	add_name( "british", "Cook" );
	add_name( "british", "Dowd" );
	add_name( "british", "Field" );
	add_name( "british", "Fleming" );
	add_name( "british", "Fletcher" );
	add_name( "british", "Flynn" );
	add_name( "british", "Grant" );
	add_name( "british", "Greaves" );
	add_name( "british", "Griffin" );
	add_name( "british", "Harris" );
	add_name( "british", "Harrison" );
	add_name( "british", "Heath" );
	add_name( "british", "Henderson" );
	add_name( "british", "Hopkins" );
	add_name( "british", "Hoyt" );
	add_name( "british", "Kent" );
	add_name( "british", "Lewis" );
	add_name( "british", "Lipton" );
	add_name( "british", "Macdonald" );
	add_name( "british", "Maxwell" );
	add_name( "british", "McQuarrie" );
	add_name( "british", "Miller" );
	add_name( "british", "Mitchell" );
	add_name( "british", "Moore" );
	add_name( "british", "Murphy" );
	add_name( "british", "Murray" );
	add_name( "british", "Pearce" );
	add_name( "british", "Plumber" );
	add_name( "british", "Pritchard" );
	add_name( "british", "Rankin" );
	add_name( "british", "Reed" );
	add_name( "british", "Ritchie" );
	add_name( "british", "Ross" );
	add_name( "british", "Roth" );
	add_name( "british", "Smith" );
	add_name( "british", "Stevenson" );
	add_name( "british", "Stuart" );
	add_name( "british", "Sullivan" );
	add_name( "british", "Thompson" );
	add_name( "british", "Veale" );
	add_name( "british", "Wallace" );
	add_name( "british", "Wallcroft" );
	add_name( "british", "Wells" );
	add_name( "british", "Welsh" );


	add_name( "russian", "Sasha Ivanov" );
	add_name( "russian", "Aleksei Vyshinskiy" );
	add_name( "russian", "Boris Ryzhkov" );
	add_name( "russian", "Dima Tikhonov" );
	add_name( "russian", "Oleg Kosygin" );
	add_name( "russian", "Pyotr Bulganin" );
	add_name( "russian", "Petya Malenkov" );
	add_name( "russian", "Alyosha Tarkovsky" );
	add_name( "russian", "Sergei Grombyo" );
	add_name( "russian", "Viktor Kuznetsov" );
	add_name( "russian", "Misha Podgorniy" );
	add_name( "russian", "Borya Mikoyan" );
	add_name( "russian", "Anatoly Voroshilov" );
	add_name( "russian", "Kolya Shvernik" );
	add_name( "russian", "Nikolai Kalinin" );
	add_name( "russian", "Vladimir Brezhnev" );
	add_name( "russian", "Pavel Chernenko" );
	add_name( "russian", "Volodya Andropov" );
	add_name( "russian", "Yuri Nikitin" );
	add_name( "russian", "Dmitri Petrenko" );
	add_name( "russian", "Vanya Gerasimov" );
	add_name( "russian", "Mikhail Zhuravlev" );
	add_name( "russian", "Ivan Lukin" );
	add_name( "russian", "Kostya Golubev" );
	add_name( "russian", "Konstantin Lebedev" );
	add_name( "russian", "Aleksandr Vasilev" );
	add_name( "russian", "Yakov Glushenko" );
	add_name( "russian", "Sasha Semenov" );
	add_name( "russian", "Aleksei Ulyanov" );
	add_name( "russian", "Boris Yefremov" );
	add_name( "russian", "Dima Chernyshenko" );
	add_name( "russian", "Oleg Stepanoshvili" );
	add_name( "russian", "Pyotr Demchenko" );
	add_name( "russian", "Petya Avagimov" );
	add_name( "russian", "Alyosha Murzaev" );
	add_name( "russian", "Sergei Shkuratov" );
	add_name( "russian", "Viktor Yakimenko" );
	add_name( "russian", "Misha Masijashvili" );
	add_name( "russian", "Borya Shapovalov" );
	add_name( "russian", "Anatoly Ivashenko" );
	add_name( "russian", "Kolya Dovzhenko" );
	add_name( "russian", "Nikolai Turdyev" );
	add_name( "russian", "Vladimir Sabgaida" );
	add_name( "russian", "Pavel Svirin" );
	add_name( "russian", "Volodya Sarayev" );
	add_name( "russian", "Yuri Kiselev" );
	add_name( "russian", "Dmitri Bondarenko" );
	add_name( "russian", "Vanya Chernogolov" );
	add_name( "russian", "Mikhail Voronov" );
	add_name( "russian", "Ivan Afanasyev" );
	add_name( "russian", "Kostya Gridin" );
	add_name( "russian", "Konstantin Petrov" );
	add_name( "russian", "Aleksandr Rykov" );
	add_name( "russian", "Yakov Shvedov" );


	add_name( "arab", "Abdulaziz" );
	add_name( "arab", "Abdullah" );
	add_name( "arab", "Ali" );
	add_name( "arab", "Amin" );
	add_name( "arab", "Bassam" );
	add_name( "arab", "Fahd" );
	add_name( "arab", "Faris" );
	add_name( "arab", "Fouad" );
	add_name( "arab", "Habib" );
	add_name( "arab", "Hakem" );
	add_name( "arab", "Hassan" );
	add_name( "arab", "Ibrahim" );
	add_name( "arab", "Imad" );
	add_name( "arab", "Jabbar" );
	add_name( "arab", "Kareem" );
	add_name( "arab", "Khalid" );
	add_name( "arab", "Malik" );
	add_name( "arab", "Muhammad" );
	add_name( "arab", "Nasir" );
	add_name( "arab", "Omar" );
	add_name( "arab", "Rafiq" );
	add_name( "arab", "Rami" );
	add_name( "arab", "Said" );
	add_name( "arab", "Salim" );
	add_name( "arab", "Samir" );
	add_name( "arab", "Talib" );
	add_name( "arab", "Tariq" );
	add_name( "arab", "Youssef" );
	add_name( "arab", "Ziad" );
	
	
	add_name( "portuguese", "Carlitos" );
	add_name( "portuguese", "Antonio" );
	add_name( "portuguese", "Gervasio" );
	add_name( "portuguese", "Lois" );
	add_name( "portuguese", "Xesus" );
	
	add_name( "shadowcompany", "Lestat" );
	add_name( "shadowcompany", "Nosferatu" );
	add_name( "shadowcompany", "Lecter" );

	add_name( "multilingual", "Kugelschreiber" );
	add_name( "multilingual", "Flughafen" );

	add_name( "indonesian", "Cho" );
 	add_name( "indonesian", "Fukuda" );
 	add_name( "indonesian", "Ganus" );
	add_name( "indonesian", "Lai" );
	add_name( "indonesian", "Rieke" );
	add_name( "indonesian", "Song" );
	add_name( "indonesian", "Sue" );
	add_name( "indonesian", "Taehoon" );
 	add_name( "indonesian", "Wang" );
	add_name( "indonesian", "Yang" );

	add_name( "mexican", "Pablo" );	//this is a placeholder. game will assert otherwise w/o any names assigned.
	
	init_script_friendnames();

	for ( i = 0; i < nationalities.size; i++ )
	{
		remove_script_friendnames_from_list( nationalities[ i ] );
		randomize_name_list( nationalities[ i ] );
		level._nameIndex[ nationalities[ i ] ] = 0;
	}
}

copy_names( copyTo, copyFrom )
{
	ASSERT( IsDefined( level._names[ copyFrom ] ) && level._names[ copyFrom ].size );
	
	level._names[ copyTo ] = level._names[ copyFrom ];
}

add_name( nationality, thename )
{
	level._names[ nationality ][ level._names[ nationality ].size ] = thename;
}

remove_name( nationality, thename )
{
	level._names[ nationality ] = array_remove( level._names[ nationality ], thename );
}

init_script_friendnames()
{
	script_friendnames = [];
	spawners = GetSpawnerArray();
	ais = GetAiArray();
	
	foreach( spawner in spawners )
	{
		if( IsDefined( spawner.script_friendname ) && spawner.script_friendname != "none" )
		{
			name = normalize_script_friendname( spawner.script_friendname );
			script_friendnames[ script_friendnames.size ] = name;
		}
	}
	
	foreach( ai in ais )
	{
		if( IsDefined( ai.script_friendname ) && ai.script_friendname != "none" )
		{
			name = normalize_script_friendname( ai.script_friendname );
			script_friendnames[ script_friendnames.size ] = name;
		}
	}
	
	level._script_friendnames = script_friendnames;
}

normalize_script_friendname( name )
{
	tokens = StrTok( name, " " );
	if( tokens.size > 1 )
	{
		name = tokens[ 1 ];
	}
	
	return name;
}

remove_script_friendnames_from_list( nationality )
{
	foreach( scriptedName in level._script_friendnames )
	{
		foreach( staticName in level._names[ nationality ] )
		{
			if( scriptedName == staticName )
			{
				remove_name( nationality, staticName );
			}
		}
	}
}

randomize_name_list( nationality )
{
	size = level._names[ nationality ].size;
	for ( i = 0; i < size; i++ )
	{
		switchwith = randomint( size );
		temp = level._names[ nationality ][ i ];
		level._names[ nationality ][ i ] = level._names[ nationality ][ switchwith ];
		level._names[ nationality ][ switchwith ] = temp;
	}
}

get_name( override )
{
	if ( ( isdefined( self.team ) ) && ( self.team == "neutral" ) )
	{
		return;
	}
		
	if ( !isdefined( override ) && level._script == "credits" )
	{
		self.airank = "private";
		return;
	}

	if ( isdefined( self.script_friendname ) )
	{
		if ( self.script_friendname == "none" )
			return;
		self.name = self.script_friendname;
		getRankFromName( self.name );
		self notify( "set name and rank" );
		return;
	}

	assert( isdefined( level._names ) );

	get_name_for_nationality( self.voice );

	self notify( "set name and rank" );
}

get_name_for_nationality( nationality )
{
	assertex( isdefined( level._nameIndex[ nationality ] ), nationality );

	level._nameIndex[ nationality ] = ( level._nameIndex[ nationality ] + 1 ) % level._names[ nationality ].size;
	lastname = level._names[ nationality ][ level._nameIndex[ nationality ] ];
	
	rank = randomint( 10 );
	
	if( nationality == "seal" || nationality == "taskforce" )
	{
		fullname = lastname;  // TF141 soldiers just get a callsign
		self.airank = "private";
	}
	else if( nationality == "secretservice" )
	{
		fullname = "Agent " + lastname;  // Secret Service guys are all "Agents"
		self.airank = "private";
	}
	else if ( rank > 5 )
	{
		fullname = "Pvt. " + lastname;
		self.airank = "private";
	}
	else if ( rank > 2 )
	{
		fullname = "Cpl. " + lastname;
		self.airank = "private";
	}
	else
	{
		fullname = "Sgt. " + lastname;
		self.airank = "sergeant";
	}

	if ( ( isAi( self ) ) && ( self isBadGuy() ) )
	{
		self.ainame = fullname;
	}
	else
	{
		self.name = fullname;
	}
}

getRankFromName( name )
{
	if ( !isdefined( name ) )
		self.airank = ( "private" );

	tokens = strtok( name, " " );
	assert( tokens.size );
	shortRank = tokens[ 0 ];

	switch( shortRank )
	{
	case "Pvt.":
		self.airank = "private";
		break;
	case "Pfc.":
		self.airank = "private";
		break;
	case "Agent":
		self.airank = "private";
		break;
	case "Cpl.":
		self.airank = "corporal";
		break;
	case "Sgt.":
		self.airank = "sergeant";
		break;
	case "Lt.":
		self.airank = "lieutenant";
		break;
	case "Cpt.":
		self.airank = "captain";
		break;
	default:
		// SRS 02/01/09: this is more annoying than useful now that we have lots of friendlies
		//  whose names are callsigns. we may want to ditch rank references altogether in the scripts.
		//println( "sentient has invalid rank " + shortRank + "!" );
		self.airank = "private";
		break;
	}
}
