I'm having a really hard time figuring this one out. I'm trying to get this below script to show more than 12 people in the dialog box. I suppose the script would have to temp remove one of the people on the list and put a "MORE" or "NEXT" button in there that when clicked would take me to a sub menu with the rest of the detected AV's.
The script as it is works flawlessly but I'm really having problems figuring out how to do this and I'm hoping one of you can help me out. I've searched through the forums and found a few leads on how this is accomplished but I really don't quite understand how to implement this into the script.
Anyhow here is the script, any help on this will be greatly appreciated

string app = "tba ";
string ver = "1.0b"; // b is for beta!
string cred= "tba";
integer DEBUG_FLAG = TRUE; // let's keep some debugging on for the time being.
DEBUG(list foo) { if(DEBUG_FLAG) llOwnerSay(llList2CSV(foo)) ; }
float GI_RANGE = 300.0; // 96.0 is the range cap as of now but let's account for the future

integer GI_SELECT_AV_HANDLE;
integer GI_SELECT_AV_CHANNEL = -636;
list GL_AV_NAME = [];
list GL_AV_KEY = [];
integer fn_check_owner(key id)
{
if ( id != llGetOwner() )
{
return FALSE;
}
else
{
return TRUE;
}
}
integer isNameOnList( string name )
{
integer len = llGetListLength( GL_AV_NAME );
integer i;
for( i = 0; i < len; i++ )
{
if( llList2String(GL_AV_NAME, i) == name )
{
return TRUE;
}
}
return FALSE;
}
fn_easyDialog( key id, string message, list buttons, integer channel )
{
GI_SELECT_AV_HANDLE = llListen(channel, "", id, ""
;llDialog( id, message, fn_validateLength(buttons), channel);
}
list fn_validateLength( list foo)
{
integer li_return_length = 12;
if( llGetListLength(foo) > li_return_length)
{
return llDeleteSubList( foo, 12, -1);
}
return foo;
}
default
{
state_entry() {
}
listen(integer channel, string name, key id, string message) {
llListenRemove(GI_SELECT_AV_HANDLE);
if(id == llGetOwner()) {
if(channel == GI_SELECT_AV_CHANNEL){
integer index_av = llListFindList( GL_AV_NAME, [message] );
if (index_av != -1) {
key av_key = llList2Key( GL_AV_KEY, index_av);
DEBUG(["av key is", av_key]);
}
else {
DEBUG(["Oops! Key not found. Strange..."]);
}
}
}
}
on_rez(integer num) {
llOwnerSay( "Welcome to: " + app + ver + " by " + cred + "." );
llResetScript();
}
sensor(integer num_detected) {
integer i;
list d;
GL_AV_NAME = [];
GL_AV_KEY = [];
for (i = 0; i< num_detected; i++) {
if( isNameOnList( llDetectedName(i) ) == FALSE )
{
GL_AV_NAME += [ llDetectedName(i)] ;
GL_AV_KEY += [ llDetectedKey(i) ] ;
}
}
fn_easyDialog( llGetOwner(), "Pick an AV:", fn_validateLength(d), GI_SELECT_AV_CHANNEL);
}
no_sensor() {
GL_AV_NAME = [];
GL_AV_KEY = [];
llOwnerSay( "No av's within range, exiting." );
}
touch_start(integer num) {
if( fn_check_owner(llDetectedKey(0) ) ) {
llSensor( "", NULL_KEY, AGENT, GI_RANGE, TWO_PI );
}
}
}