// CERT members Script
// Nicola Zordan, 10:56 3/21/2007

// Data Definition
// NAZExcelTimeSheet Script
// Nicola Zordan, March 14 2001

//NAZ Calendar Data to Excel SpreadSheet for Expenses

// CERT members descriptor

//var CERTmembersTXTfile='CERT members.txt';
var CERTmembersTXTfile='data/CERT members.txt';

var indexZone=0;
var indexTeamLeaderIx=1;
var indexIsActive=2;

var indexLastName=3;
var indexFirstName=4;
var indexAddress=5;
var indexCity=6;
var indexState=7;
var indexZip=8;
var indexNeighborhood=9;
var indexPhoneHome=10;
var indexPhoneWork=11;
var indexPhoneCell=12;
var indexPhonePager=13;
var indexPhoneFax=14;
var indexEMail=15;
 // var indexEmergecy=13; // no
var indexRadioOp=16;
 //var indexTeamLeader=0;
var indexGraduationDate=17;
var indexCalss=18;
 // var indexDateOfBirth=18; // no
 // var indexContactName1=19;
 // var indexContactPhone1=20;
 // var indexContactState1=21
 // var indexContactName2=22;
 // var indexContactPhone2=23;
 // var indexContactState2=24;
var indexId=19;
 // var indexNeighboroodBis=26; // no
var indexCertRadio=20;
var indexSpecialSkills=21;
//-var indexTeamLeaderIx=1;

var indexType=22;

var indexMeetingPlace=23;
var indexMeetingPlaceNote=24;
var indexDisasterPlanDate=25;
var indexZoneFRS=26;
var indexZoneURL=27;
var indexZoneNote=28;
//var indexCERTnote=29;
//var indexZoneBoundaries=30;
var indexZoneColor=30;
var indexZoneType=31;
var indexZoneBoundaries=32;

var CERTzonesTXTfile='data/CERT zones.txt';

//Zones Data
/* old
var indexMeetingPlace=22;
var indexMeetingPlaceNote=23;
var indexDisasterPlanDate=24;
var indexZoneFRS=25;
var indexZoneURL=26;
var indexZoneNote=27;
//var indexCERTnote=28;
//var indexZoneBoundaries=29;
var indexZoneBoundaries=28;
var indexType=29;
*/
var indexZoneZ=0;
var indexIsActiveZ=1;
var indexMeetingPlaceZ=2;
var indexMeetingPlaceNoteZ=3;
var indexDisasterPlanDateZ=4;
var indexZoneFRSZ=5;
var indexZoneURLZ=6;
var indexZoneNoteZ=7;
//var indexCERTnoteZ=8;
//var indexZoneBoundariesZ=9;
var indexZoneColorZ=8;
var indexZoneTypeZ=9;
var indexZoneBoundariesZ=10;


//var index=;
//-var indexZone=indexTeamLeader;
//var indexZone=indexTeamLeader;
//var indexIsTeamLeader=indexCertRadio;
//var indexIsMeetingPlace=indexCertRadio;

var indexIsTeamLeader=indexTeamLeaderIx;
var indexIsMeetingPlace=indexMeetingPlace;


//indexSpecialSkills=indexRadioOp;
//indexMeetingPlaceNote=indexFirstName;

var NewMember=[
'Zone',
'TeamLeader',
'IsActive',
'LastName',
'FirstName',
'Address',
'City',
'State',
'Zip',
'Neighborhood',
'PhoneHome',
'PhoneWork',
'PhoneCell',
'PhonePager',
'PhoneFax',
'EMail',
'RadioOp',
'GraduationDate',
'Calss',
'Id',
'CertRadio',
'SpecialSkills',
'Type'
];

var NewZone=[
'Zone',
'IsActive',
'MeetingPlace',
'MeetingPlaceNote',
'DisasterPlanDate',
'ZoneFRS',
'ZoneURL',
'ZoneNote',
'ZoneBoundaries',
'Color',
'Type'
];



/* PRE data format
//var CERTmembersTXTfile='CERT members.txt';
var CERTmembersTXTfile='data/CERT members.txt';

var indexLastName=0;
var indexFirstName=1;
var indexAddress=2;
var indexCity=3;
var indexState=4;
var indexZip=5;
var indexNeighborhood=6;
var indexPhoneHome=7;
var indexPhoneWork=8;
var indexPhoneCell=9;
var indexPhonePager=10;
var indexPhoneFax=11;
var indexEMail=12;
var indexEmergecy=13;
var indexRadioOp=14;
var indexTeamLeader=15;
var indexGraduationDate=16;
var indexCalss=17;
var indexDateOfBirth=18;
var indexContactName1=19;
var indexContactPhone1=20;
var indexContactState1=21
var indexContactName2=22;
var indexContactPhone2=23;
var indexContactState2=24;
var indexId=25;
var indexNeighboroodBis=26;
var indexCertRadio=27;
var indexSpecialSkills=28;
var indexTeamLeaderIx=29;
var indexMeetingPlace=30;
var indexMeetingPlaceNote=31;
var indexDisasterPlanDate=32;
var indexIsActive=33;
//var index=;
var indexZone=indexTeamLeader;
//var indexIsTeamLeader=indexCertRadio;
//var indexIsMeetingPlace=indexCertRadio;
var indexIsTeamLeader=indexTeamLeaderIx;
var indexIsMeetingPlace=indexMeetingPlace;
var indexIsActive=indexZone;

//indexSpecialSkills=indexRadioOp;
//indexMeetingPlaceNote=indexFirstName;

// /PRE data format
 */

//

var ZoneName='';
var ZoneMembers=[];
var ZoneEMails=[];
var ZoneTeamLeadersIx=[];
var ZoneMeetingPlaces=[];
var CERTnote='';
var ZoneNote='';
var ZoneURLs='';
var ZoneFRS='';
var ZoneMembersInactive=[];
var ZoneBoundariesArray=[];
var ZoneDisasterPlanDate='';
var ZoneColor=null;
var ZoneType=null;

function ShowZones0() {
	var txt='';
        txt=ReadCERTmembersTXT(CERTmembersTXTfile);
        var members=[]
        members=CERTmembers4txt(txt);
        CERTmembers=members;
	var zones=[];
        zones=MembersZones(members);
        CERTzones=zones;
	var htmlZones='';
        htmlZones=ZonesListHTML(zones);
        document.all.ZonesList.innerHTML=htmlZones;
};


//var CERTmembersTXTfile='CERT members.txt';
function ReadCERTmembersTXT(fileIn) {
  var file=fileIn;
  if (file==null) file=CERTmembersTXTfile;
  var txt=TEXTload(file);
//alert(txt);
  // remove Excel inserted "
  //-var txtFixed=txt.replace(/\t"/g,'\t');
  //-var txtFixed=txtFixed.replace(/"\t/g,'\t');
  var txtFixed=txt.replace(/\"/g,'');
  //return txt;
  return txtFixed;
};

function ReadCERTzonesTXT(fileIn) {
  var file=fileIn;
  if (file==null) file=CERTzonesTXTfile;
  var txt=TEXTload(file);
//alert(txt);
  // remove Excel inserted "
  //-var txtFixed=txt.replace(/\t"/g,'\t');
  //-var txtFixed=txtFixed.replace(/"\t/g,'\t');
  var txtFixed=txt.replace(/\"/g,'');
  //return txt;
  return txtFixed;
};

function CERTzones4txt(txt, loadInactive) {
  var zones=[];
  var zonesInactive=[];
  var zone=[];
  var line=''
  var zone0='';
  var lines=txt.split('\n');
  var pctP=-1;
  for (var i=1;i<lines.length;i++) {
    pctP=showPercent('Read Zones',i,lines.length, pctP);
    line=lines[i].replace(/\r/g,'');
    zone=line.split('\t');

    if (zone!=null && zone.length<1) zone=null;
    if (zone!=null && zone.length<2) zone[1]='';
    if (zone==null) {
      //alert(line);
      continue; // Do not add invalid data
    };
/*
if (!confirm(i+'. ['+zone[0]+']\n'+
     //zone[indexZoneColorZ]+'\n'+
     //zone[indexZoneTypeZ]+'\n'+
     '{'+zone[indexZoneBoundariesZ]+'}')) break;
*/
//if (i>43 && !confirm(i+'. ['+zone+']')) break;
    if (zone[indexIsActiveZ]==null || 
        trimBlanks(zone[indexIsActiveZ])=='' || 
        trimBlanks(zone[indexIsActiveZ].toUpperCase())=='NO' ||
        trimBlanks(zone[indexIsActiveZ].toUpperCase())=='INACTIVE' ||
        trimBlanks(zone[indexIsActiveZ].toUpperCase())=='DECEASED'
      )  {
      if (trimBlanks(zone[indexIsActiveZ].toUpperCase())=='NO' ||
          trimBlanks(zone[indexIsActiveZ].toUpperCase())=='INACTIVE' ||
          trimBlanks(zone[indexIsActiveZ].toUpperCase())=='DECEASED' ) {
        zonesInactive[zonesInactive.length]=zone;
      };
      //continue; // Do not add inactive members
//if (confirm('inactive: ['+member[indexIsActive]+'] '+loadInactive+'\n'+member)) return members;
      if (loadInactive==null)
        continue; // Do not add inactive members
    };
    zones[zones.length]=zone;
    if (zone0!=zone[indexZoneZ]) {
      zone0=zone[indexZoneZ];
      //window.status=i+'. '+member[indexZone];
    };
  };
  CERTzonesData=zones;
  return zones;
};

var CERTzonesData=[];
var CERTmembersData=[];

var CERTzones=[];
var CERTmembers=[];
var CERTmembersInactive=[];
var CERTteamLeadersIx=[];
function membersData4txt(txt, loadInactive,membersIn,noLoginCheck) {
  var members=membersIn;
  if (members==null) members=[];
  var membersInactive=[];
  var member=[];
  var line=''
  var zone0='';
  var certNote='';
  var lines=txt.split('\n');
  //alert(lines.length);
  var pctP=-1;
  for (var i=1;i<lines.length;i++) {
  //for (var i=0;i<lines.length;i++) {
    pctP=showPercent('Read Members',i,lines.length, pctP);
    //member=lines[i].split('\t');
    line=lines[i].replace(/\r/g,'');
    member=line.split('\t');
    member=fixMember(member,loadInactive);
    if (noLoginCheck==null) member=loggedInMember(member);
//if (member==null) alert(line);
    if (member==null) {
      //alert(line);
      continue; // Do not add invalid data
    };
//if (member[indexIsActive].toUpperCase()!='ACTIVE') 
//  if(!confirm('['+member[indexIsActive]+']')) return;

    if (member[indexIsActive]==null || 
        trimBlanks(member[indexIsActive])=='' || 
        trimBlanks(member[indexIsActive].toUpperCase())=='NO' ||
        trimBlanks(member[indexIsActive].toUpperCase())=='INACTIVE' ||
        trimBlanks(member[indexIsActive].toUpperCase())=='DECEASED'
      )  {
      if (trimBlanks(member[indexIsActive].toUpperCase())=='NO' ||
          trimBlanks(member[indexIsActive].toUpperCase())=='INACTIVE'  ||
          trimBlanks(member[indexIsActive].toUpperCase())=='DECEASED' ) {
        membersInactive[membersInactive.length]=member;
      };
      //continue; // Do not add inactive members
//if (confirm('inactive: ['+member[indexIsActive]+'] '+loadInactive+'\n'+member)) return members;
      if (loadInactive==null)
        continue; // Do not add inactive members
    };
/*    
    if (member[indexCERTnote]!=null && member[indexCERTnote]!='') {
      //certNote=certNote+' '+member[indexCERTnote];
      if (certNote!='') certNote=certNote+'\n';
      certNote=certNote+''+member[indexCERTnote];
    };
*/
    if (member[indexZone]=='' && member[indexFirstName]=='' && member[indexLastName]=='') {
      //certNote=certNote+' '+member[indexCERTnote];
      if (certNote!='') certNote=certNote+'\n';
      certNote=certNote+''+member[indexZoneNote];
//alert(certNote);
    };
    members[members.length]=member;
    if (zone0!=member[indexZone]) {
      zone0=member[indexZone];
      //window.status=i+'. '+member[indexZone];
    };
  };
  //alert(members.length);
  //window.status=members.length+' CERT members, Data file read';
  window.status=members.length+' Data file read';
  //window.status='';
  //alert(members.length+'\n'+lines.length);
//alert(members.length);

  // SET GLOBAL

  //members=SortMembersByZone(members,loadInactive);

  // no var result=[members,teamLeaders,membersInactive,certNote];
  var result=[members,membersInactive,certNote];
  return result;
};

function CERTmembers4txt(txt, loadInactive,membersIn,noSetCERT) {
/*
  var members=membersIn;
  if (members==null) members=[];
  var membersInactive=[];
  var member=[];
  var line=''
  var zone0='';
  var certNote='';
  var lines=txt.split('\n');
  //alert(lines.length);
  var pctP=-1;
  for (var i=1;i<lines.length;i++) {
  //for (var i=0;i<lines.length;i++) {
    pctP=showPercent('Read Members',i,lines.length, pctP);
    //member=lines[i].split('\t');
    line=lines[i].replace(/\r/g,'');
    member=line.split('\t');
    member=fixMember(member,loadInactive);
    member=loggedInMember(member);
//if (member==null) alert(line);
    if (member==null) {
      //alert(line);
      continue; // Do not add invalid data
    };
//if (member[indexIsActive].toUpperCase()!='ACTIVE') 
//  if(!confirm('['+member[indexIsActive]+']')) return;

    if (member[indexIsActive]==null || 
        trimBlanks(member[indexIsActive])=='' || 
        trimBlanks(member[indexIsActive].toUpperCase())=='NO' ||
        trimBlanks(member[indexIsActive].toUpperCase())=='INACTIVE' ||
        trimBlanks(member[indexIsActive].toUpperCase())=='DECEASED'
      )  {
      if (trimBlanks(member[indexIsActive].toUpperCase())=='NO' ||
          trimBlanks(member[indexIsActive].toUpperCase())=='INACTIVE' ||
          trimBlanks(member[indexIsActive].toUpperCase())=='DECEASED' ) {
        membersInactive[membersInactive.length]=member;
      };
      //continue; // Do not add inactive members
//if (confirm('inactive: ['+member[indexIsActive]+'] '+loadInactive+'\n'+member)) return members;
      if (loadInactive==null)
        continue; // Do not add inactive members
    };
    if (member[indexZone]=='' && member[indexFirstName]=='' && member[indexLastName]=='') {
      //certNote=certNote+' '+member[indexCERTnote];
      if (certNote!='') certNote=certNote+'\n';
      certNote=certNote+''+member[indexZoneNote];
//alert(certNote);
    };
    members[members.length]=member;
    if (zone0!=member[indexZone]) {
      zone0=member[indexZone];
      //window.status=i+'. '+member[indexZone];
    };
  };
  //alert(members.length);
  //window.status=members.length+' CERT members, Data file read';
  window.status=members.length+' Data file read';
  //window.status='';
  //alert(members.length+'\n'+lines.length);
//alert(members.length);
*/

  // SET GLOBAL

  var membersData=membersData4txt(txt, loadInactive,membersIn);
  //[members,membersInactive,certNote];
  var members=membersData[0];
  var membersInactive=membersData[1];
  var certNote=membersData[2];

  members=SortMembersByZone(members,loadInactive);

   // 
//alert(members.length);
   CERTmembers=members;
   CERTteamLeadersIx=TeamLeadersIx(members);
  //alert(membersInactive.length+'\n'+membersInactive[0]);
  membersInactive=SortMembersByZone(membersInactive);
   CERTmembersInactive=membersInactive;
//alert('Inactive:'+membersInactive.length);
   CERTnote=certNote;
  //alert(members.length);
  return members;
};


function MembersTrimZone(membersIn) {
  var members=membersIn;
  for (var i=0;i<membersIn.length;i++) {
    //members[i][indexZone]=trimBlanks(members[i][indexZone]);
    members[i][indexZone]=trimBlanks(members[i][indexZone]).toUpperCase();
    window.status=i+'. '+members[i][indexZone];
  };

  CERTmembersData=members;
  return members;
};

function fixMember0 (memberIn) {
  var member=memberIn;
  //if (member[indexZone]==null || member[indexZone]=='') return null;
  if (member[indexZone]==null || member[indexIsActive]==null || (member[indexZone]=='' && member[indexIsActive]=='')) return null;
  member[indexZone]=trimBlanks(member[indexZone]).toUpperCase();
  member[indexFirstName]=noSpecialCharacters(member[indexFirstName]);
  member[indexLastName]=noSpecialCharacters(member[indexLastName]);
  member[indexEMail]=noSpecialCharacters(member[indexEMail]);
  return member;
};

// Members Types: Member, InactiveMember, Zone, Site, Other
var MemberTypes= ['Member', 'Radio','TeamLeader', 'InactiveMember', 'Zone', 'MeetingPlace', 'Site', 'Other'];
//var MemberTypesPushpin= ['Member.gif', 'Radio.gif', 'TeamLeader.gif', 'marker-InactiveMember.gif', 'Zone.gif', 'MeetingPlace.gif', 'Site.gif', 'Other.gif'];
var MemberTypesPushpin= ['marker-Member.png', 'marker-Radio.png', 'marker-TeamLeader.png', 'marker-InactiveMember.png', 'marker-Zone.png', 'marker-MeetingPlace.png', 'marker-Site.png', 'marker-Other.png'];
var typeMemberIx=0, typeRadioIx=1, typeTeamLeaderIx=2, typeInactiveMemberIx=3, typeZoneIx=4, typeMeetingPlaceIx=5, typeSiteIx=6, typeOther=7;
function fixMember (memberIn,loadInactive) {
  var member=memberIn;
  //if (member[indexZone]==null || member[indexZone]=='') return null;
  if (loadInactive==null && (member[indexZone]==null || member[indexIsActive]==null || (member[indexZone]=='' && member[indexIsActive]==''))) return null;
  member[indexZone]=trimBlanks(member[indexZone]).toUpperCase();
  member[indexFirstName]=noSpecialCharacters(member[indexFirstName]);
  member[indexLastName]=noSpecialCharacters(member[indexLastName]);
  member[indexEMail]=noSpecialCharacters(member[indexEMail]);

  member[indexType]=memberType(member);

  member[indexIsActive]=noSpecialCharacters(member[indexIsActive]);

  return member;
};

function pushpinType0(type) {
  var pushpin=null;
  for (var i=0;i<MemberTypes.lenght;i++) {
    if (type==MemberTypes[i]) {
      pushpin=MemberTypesPushpin[i];
      break;
    };
  };
  //-if (pushpin==null && type!=null && type!='') pushpin='marker-'+type+'.gif';
  //if (pushpin==null && type!=null && type!='') pushpin='marker-'+type+'.png';
  if (pushpin==null && type!=null && type!='') pushpin=type+'.png';
  return pushpin;
};

function pushpinType(type) {
  var pushpin=null;
  //if (pushpin==null && type!=null && type!='') pushpin='marker-'+type+'.png';
  if (pushpin==null && type!=null && type!='') pushpin=type+'.png';
  return pushpin;
};


function memberType(member) {
  // Type
  var type=''
  type=member[indexType];
//if (member[indexLastName]=='Zordan']) {
//  alert(member[indexLastName]+'\n'+type);
//};
  if (type==null || type=='') {
    type=MemberTypes[typeMemberIx];
    //if (Member) type=MemberTypes[typeMemberIx];
    // Zone
    if (member[indexLastName]=='') type=MemberTypes[typeZoneIx];
    if (member[indexLastName]=='' && member[indexMeetingPlace]!=null && member[indexMeetingPlace]!='') type=MemberTypes[typeMeetingPlaceIx];
    // Site
    if (member[indexZone]=='') type=MemberTypes[typeSiteIx];
    // Radio
    if (member[indexCertRadio]>' ' || member[indexRadioOp]>' ') type=MemberTypes[typeRadioIx];
    // Team Leader
//alert(member[indexTeamLeaderIx]+'\n'+member[indexLastName])
    if (member[indexTeamLeaderIx]>' ') type=MemberTypes[typeTeamLeaderIx];
    // Inactive
    if (member[indexIsActive]!=null && member[indexIsActive]!='' && 
        (member[indexIsActive].toUpperCase()=='INACTIVE' || 
         member[indexIsActive].toUpperCase()=='NO' ||
         member[indexIsActive].toUpperCase()=='DECEASED' )
       ) type=MemberTypes[typeInactiveMemberIx];
    //if (Other) type=MemberTypes[typeOtherIx];
    //window.status=type;

    //member[indexType]=type;
  };
  return type;
};


//-var LoggedIn;
function loggedInMember(memberIn) {
  var member=memberIn;
  //if (member==null) alert(member);
  if (member!=null && LoggedIn==null) {
    if (member[indexIsTeamLeader]=='' && member[indexLastName]!='') { 
      member[indexLastName]='not';
      member[indexFirstName]='logged in';
      member[indexEMail]='';
      member[indexPhoneHome]='';
      member[indexPhoneCell]='';
    };
    // not logged in
    member[indexPhoneWork]='';
    member[indexSpecialSkills]='';
    member[indexRadioOp]='';
    member[indexId]='';
    //member[indexHomePhone]='';
    //member[indexHomePhone]='';
    //member[indexEMail]='';
  };
  return member;
}; 


function trimBlanks(s) {
  if (s==null) return '';
  //var r=s.split(/\s/).join(' '); 
  var r=s.replace(/^\s+|\s+$/g,"");
  //alert('['+s+']\n['+r+']');
  return r;
};

function TeamLeadersMembers () {
  var ms=[];
  for (var i=0;i<CERTteamLeadersIx.length;i++) {
    ms[ms.length]=CERTmembers[CERTteamLeadersIx[i]];
  };
  return ms;  
};


function EMailTeamLeaders (txt) {
  window.open(EMailTeamLeadersURL(txt));
};

function EMailTeamLeadersURL (txt) {
  getCERTteamLeadersEmail(true);

//alert(CERTteamLeadersEmail);

  var url='';
  if (CERTteamLeadersEmail.length<1) return html;
  url=url+'mailto:?bcc=';
  for (var i=0;i<CERTteamLeadersEmail.length;i++) {
    //url=url+', '+CERTteamLeadersEmail[i];
    url=url+CERTteamLeadersEmail[i]+'; ';
  };
  url=url+'&subject='+EMailSubject;
  if (txt!=null) {
    url=url+txt;
  };
  //alert(url);
  //window.open(url);
  return url;
};
function TeamLeadersEMailsHTML (txt) {
  getCERTteamLeadersEmail(true);

alert(CERTteamLeadersEmail);

  var html='';
  if (CERTteamLeadersEmail.length<1) return html;
  html=html+'<a href="';
  html=html+'mailto:?bcc=';
  for (var i=0;i<CERTteamLeadersEmail.length;i++) {
    //html=html+', '+CERTteamLeadersEmail[i];
    html=html+CERTteamLeadersEmail[i]+'; ';
  };
  html=html+'&subject='+EMailSubject;
  html=html+'">'+txt+'</a>';
  alert(html);
  return html;
};
function ShowTeamLeadersEMailWindow () {
  getCERTteamLeadersEmail(true);

  var html='';
  //html=html+'';
  //html=html+'<html>';
  //html=html+'<head>';
  //html=html+'<title>';
  //html=html+'CERT members email';
  //html=html+'</title>';
  //html=html+'</head>';
  //html=html+'<body>';
  html=html+'<center>';
  html=html+'<table><tr><td align="left">';
  for (var i=0;i<CERTteamLeadersEmail.length;i++) {
    html=html+'<a href="mailto:'+CERTteamLeadersEmail[i]+'">'+CERTteamLeadersEmail[i]+'</a>';
    html=html+'<br/>';
  };
  html=html+'</td></tr></table>';
  html=html+'</center>';
  //html=html+'</body>';
  //html=html+'</html>';

  //var w=window.open();
  //w.document.body.innerHTML=html;
  ShowWindow(html,'CERT Team Leaders eMails ');

};

function ShowWindow(html,title) {
  var w=window.open();
  w.document.title=title;
  w.document.body.innerHTML=html;
};



var CERTteamLeadersEmail=[];
function getCERTteamLeadersEmail(noAlert) {
  var member,email;
  var txt='', noEmail='';
  //alert(CERTteamLeadersIx);
  CERTteamLeadersEmail=[];
  for (var i=0;i<CERTteamLeadersIx.length;i++) {
    member=CERTmembers[CERTteamLeadersIx[i]];
    email=member[indexEMail];
    if (email!=null && email!='') {  
      CERTteamLeadersEmail[CERTteamLeadersEmail.length]=email;
      txt=txt+'\n'+email+'\t'+'['+member[indexZone]+']'+'\t'+member[indexFirstName]+' '+member[indexLastName];
     } else {
      //var noEMailText='NO EMAIL for Zone: '+'['+member[indexZone]+']'+' Team Leader: '+member[indexFirstName]+' '+member[indexLastName];
      var noEMailText='NO EMAIL for Team Leader: '+member[indexFirstName]+' '+member[indexLastName]+', Zone: '+'['+member[indexZone]+']';
      noEmail=noEmail+'\n'+noEMailText;
      window.status=noEMailText;
    };
  };
  if (noEmail!='' && noAlert==null) {
    //alert('No Email Team Leaders:\n'+noEmail);
    alert(noEmail);
  };
  //alert(txt)
  //alert(CERTteamLeadersEmail);
  return CERTteamLeadersEmail;
};

/*
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

//add functionality to String
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

*/

function noSpecialCharacters(s) {
  var r='';
  if (s==null) return r;
  r=s;
  r=r.replace(/"/g,'~');
  r=r.replace(/'/g,'~');
  return r;
};

function Zones4Members(members) {
  var zones=[];
  var zone='';
  for (var i=0;i<members.length;i++) {
    if (zone!=members[i][indexZone] && members[i][indexZone]!=null && members[i][indexZone]!=='') {
      zone=members[i][indexZone];
      zones[zones.length]=zone;
    };
  };
//alert(zones);
  return zones;  
};


function Members4Zone(members,zone) {
  var zoneMembers=[];
  if (zone==null) return members;
//alert(zone);
  for (var i=0;i<members.length;i++) {
//if (!confirm(members[i][indexZone])) return zoneMembers;
    if (zone==members[i][indexZone]) {
      zoneMembers[zoneMembers.length]=members[i];
    };
  };
  return zoneMembers;
};


function SortMembersByZone(members) {
  var sortedMembers=[];
  var sortArrayIndex=[];
  if (members==null) return members;
//alert(members);
  var name;
  for (var i=0;i<members.length;i++) {
//if (isUndefined(members[i][indexZone])) alert(member[i]);
    name=members[i][indexZone]+' - '+members[i][indexLastName]+' '+members[i][indexFirstName];
    sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
  };
  sortArrayIndex.sort();
  sortedMembers=OrderArrayFromSortedIndex(members,sortArrayIndex);
  return sortedMembers;
};


function SortMembers0(members) {
  var sortedMembers=[];
  var sortArrayIndex=[];
  var name;
  for (var i=0;i<members.length;i++) {
    name=members[i][indexLastName]+' '+members[i][indexFirstName];
    sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
  };
  sortArrayIndex.sort();
  sortedMembers=OrderArrayFromSortedIndex(members,sortArrayIndex);
  return sortedMembers;
};

function SortMembers(members) {
  var sortedMembers=[];
  var sortArrayIndex=[];
  var name;
  for (var i=0;i<members.length;i++) {
    name=members[i][indexLastName]+' '+members[i][indexFirstName]+' '+members[i][indexZone];
    sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
  };
  sortArrayIndex.sort();
  sortedMembers=OrderArrayFromSortedIndex(members,sortArrayIndex);
  return sortedMembers;
};


function SortTeamLeadersIx(leadersArray,members) {
//alert(leadersArray+'\n\n'+members);
  var sortedMembers=[];
  var sortArrayIndex=[];
  var name;
  for (var i=0;i<leadersArray.length;i++) {
  //for (var i=0;i<members.length;i++) {
    //name=''+members[i];
    name=members[leadersArray[i]][indexIsTeamLeader];
//alert(name);
    sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
  };
  sortArrayIndex.sort();
  //sortedMembers=OrderArrayFromSortedIndex(members,sortArrayIndex);
  //-sortedMembers=OrderArrayFromSortedIndex(members,sortArrayIndex);
  sortedMembers=OrderArrayFromSortedIndex(leadersArray,sortArrayIndex);
//alert(leadersArray+'\n\n'+sortArrayIndex+'\n\n'+sortedMembers);
  return sortedMembers;
};


var SortArrayAlphaSeparator='@#';
//function CompareArrayWithIndexElement(a,b) {
//  return a[0]>b[0];
//};

function OrderArrayFromSortedIndex(a,aix) {
  var sa=[];
  var ae, aeix;
  for (var i=0;i<aix.length;i++) {
    ae=aix[i];
    aeix=ae.split(SortArrayAlphaSeparator)[1];
    sa[sa.length]=a[aeix];
  };
  return sa;
};

function OrderArrayColumn (array,column,columns) {
  var sortedArray=[];
  var sortArrayIndex=[];
  var name='';
  for (var i=0;i<array.length;i++) {
    name='';
    if (column!=null) name=array[i][column];
    if (columns!=null) {
      for (var j=0;j<columns.length;j++) {
        name+=' '+array[i][columns[j]];
      };
    };
//alert(name);
    sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
  };
  sortArrayIndex.sort();
  sortedArray=OrderArrayFromSortedIndex(array,sortArrayIndex);
  return sortedArray;
};


function TeamLeadersIx(members) {
  //var teamLeaders=[];
  var teamLeadersIx=[];
//alert('tl');
  for (var i=0;i<members.length;i++) {
    if (members[i][indexIsTeamLeader]!='' && members[i][indexIsTeamLeader]!=null) {
      // identify team leaders by CERT radio
      teamLeadersIx[teamLeadersIx.length]=i;
      //teamLeaders[teamLeaders.length]=members[i];
//alert(teamLeadersIx[teamLeadersIx.length]);
    };
  };
  //return teamLeaders;
  return teamLeadersIx;
};

function MeetingPlaces(members) {
  var teamMeetingPlaces=[];
  //var teamMeetingPlacesIx=[];
  for (var i=0;i<members.length;i++) {
    if (members[i][indexIsMeetingPlace]!='' && members[i][indexIsMeetingPlace]!=null) {
      // identify team leaders by CERT radio
      //teamMeetingPlaces[teamMeetingPlaces.length]=members[i];
      //teamMeetingPlacesIx[teamMeetingPlacesIx.length]=i;
      // Use team leader address
      //teamMeetingPlaces[teamMeetingPlaces.length]=members[i][indexAddress]+', '+members[i][indexCity]+', '+members[i][indexState]+' '+members[i][indexZip];
      teamMeetingPlaces[teamMeetingPlaces.length]=[
        members[i][indexMeetingPlace],
        //members[i][indexAddress]+', '+members[i][indexCity]+', '+members[i][indexState]+' '+members[i][indexZip],
        members[i][indexMeetingPlaceNote],
      ];
    };
  };
  return teamMeetingPlaces;
  //return teamMeetingPlacesIx;
};


function MembersMeetingPlaces2XML (members) {
  var mp=MeetingPlaces(members);
  var li=members,length;
  return MeetingPlaces2XML (mp,li);
};

function MeetingPlaces2XML (mp,li) {
  //var mp=MeetingPlaces(members);
  //var locIndex=members.length;
  var locIndex=li;
  var membersMeetingPlaces=[];
  var xml='';
  var mn;
  var type=MemberTypes[typeMeetingPlaceIx];
  var pushpin=pushpinType(type);
//alert(members+'\n\n'+mp.length);
  for (var i=0;i<mp.length;i++) {
    //xml=xml+Member2XML(locIndex,'Meeting Place '+(i+1),'',mp[i],'');
    //mn='Meeting Place '+(i+1);
    mn='Meeting Place';
    if (i==0) { 
      //mn=mn+' (primary)'
      if (mp.length>1) mn=mn+', main'
     } else {
      mn=mn+' '+(i+1);
    };
    //xml=xml+Member2XML(locIndex,mn,mp[i][1],mp[i][0],'');
    xml=xml+Member2XML(locIndex,mn,mp[i][1],mp[i][0],'',pushpin);
    locIndex++;
  };  
  return xml;
};



function MembersEMail4Zone(members,zone) {
  var zoneMembers=Members4Zone(members,zone);
  var emails=[], em;
  for (var i=0;i<zoneMembers.length;i++) {
      em=zoneMembers[i][indexEMail];
      //alert(em);
      if (em==null || em=='') continue;
      emails[emails.length]=em;
  };
  return emails;
};


function MembersNamesText(members) {
  var txt='';
  for (var i=0;i<members.length;i++) {
    txt=txt+members[i][indexLastName]+' '+members[i][indexFirstName]+'\n';
  };
  return txt;
};

var ZonesPageMapsListTitle;
var ZonesOfMembers=[];
function ZonesListHTML(zones) {
  var html='';
  //html=html+'<h2 align="center">Members Zones</h2>';
  html=html+'<h2 align="center">'+ZonesPageMapsListTitle+'</h2>';
  //html=html+'<ol>';
  html=html+'<ul>';
  //html=html+zones.length+' Zones <br/>';
  //html=html+zones.length+' Zones <small><small>('+CERTmembers.length+') members </small></small> <br/>';
  //html=html+zones.length+' Zones ~ '+CERTmembers.length+' members <br/>';
  //html=html+zones.length+' Zones ~ '+(CERTmembers.length-zones.length)+' members <br/>';
  html=html+zones.length+' Zones ~ '+CERTmembers.length+' records <br/>';
  //html=html+CERTzones.length+' Zones ~ '+CERTmembers.length+' records ~ '+CERTpoi.length+' poi<br/>';
  for (var i=0;i<zones.length;i++) {
    html=html+'<li>';
    //html=html+'<a href="MapLocationSelectTxt.htm?Zone='+zones[i]+'">';
    //html=html+'<a href="JavaScript:alert(MembersNamesText(Members4Zone(CERTmembers,\''+zones[i]+'\')));alert(ZoneMembers2XMLtext("'+zones[i]+'",CERTmembers))">';
    //html=html+'<a href="JavaScript:alert(MembersNamesText(Members4Zone(CERTmembers,\''+zones[i]+'\')));">';
    //html=html+'<a href="JavaScript:alert(ZoneMembers2XMLtext(\''+zones[i]+'\',CERTmembers));">';
    html=html+'<a href="JavaScript:ShowZoneMap(\''+zones[i]+'\');">';
    html=html+zones[i];
    html=html+'</a>';

    html=html+' ';
    html=html+'<a href="JavaScript:ShowDisasterPlan(\''+zones[i]+'\');">';
    //-html=html+'<small>(dp)</small>';
    html=html+'</a>';

    html=html+'</li>';
  };
  //html=html+'</ol>';
  html=html+'</ul>';
//alert(html);
  return html;
};


function GetDisasterPlanDate (members) {
  var disasterPlanDate='';
  for (var i=0;i<members.length;i++) {
    if (members[i][indexDisasterPlanDate]!=null && members[i][indexDisasterPlanDate]!='') {
      disasterPlanDate=members[i][indexDisasterPlanDate];
      break;
    };
  };
  return disasterPlanDate;
};

var ZonesPageTitle;
var ZonesDescriptionText;
var ZoneRadioTitle;
var TripXMLdocument;
function Members2XMLtext(members,zone,meetingPlaces) {
  var xml='';
  var disasterPlanDate=GetDisasterPlanDate(members);

  xml=xml+'<?xml version="1.0" encoding="UTF-8"?>'+'\n';
  xml=xml+'<!-- <?xml-stylesheet type="text/xsl" href="Trip2Locations.xsl" ?> -->'+'\n';
  xml=xml+'<!-- <?xml-stylesheet type="text/xsl" href="Trip2Connections.xsl" ?> -->'+'\n';
  xml=xml+'<!-- <?xml-stylesheet type="text/xsl" href="Trip2Trip.xsl" ?>  -->'+'\n';
  xml=xml+'<!-- Author: Nicola Zordan 2/8/2007 11:11 Nicola@Zordan.net -->'+'\n';
  //xml=xml+'<Trip Name="CERT Boca Raton - '+zone+'" >'+'\n';
  //xml=xml+'<Trip Name="CERT Boca Raton - '+zone+' ';
  xml=xml+'<Trip Name="'+ZonePageTitle+' - '+zone+' ';
  if (disasterPlanDate!=null && disasterPlanDate!='')
    xml=xml+' ('+disasterPlanDate+') ';
  xml=xml+'" >'+'\n';
  //xml=xml+'   <Description>CERT Community Emergency Response Team</Description>'+'\n';
  xml=xml+'   <Description><![CDATA[';
  //xml=xml+'CERT Community Emergency Response Team';
  xml=xml+ZonesDescriptionText;
  var note=CERTnote.replace(/\n/g,'<br/>');
  var zoneNote=ZoneNote.replace(/\n/g,'<br/>');
  var zoneFRS=ZoneFRS.replace(/\n/g,'<br/>');;
  var zoneURLs=ZoneURLs;
  if (note!==null && note!='') {
    xml=xml+'<br/>';
    xml=xml+note;
  };
  if (zoneNote!=null && zoneNote!='') {
    //xml=xml+'<br/><br/>';
    xml=xml+'<br/>';
    xml=xml+zoneNote;
  };
  if (zoneFRS!=null && zoneFRS!='') {
    xml=xml+'<br/>';
    xml=xml+'FRS Radio channel: '+zoneFRS;
  };
  if (zoneURLs!=null && zoneURLs.length>0) {
    xml=xml+'<br/>';
    //xml=xml+'Zone specific web: ';
    xml=xml+'Zone web: ';
    for (var j=0;j<zoneURLs.length;j++) {
      if (zoneURLs.length>1) xml=xml+'<br/>';
      xml=xml+'<a href="'+zoneURLs[j]+'" target="_blank">'+zoneURLs[j]+'</a>';
    };
  };
  xml=xml+']]></Description>'+'\n';
//alert(xml);
  //xml=xml+'   <DetailsURL>http://www.ci.boca-raton.fl.us/Fire/cert.shtm</DetailsURL>'+'\n';
  xml=xml+'   <DetailsURL>'+ZonesPageMainURL+'</DetailsURL>'+'\n';
  xml=xml+'   <ImageURL></ImageURL>'+'\n';
  xml=xml+'   <Locations>'+'\n';

  var memberName,pushpin;
  for (var i=0;i<members.length;i++) {
/*
    // skip non name members
    if (members[i][indexFirstName]=='' && members[i][indexLastName]=='') {
alert(members[i]);
      continue;
    };
*/
    var desc='';
    var tel='';
    //desc+='\n';

    //if (members[i][indexPhoneCell]!=null && members[i][indexPhoneCell]!='') 
    //  desc+=''+'Cell: '+members[i][indexPhoneCell]+'<br>';

    //desc+=members[i][indexZone];
    //desc+='<span onClick="alert(\''+members[i][indexType]+'\')">'+members[i][indexZone]+'</span>';
   if (members[i][indexId]!=null && members[i][indexId]!='')
    desc+=' ['+members[i][indexId]+'] ';
    //type-desc+=' ('+members[i][indexType]+')';
    if (members[i][indexIsTeamLeader]!=null && members[i][indexIsTeamLeader]!='')
      desc+=' Team Leader ('+members[i][indexIsTeamLeader]+')';

    if (members[i][indexSpecialSkills]!=null && members[i][indexSpecialSkills]!='') {
      if (desc>'') desc+='<br/>';
      desc+='Skills: '+members[i][indexSpecialSkills];
    };
//alert(i+'. skill: ['+members[i][indexSpecialSkills]+']')
    if (members[i][indexCertRadio]!=null && members[i][indexCertRadio]!='') {
      if (desc>'') desc+='<br/>';
      desc+=ZoneRadioTitle+': '+members[i][indexCertRadio];
      //desc+=' <br/>'+'CERT Radio: '+members[i][indexCertRadio];
    };
    if (members[i][indexRadioOp]!=null && members[i][indexRadioOp]!='') {
      if (desc>'') desc+='<br/>';
      desc+='HamRadio: '+members[i][indexRadioOp];
    };
    if (members[i][indexEMail]!=null && members[i][indexEMail]!='') {
      if (desc>'') desc+='<br/>';
      desc+='<a href=\'mailto:'+members[i][indexEMail]+'\'>'+members[i][indexEMail]+'</a>';
      //desc+='<br/>'+'<a href="mailto:'+members[i][indexEMail]+'">'+members[i][indexEMail]+'</a>';
      //xml=xml+'<br/\>'+'\<a href="mailto:'+members[i][indexEMail]+'"\>'+members[i][indexEMail]+'\</a\>';
      //desc+=' '+members[i][indexEMail];
    }
    //desc+='\n';
//alert(members[i][indexLastName]+' '+members[i][indexFirstName]+'\n'+desc);
    //xml=xml+Member2XML(i, members[i][indexLastName]+' '+members[i][indexFirstName], desc, members[i][indexAddress]+', '+members[i][indexCity]+', '+members[i][indexState]+' '+members[i][indexZip], members[i][indexPhoneHome]+', '+members[i][indexPhoneCell] );
    //var type=members[i][indexType];
     //desc+='<br/><i>'+members[i][indexType]+'</i>';
   if (members[i][indexPhoneHome]!=null && members[i][indexPhoneHome]!='')
    tel+=members[i][indexPhoneHome];
   if (members[i][indexPhoneCell]!=null && members[i][indexPhoneCell]!='') {
     if (tel>'') tel+=', ';
     tel+=members[i][indexPhoneCell];
   }
    pushpin=pushpinType(members[i][indexType]);
    xml=xml+Member2XML(i, members[i][indexLastName]+' '+members[i][indexFirstName], desc, members[i][indexAddress]+', '+members[i][indexCity]+', '+members[i][indexState]+' '+members[i][indexZip], tel,pushpin );
    //-memberName=members[i][indexLastName]+' '+members[i][indexFirstName];
    //--memberName=members[i][indexLastName]+' '+members[i][indexFirstName]+' '+'<a href="javascript:VolunteerHour('+i+')"><font face="webdings" style="text-decoration:none">Św</font></a>';
    //-xml=xml+Member2XML(i, memberName, desc, members[i][indexAddress]+', '+members[i][indexCity]+', '+members[i][indexState]+' '+members[i][indexZip], members[i][indexPhoneHome]+', '+members[i][indexPhoneCell] );
  };

  //xml=xml+MeetingPlaces2XML(members);
  if (meetingPlaces!=null) {
//alert(meetingPlaces);
    xml=xml+MeetingPlaces2XML(meetingPlaces,members.length);
  };

  xml=xml+'   </Locations>'+'\n';
  xml=xml+'</Trip>'+'\n';

//  xml=xml+'

//alert(xml);
  return xml;
};



function Member2XML (i,name,desc,address,tel,pushpinImage) {
//alert(name+'\n'+desc+'\n'+address+'\n'+tel);
//alert('['+desc+']\n'+'['+tel+']');
  var xml='';
    xml=xml+'<Location';
    xml=xml+' index="'+(i+1)+'"';
    xml=xml+' Name="'+name+'"';
    if (pushpinImage!=null && pushpinImage!='') {
      xml+=' pushpinImage="'+pushpinImage+'"';
    };
    xml=xml+'>';
    xml=xml+' <Description>';
    xml=xml+HTML4xml(desc);
    xml=xml+'</Description>';
    xml=xml+' <Address>'+address+'</Address>';
    xml=xml+'<Tel>'+tel+'</Tel>';
    xml=xml+'</Location>'+'\n';
//alert(xml);
  return xml;
};


function HTML4xml(html) {
  //var xml='<![CDATA['+'\n'+html+'\n'+']]>';
  var xml='<![CDATA['+html+']]>';
  //alert(xml);
  return xml;
};


function ZoneMembers2XMLtext(zone,membersIn,meetingPlaces) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  var zoneMembers=Members4Zone(members,zone);
  var xml=Members2XMLtext(zoneMembers,zone,meetingPlaces);
  return xml;
};


/*
function String2XML (xmlText) {
  var xmlObj=new ActiveXObject('Microsoft.XMLDOM');
  xmlObj.async=false;
  xmlObj.loadXML(xmlText);
  return xmlObj;
};
*/

var ZoneEmails=[];
//var ZoneMapPage='MapLocationsCERT.htm?OpenerTripXML()';
//var ZoneMapPage='MapLocationsZoneTxt.htm';
var ZoneMapPage='MapLocationsZone.htm';
function ShowZoneMap(zone,membersIn) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  var zoneMembers=Members4Zone(members,zone);
  //alert(zoneMembers.length);
  //-zoneMembers=SortMembers(zoneMembers);

  ZoneEmails=MembersEMail4Zone(zoneMembers,zone);
  ZoneBoundariesArray=GetZoneBoundaries(zoneMembers,zone);
  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xml=Members2XML4text(xmlTxt);
//alert(xmlTxt);
//showInWindow(xmlTxt);
//showInWindowHTML(xmlTxt);
//showInWindowXML(xmlTxt);
  //var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  //TripXMLdocument=xml;
  //
  ZoneName=zone;

  //ZoneMembers=zoneMembers;
  ZoneMembers=MembersDataOnly(zoneMembers);

  ZoneDisasterPlanDate=GetDisasterPlanDate(zoneMembers);
  ZoneTeamLeadersIx=TeamLeadersIx(ZoneMembers);
  ZoneTeamLeadersIx=SortTeamLeadersIx(ZoneTeamLeadersIx,ZoneMembers);
  //ZoneMeetingPlaces=MeetingPlaces(ZoneMembers);
  ZoneMeetingPlaces=MeetingPlaces(zoneMembers);
  //ZoneNote=GetZoneNote(ZoneMembers);
  ZoneNote=GetZoneNote(zoneMembers);
  ZoneFRS=GetZoneFRS(zoneMembers);
  //ZoneURLs=GetZoneURLs(ZoneMembers);
  ZoneURLs=GetZoneURLs(zoneMembers);
  ZoneMembersInactive=Members4Zone(CERTmembersInactive,zone);

  ZoneColor=GetZoneColor4members(zoneMembers);
  ZoneType=GetZoneType(zoneMembers);

//  var zoneMembers2Map=Members2Map(ZoneMembers,ZoneMeetingPlaces);
//  var zoneMembers2Map=zoneMembers;
//  ZoneMembers=zoneMembers2Map;
//alert(zoneMembers2Map);

  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xmlTxt=Members2XMLtext(zoneMembers2Map,zone);
//alert(ZoneMeetingPlaces);
  var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);


  var xml=String2XML(xmlTxt);
//alert('text\n'+xmlTxt);
//alert('xml\n'+xml.text);
//showInWindow(xmlTxt);
//showInWindow(xml.xml);
  TripXMLdocument=xml;


  ZonePageFlag=true;
  //
  //alert(TripXMLdocument.xml);
  window.open(ZoneMapPage);
};



function ShowZoneMapAll(membersIn) {
  var zone='all';
  var members=membersIn;
  if (members==null) members=CERTmembers;
  var zoneMembers=members;
  //zoneMembers=SortMembers(zoneMembers);
  if (membersIn==null) zoneMembers=SortMembers(zoneMembers);;

  ZoneEmails=[];
  ZoneBoundariesArray=[];
  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xml=Members2XML4text(xmlTxt);
//alert(xmlTxt);
//showInWindow(xmlTxt);
//showInWindowHTML(xmlTxt);
//showInWindowXML(xmlTxt);
  //var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  //TripXMLdocument=xml;
  //
  ZoneName='All Zones';

  //ZoneMembers=zoneMembers;
  ZoneMembers=MembersDataOnly(zoneMembers);

  ZoneDisasterPlanDate='';
  ZoneTeamLeadersIx=[];
  //--ZoneTeamLeadersIx=SortTeamLeadersIx(ZoneTeamLeadersIx,ZoneMembers);
  //ZoneMeetingPlaces=MeetingPlaces(ZoneMembers);
  ZoneMeetingPlaces=[];
  //ZoneNote=GetZoneNote(ZoneMembers);
  ZoneNote='All Zones';
  ZoneFRS='';
  //ZoneURLs=GetZoneURLs(ZoneMembers);
  ZoneURLs='';
  ZoneMembersInactive=CERTmembersInactive;

  ZoneColor=GetZoneColor4members(zoneMembers);
  ZoneType=GetZoneType(zoneMembers);

//  var zoneMembers2Map=Members2Map(ZoneMembers,ZoneMeetingPlaces);
//  var zoneMembers2Map=zoneMembers;
//  ZoneMembers=zoneMembers2Map;
//alert(zoneMembers2Map);

  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xmlTxt=Members2XMLtext(zoneMembers2Map,zone);
//alert(ZoneMeetingPlaces);
  var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);

  var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  TripXMLdocument=xml;

  //
  //alert(TripXMLdocument.xml);
  window.open(ZoneMapPage);
};



//--//--//

function ShowTeamLeadersMap(membersIn) {
  var members=membersIn;
  if (members==null) members=CERTmembers;

  var zoneMembers=TeamLeadersMembers();
  var zone='Team Leaders';

  ZoneEmails=MembersEMail4Zone(zoneMembers,zone);
  ZoneBoundariesArray=null;
  ZoneName=zone;

  //ZoneMembers=zoneMembers;
  ZoneMembers=MembersDataOnly(zoneMembers);

  ZoneDisasterPlanDate=null;
  ZoneTeamLeadersIx=[];
  ZoneMeetingPlaces=[];
  ZoneNote='';
  ZoneFRS='';
  ZoneURLs='';
  ZoneMembersInactive=[];

  var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);

  var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  TripXMLdocument=xml;

  //
  //alert(TripXMLdocument.xml);
  var ZoneTeamLeadersPage='ZonesTeamLeaders.htm';
  window.open(ZoneTeamLeadersPage);
};



function MembersDataOnly(membersIn) {
  var members=[];
  for (var i=0;i<membersIn.length;i++) {
    if (membersIn[i]==null || (membersIn[i][indexFirstName]=='' && membersIn[i][indexLastName]=='')) continue;
    members[members.length]=membersIn[i];
  };
  return members;
};

var ZoneDisasterPlanPage='ZoneDisasterPlan.htm';
function ShowDisasterPlan(zone,membersIn) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  var zoneMembers=Members4Zone(members,zone);
  //-zoneMembers=SortMembers(zoneMembers);

  ZoneEmails=MembersEMail4Zone(zoneMembers,zone);
  ZoneBoundariesArray=GetZoneBoundaries(zoneMembers,zone);
  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xml=Members2XML4text(xmlTxt);
//alert(xmlTxt);
//showInWindow(xmlTxt);
//showInWindowHTML(xmlTxt);
//showInWindowXML(xmlTxt);
  //var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  //TripXMLdocument=xml;
  //
  ZoneName=zone;

  //ZoneMembers=zoneMembers;
  ZoneMembers=MembersDataOnly(zoneMembers);

  ZoneDisasterPlanDate=GetDisasterPlanDate(zoneMembers);
  ZoneTeamLeadersIx=TeamLeadersIx(ZoneMembers);
  ZoneTeamLeadersIx=SortTeamLeadersIx(ZoneTeamLeadersIx,ZoneMembers);
  //ZoneMeetingPlaces=MeetingPlaces(ZoneMembers);
  ZoneMeetingPlaces=MeetingPlaces(zoneMembers);
  //ZoneNote=GetZoneNote(ZoneMembers);
  ZoneNote=GetZoneNote(zoneMembers);
  ZoneFRS=GetZoneFRS(zoneMembers);
  //ZoneURLs=GetZoneURLs(ZoneMembers);
  ZoneURLs=GetZoneURLs(zoneMembers);
  ZoneMembersInactive=Members4Zone(CERTmembersInactive,zone);

  ZoneColor=GetZoneColor4members(zoneMembers);
  ZoneType=GetZoneType(zoneMembers);

//  var zoneMembers2Map=Members2Map(ZoneMembers,ZoneMeetingPlaces);
//  var zoneMembers2Map=zoneMembers;
//  ZoneMembers=zoneMembers2Map;
//alert(zoneMembers2Map);

  //var xmlTxt=Members2XMLtext(zoneMembers,zone);
  //var xmlTxt=Members2XMLtext(zoneMembers2Map,zone);
//alert(ZoneMeetingPlaces);
  //--var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);


  //--var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  //--TripXMLdocument=xml;

  //
  //alert(TripXMLdocument.xml);
  window.open(ZoneDisasterPlanPage);
};



function GetZoneNote(members) {
  var note='';
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZoneNote]!=null && members[i][indexZoneNote]!='') {
      if (i>0) note=note+'\n';
      note=note+''+members[i][indexZoneNote];
    };
  };
  return note;
};

function GetZoneFRS(members) {
  var frs='';
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZoneFRS]!=null && members[i][indexZoneFRS]!='') {
      if (frs!='') frs=frs+', ';
      frs=frs+''+members[i][indexZoneFRS];
    };
  };
  return frs;
};

function GetZoneURLs(members) {
  var urls=[];
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZoneURL]!=null && members[i][indexZoneURL]!='') {
      urls[urls.length]=members[i][indexZoneURL];
    };
  };
  return urls;
};


function GetZoneColor4members(members) {
  var color=null;
  if (members==null) return color;
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZoneColor]!=null && members[i][indexZoneColor]!='') {
      color=members[i][indexZoneColor];
      break;
    };
  };
  return color;
};


function GetZoneType(members) {
  var type=null;
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZoneType]!=null && members[i][indexZoneType]!='') {
      color=members[i][indexZoneType];
      break;
    };
  };
  return type;
};



function showInWindow (txt) {
  var w=window.open();
  w.document.body.innerText=txt;
};

function showInWindowHTML (html) {
  var w=window.open();
  w.document.body.innerHTML=html;
};

function showInWindowXML (xml) {
  var w=window.open();
  w.document.write(xml);
};

function ShowCERTmembers () {
  ShowMembers(CERTmembers,'CERT members');
};

function MembersRoster (fileIn) {
  var file=fileIn;
  if (file==null) file=CERTmembersTXTfile;
  var txt=TEXTload(file);
  var lines=txt.split('\n');
  var line,data;
//alert(txt);
  //return txt;  
  w=window.open();
  w.document.write('<pre>');
  //w.document.write(txt);
  for (var i=0;i<lines.length;i++) {
    line=lines[i];
    data=line.split('\t');
    if (data[indexLastName]=='') continue;
    w.document.write(line+'\n');
  };
  w.document.write('</pre>');
  w.document.close();
  //alert(ZonesPageMapsListTitle);
  w.document.title=ZonePageTitle;
};


function MembersListRoster (membersIn,all) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  //if (members==null) members=ZoneMembers;
  var lines=members;
  var line,data;
//alert(txt);
  //return txt;  
  var w=window.open();
  var html='<table style="font-family:Arial;white-space:nowrap;" >';
   html+='<tr><th>Zone </th><th>TeamLeader </th><th>Active </th><th>Last Name </th><th>FirstName </th><th>Address </th><th>City </th><th>State </th><th>ZIP </th><th>Nhighborhood </th><th>Tel </th><th>Tel work </th><th>Cell </th><th>Pages </th><th>tax </th><th>eMail </th><th>RadioOp </th><th>Graduation </th><th>Class </th><th>ID </th><th>CERT radio </th><th>Skills </th><th>Type </th></tr>';
  //w.document.write(txt);
  for (var i=0;i<lines.length;i++) {
    line=lines[i];
    data=line;
    if (data[3]=='' && all==null) continue;
    html+='<tr>';
    for (var j=0;j<data.length;j++) {
      //if (j>0) html+='\t';
      html+='<td style="font-family:Arial;white-space:nowrap;" >';
      html+=data[j];
      html+='</td>';
    };
    html+='</tr>';
  };
  html+='</table>';
  w.document.write(html);
  w.document.close();
  //alert(ZonesPageMapsListTitle);
  w.document.title=ZonePageTitle+' Members Roster List';
};


function MembersListRosterText (membersIn,all) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  //if (members==null) members=ZoneMembers;
  var lines=members;
  var line,data;
//alert(txt);
  //return txt;  
  var html='<pre>';
  html+='Zone \tTeamLeader \tActive \tLast Name \tFirstName \tAddress \tCity \tState \tZIP \tNhighborhood \tTel \tTel work \tCell \tPages \ttax \teMail \tRadioOp \tGraduation \tClass \tID \tCERT radio \tSkills \tType \n';
  //w.document.write(txt);
  for (var i=0;i<lines.length;i++) {
    line=lines[i];
    data=line;
    if (data[3]=='' && all==null) continue;
    for (var j=0;j<data.length;j++) {
      if (j>0) html+='\t';
      html+=data[j];
    };
    html+='\n';
  };
  html+='</pre>';
  w=window.open();
  w.document.write(html);
  w.document.close();
  //alert(ZonesPageMapsListTitle);
  w.document.title=ZonePageTitle+' Members Roster List';
};


function StartMembersEMail() {
  EMails=MembersEMail4Zone(CERTmembers,null);
  var html='';
  var subject=ZonePageTitle;
  var member;
  for (var i=0;i<CERTmembers.length;i++) {
    member=CERTmembers[i];
    if (member==null || member[indexEMail]==null || member[indexEMail]=='') continue;
    html=html+member[indexEMail]+',';
  };
  if (html=='') {
    alert('no members email found');
    return;
  };
  html='mailto:?subject='+ZonePageTitle+'&bcc='+html;
  if (html.length>2000) {
    // too long for email
    alert('Too many emails \nPlease cut and paste from the opening page to email the report'+'\n\n'+subject);
    ShowEmailsWindow();
    return;
  };
// ShowEmailsWindow();
//alert(html);
  window.open(html);
};


function ShowCERTmembersInactive () {
//alert(CERTmembersInactive);
  ShowMembers(CERTmembersInactive,'Inactive CERT members');
};


function ShowMembers(members,title) {
  var html='';
  html=html+'<html><head><title>'+title+'</title></head>'+'\n';
  html=html+'<body>'+'\n';
  html=html+'<h1>'+'\n';
  html=html+title+' ('+members.length+')'+'\n\n';
  html=html+'</h1>'+'\n';
  html=html+'<table 0border="1">'+'\n';
  var messageCount=0;
  for (var i=0;i<members.length;i++) {
    m=members[i];
    html=html+'<tr>'+'\n';
    if (messageCount--<0) {
      //if (!confirm(''+i+'. '+m[1]+' '+m[0]+' ['+html.length+']')) return;   
      window.status=''+i+'. '+m[1]+' '+m[0];
      messageCount=100;
    };
/*
    for (var j=0;j<m.length;j++) {
      //window.status=''+i+'_'+j+'. '+m[0]+' : '+m[j];
      //if (!confirm(''+i+'_'+j+'. '+m[1]+' '+m[0]+' : '+m[j])) return;
      html=html+' <td>'+'';
      html=html+m[j]+'';
      html=html+'</td>'+'\n';
    };
*/
    html=html+' <td>'+'';
    html=html+(i+1)+'. ';
    html=html+'</td>'+'\n';
    html=html+' <td>'+'';
    html=html+m[indexLastName]+' ';
    html=html+m[indexFirstName]+'';
    html=html+'</td>'+'\n';
    html=html+' <td>'+'';
    html=html+m[indexZone]+'';
    html=html+'</td>'+'\n';

/*
    if (m[indexIsActive].toUpperCase()!='ACTIVE' && m[indexIsActive].toUpperCase()!='INACTIVE' ) {
      html=html+' <td>'+'';
      html=html+m[indexIsActive]+'';
      html=html+'</td>'+'\n';
    };
*/

    html=html+'</tr>'+'\n';
  };
  html=html+'</table>'+'\n';
  html=html+'</body>'+'\n';
  //alert(html);
  w=window.open();
  //alert(w.document.body.innerHTML);
  w.document.body.innerHTML=html;
  w.document.title=title;
  //return html;
};



function ShowCERTmembersFile () {
//alert(CERTmembers);
  var m,w;
  w=window.open(CERTmembersTXTfile);
  return;
  w=window.open();
  w.document.body.innerHTML=CERTmembers;
  return;
  var html='';
  //html=html+'<html><head><title>CERT Members</title></head>'+'\n';
  html=html+'<html><head><title>'+ZoneMembersTitle+'</title></head>'+'\n';
  html=html+'<body>'+'\n';
  html=html+'<h1>'+'\n';
  html=html+'Members data'+'\n\n';
  html=html+'</h1>'+'\n';
  html=html+'<table border="1">'+'\n';
  var messageCount=0;
  for (var i=0;i<CERTmembers.length;i++) {
    m=CERTmembers[i];
    html=html+'<tr>'+'\n';
    if (messageCount--<0) {
      //if (!confirm(''+i+'. '+m[1]+' '+m[0]+' ['+html.length+']')) return;   
      window.status=''+i+'. '+m[1]+' '+m[0];
      messageCount=100;
    };
    for (var j=0;j<m.length;j++) {
      //window.status=''+i+'_'+j+'. '+m[0]+' : '+m[j];
      //if (!confirm(''+i+'_'+j+'. '+m[1]+' '+m[0]+' : '+m[j])) return;
      html=html+' <td>'+'';
      html=html+m[j]+'';
      html=html+'</td>'+'\n';
    };
    html=html+'</tr>'+'\n';
  };
  html=html+'</table>'+'\n';
  html=html+'</body>'+'\n';
  //alert(html);
  w=window.open();
  //alert(w.document.body.innerHTML);
  w.document.body.innerHTML=html;
  //return html;
};

function GetZoneBoundaries0(members,zone) {
  var zoneBoundaries=[],zoneBoundariesJS=GetZoneBoundariesA(members,zone);
  if (zoneBoundariesJS!=null) {
    zoneBoundaries=ZoneBoundariesPoints(zoneBoundariesJS);
  }; 
//alert(i+'. '+boundaryJS+'\n'+zoneBoundariesJS.length+'\n'+zoneBoundaries.length);
  return zoneBoundaries;
};

function GetZoneBoundaries(members,zone) {
  //var zoneBoundariesJS=[], zoneBoundaries=[];
  var zoneBoundariesJS=null, zoneBoundaries=[];
  var member, boundaryJS;
  for (var i=0;i<members.length;i++) {
    if (members[i][indexZone]!=zone) continue;
    boundaryJS=members[i][indexZoneBoundaries];
    if (boundaryJS!=null && boundaryJS!='') {
//if (!confirm(i+'. '+zone+'\n'+boundaryJS);
      zoneBoundariesJS=eval(boundaryJS);
      break;
    };
  };
  return zoneBoundariesJS;
};


//--

var RadioCheckUrl='RadioCheck.htm';
var RadioCheckMembers=[];
function RadioCheckPage() {
  // input for Date, Command operator
  var sortArrayIndex=[];
  var name;
  var members=[]
  var member=[];
  for (var i=0;i<CERTmembers.length;i++) {
    member=CERTmembers[i];
    if (member[indexCertRadio]!=null && member[indexCertRadio]!='') {
      name=member[indexZone]+' - '+member[indexCertRadio]+' - '+member[indexLastName]+' '+member[indexFirstName];
      sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
    };
  };
  // sort members by Zone, Radio, Name
  sortArrayIndex.sort();
  members=OrderArrayFromSortedIndex(CERTmembers,sortArrayIndex);
  RadioCheckMembers=members;
/*
  // create page
  var html='';
  html=html+'<html>';
  html=html+'<head>';
  html=html+'<title>';
  html=html+ZonePageTitle+' - '+ZoneRadioTitle;
  html=html+'</title>';
  html=html+'</head>';
  html=html+'<body bgcolor="#eeeeee" style="{ font-family: arial; }">';

  html=html+'<center>';
  html=html+'<h1>';
  html=html+ZonePageTitle+' - '+ZoneRadioTitle;
  html=html+'<br/>Radio Check';
  html=html+'</h1>';

  html=html+'<form name="Radio">';

  html=html+'<table>';
  html=html+'<tr><td>';

  var d=new Date();
  var dTxt=d.getMonth()+'/'+d.getDate()+'/'+d.getFullYear();
  html=html+'<table>';
  html=html+'<tr>';
  html=html+'<td>Date: </td><td> <input type="text" value="'+dTxt+'" size="14" name="date"/></td>';
  html=html+'</tr><tr>';
  html=html+'<td>Run By: </td><td> <input type="text" value="controller name" size="30" name="controller"/></td>';
  html=html+'</tr><tr>';
  html=html+'<td colspan="2">Mark the members checking in, for record keeping print</td>';
  html=html+'</tr>';
  html=html+'</table>';
  html=html+'<br/>';

  html=html+'<table>';
  var ZoneP='!';
  for (var i=0;i<members.length;i++) {
    member=members[i];
    if (ZoneP!=member[indexZone]) {
      ZoneP=member[indexZone];
      html=html+'<tr>';
      html=html+'<td colspan="3">';
      html=html+'<br/>';
      html=html+'<b>'+ZoneP+'</b>';
      html=html+'<br/>';
      html=html+'</tr>';
    };
    //html=html+'<br/>';
    //html=html+''; // checkbox for check in: Zone, Name, Radio, call sign
    html=html+'<tr>';
    html=html+'<td><input type="checkbox" name="radio'+i+'"></td>';
    html=html+'<td>'+member[indexCertRadio]+'</td><td><i>'+member[indexLastName]+' '+member[indexFirstName]+'<i></td>';
    if (member[indexRadioOp]!=null && member[indexRadioOp]!='')
      html=html+'<td>'+member[indexRadioOp]+'</td>';
    html=html+'</tr>';
  };

  html=html+'</td></tr>';
  html=html+'</table>';
  html=html+'</form>';
  html=html+'</center>';
  html=html+'</body>';
  html=html+'</html>';
*/

  // create window
  //ShowWindow(html,'Radio Check - '+ZonePageTitle);
  var w=window.open(RadioCheckUrl);
  //var w=window.open();
  //w.document.write(html);
  //w.document.title='Radio Check - '+ZonePageTitle;
  //w.document.close();
  // allow printing.
};


var HamRadioCheckUrl='HamRadioCheck.htm';
var HamRadioCheckMembers=[];
function HamRadioCheckPage() {
  // input for Date, Command operator
  var sortArrayIndex=[];
  var name;
  var members=[]
  var member=[];
  for (var i=0;i<CERTmembers.length;i++) {
    member=CERTmembers[i];
    if (member[indexRadioOp]!=null && member[indexRadioOp]!='') {
      name=member[indexZone]+' - '+member[indexLastName]+' '+member[indexFirstName]+' - '+member[indexRadioOp];
      sortArrayIndex[sortArrayIndex.length]=name+SortArrayAlphaSeparator+i;
    };
  };
  // sort members by Zone, Radio, Name
  sortArrayIndex.sort();
  members=OrderArrayFromSortedIndex(CERTmembers,sortArrayIndex);
  HamRadioCheckMembers=members;

  // create window
  //ShowWindow(html,'Radio Check - '+ZonePageTitle);
  var w=window.open(HamRadioCheckUrl);
  //var w=window.open();
  //w.document.write(html);
  //w.document.title='Radio Check - '+ZonePageTitle;
  //w.document.close();
  // allow printing.
};



function FindMembers(nameIn) {
  var name=nameIn.toUpperCase();
  var found=[], mName,ok;
  for (var i=0;i<CERTmembers.length;i++) {
    //mName=(CERTmembers[i][indexLastName]+' '+CERTmembers[i][indexFirstName]).toUpperCase();
    //mName=(CERTmembers[i][indexLastName]+' '+CERTmembers[i][indexFirstName]+' '+CERTmembers[i][indexEMail]).toUpperCase();
    mName=(CERTmembers[i][indexLastName]+' '+CERTmembers[i][indexFirstName]+' '+CERTmembers[i][indexEMail]+' '+CERTmembers[i][indexPhoneHome]).toUpperCase();
    ok=mName.indexOf(name);
    if (ok>=0) found[found.length]=CERTmembers[i];
  };
  return found;
};


function MemberInfoText(ix, membersIn) {
  var members=membersIn;
  if (members==null) members=CERTmembers;
  //var memberInfo=members[ix][indexZone]+'\\n'+members[ix][indexCertRadio]+'\\n'+members[ix][indexLastName]+' '+members[ix][indexFirstName]+'\\nTel: '+members[ix][indexPhoneHome]+'\\neMail: '+members[ix][indexEMail]+'\\nTeam Leader: '+members[ix][indexTeamLeaderIx];
  var memberInfo='';
  //memberInfo=memberInfo+members[ix][indexLastName]+' '+members[ix][indexFirstName];
  memberInfo=memberInfo+members[ix][indexLastName]+' '+members[ix][indexFirstName]+' ['+members[ix][indexId]+']';
  memberInfo=memberInfo+'\\n';
  memberInfo=memberInfo+'\\n'+members[ix][indexAddress];
  memberInfo=memberInfo+'\\n'+members[ix][indexCity]+', '+members[ix][indexState]+' '+members[ix][indexZip];
  memberInfo=memberInfo+'\\n';
  memberInfo=memberInfo+'\\nZone: \\t'+members[ix][indexZone];
  if (members[ix][indexPhoneHome]!=null && members[ix][indexPhoneHome]!='') 
      memberInfo=memberInfo+'\\nTel: \\t'+members[ix][indexPhoneHome];
  if (members[ix][indexEMail]!=null && members[ix][indexEMail]!='') 
      memberInfo=memberInfo+'\\neMail: \\t'+members[ix][indexEMail];
  if (members[ix][indexCertRadio]!=null && members[ix][indexCertRadio]!='') 
      memberInfo=memberInfo+'\\nRadio: \\t'+members[ix][indexCertRadio];
  if (members[ix][indexRadioOp]!=null && members[ix][indexRadioOp]!='') 
      memberInfo=memberInfo+'\\nHam: \\t'+members[ix][indexRadioOp];
  if (members[ix][indexSpecialSkills]!=null && members[ix][indexSpecialSkills]!='') 
      memberInfo=memberInfo+'\\nSkills: \\\t'+members[ix][indexSpecialSkills];
  if (members[ix][indexTeamLeaderIx]!=null && members[ix][indexTeamLeaderIx]!='') 
      memberInfo=memberInfo+'\\nTeam Leader ('+members[ix][indexTeamLeaderIx]+')';
  //memberInfo=memberInfo+'\\nId: \\t'+members[ix][indexId];
  memberInfo=memberInfo.replace(/'/g,'~');
  return memberInfo;
};

//function ShowMemberInfoAndEMail(i,found) {
//  var memberInfo=MemberInfoText(i, found);
function ShowMemberInfoAndEMail(memberInfo,email,name) {
//alert(memberInfo);
//alert(email);
//alert(name);
  if (email==null || email=='') { 
    alert(memberInfo);
    return;
  };
  var prepareEMail=confirm(memberInfo+'\n\n'+'Prepare Email ?');  
  if (prepareEMail) {
    var urlToOpen='mailto:'+email;
    if (name!=null) urlToOpen=urlToOpen+'?subject=for '+name;
    window.open(urlToOpen);
  };
};

var FoundMembersData=[];
function FoundMembersHTML(found,searchString) {
  var html='';
  html=html+'<ol>';
  if (found.length<1) { 
    html=html+'<i> - no member found - </i>'
   } else {
    html=html+'<i>Found ('+found.length+')</i>';
    FoundMembersData=found;
    html=html+' <input type="button" value="map" onClick="FoundMembersMap(null,\''+searchString+'\')">';
  };
  var memberInfo;
  for (var i=0;i<found.length;i++) {
    html=html+'<li>';
    memberInfo=MemberInfoText(i, found);
    //html=html+'<a href="javascript:alert(\''+memberInfo+'\')"  style="{text-decoration: none;}"><font face="webdings">i</font></a> ';
    //html=html+'<a href="javascript:ShowMemberInfoAndEMail('+i+',\''+found+'\')"  style="{text-decoration: none;}"><font face="webdings">i</font></a> ';
    html=html+'<a href="javascript:ShowMemberInfoAndEMail(\''+memberInfo+'\',\''+found[i][indexEMail]+'\',\''+found[i][indexLastName]+' '+found[i][indexFirstName]+'\')"  style="{text-decoration: none;}"><font face="webdings">i</font></a> ';
    //html=html+'<font onClick="alert(\''+memberInfo+'\')">';
    if (found[i][indexEMail]!=null && found[i][indexEMail]!='')
      //html=html+'<a href="mailto:'+found[i][indexEMail]+'" >';
      html=html+'<a href="mailto:'+found[i][indexEMail]+'?subject=for '+found[i][indexLastName]+' '+found[i][indexFirstName]+'" >';
    html=html+found[i][indexLastName]+' '+found[i][indexFirstName];
    if (found[i][indexEMail]!=null && found[i][indexEMail]!='')
      html=html+'</a>';
    //html=html+'</font>';
    html=html+' : ';
    html=html+'<a href="javascript:ShowZoneMap(\''+found[i][indexZone]+'\')">';
    html=html+found[i][indexZone];
    html=html+'</a>';
    if (found[i][indexTeamLeaderIx]!=null && found[i][indexTeamLeaderIx]!='')
      html=html+' <font face="webdings" onClick="alert(\''+memberInfo+'\')">~</font>';
    //if (found[i][indexEMail]!=null && found[i][indexEMail]!='')
    //  html=html+' <a href="mailto:'+found[i][indexEMail]+'" >'+found[i][indexEMail]+'</a>';
    html=html+'</li>';
  };
  html=html+'</ol>';
  return html;
}; 

function FoundMembersMap (foundIn,searchStringIn) {
  var found=foundIn;
  if (found==null) found=FoundMembersData;
  if (found==null || found.length==0) {
    alert('No members to map');
    return;
  };
  var searchString=searchStringIn;
  if (searchString==null || searchString=='null') searchString='';
  MembersArrayMap('['+searchString+'] Found ('+found.length+')',found);
};

function MembersArrayMap (title, membersIn) {
  if (membersIn==null || membersIn.length==0) {
    alert('Noone to map');
    return;
  };
  ZoneName=title;
  if (ZoneName==null) ZoneName='People';
  var members=SortMembers(membersIn);
  ZoneMembers=members;
  ZoneEMails=MembersEMail4Zone(ZoneMembers);
  ZoneTeamLeadersIx=[];
  ZoneMeetingPlaces=[];
  ZoneBoundariesArray=null;
  ZoneDisasterPlanDate='';
  var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);
  var xml=String2XML(xmlTxt);
  TripXMLdocument=xml;
  window.open(ZoneMapPage);
};


// Privacy: Randomize Names, for privacy

var PrivacyMaxRetry=10;

function fakeMembers(members) {
  var ms=members.slice(0), m;
  for (var i=0;i<members.length;i++) {
    //m=members[i].slice(0);
    //if (m[indexLastName]!=null || m[indexLastName]!='')
    //  m=fakeMember(members,m);
    //ms[ms.length]=m;
    getFakeMember(members,ms[i]);
//if (!confirm(members[i]+'\n\n'+ms[i])) break;
    //window.status='privacy for members: '+(i+1);
    //window.status='privacy for members: '+TextCompletion(i+1,members.length);
    StatusCompletion('process privacy for members:',i,members.length, 'complete',40);
  };
  ms=SortMembersByZone(members);
  return ms;
  //return members;
};

function StatusCompletion(text,ix,n, afterIn, len) {
  var after=afterIn;
  if (after==null) after='';
  window.status=text+' '+TextCompletion(ix+1,n,len)+' '+after;
};


function TextCompletion(n,ofN,lenIn) {
  var len=lenIn;
  if (len==null) len=10;
  //var txt='[----------]'
  var txt='[----------]'
  txt='';
  var np=Math.floor(n/ofN*100);
  var nx=Math.floor(np*len/100);
  txt=txt+'[';
  for (var i=0;i<nx;i++) {
    txt=txt+'-';
  };
  for (var i=nx;i<len;i++) {
    txt=txt+' ';
  };
  txt=txt+']';
  txt=txt+' '+(np)+'%';
  return txt;
};

var fakeMember=NewMember.slice(0);
fakeMember[indexLastName]='fake';
fakeMember[indexFirstName]='name';
fakeMember[indexPhoneHome]='123-456-HOME';
fakeMember[indexPhoneCell]='123-456-CELL';
fakeMember[indexPhoneWork]='111-333-WORK';
fakeMember[indexPhonePager]='333-333-PAGR';
fakeMember[indexPhoneFax]='333-333-2FAX';
fakeMember[indexEMail]='who@where.com';
fakeMember[indexRadioOp]='Kxxxxx radio';

function getFakeMember(members,member) {
  //var m=member.slice(0);
  var m=member;
  if (m[indexLastName]==null || m[indexLastName]=='') return m;
  if (m[indexFirstName].toUpperCase()=='NICOLA' && m[indexLastName].toUpperCase()=='ZORDAN') return m;
  var name=fakeName(members);
  m[indexLastName]=name[0];
  m[indexFirstName]=name[1];
  if (m[indexPhoneHome]!='') m[indexPhoneHome]=fakeMember[indexPhoneHome];
  if (m[indexPhoneCell]!='') m[indexPhoneCell]=fakeMember[indexPhoneCell];
  if (m[indexPhoneWork]!='') m[indexPhoneWork]=fakeMember[indexPhoneWork];
  if (m[indexPhonePager]!='') m[indexPhonePager]=fakeMember[indexPhonePager];
  if (m[indexPhoneFax]!='') m[indexPhoneFax]=fakeMember[indexPhoneFax];
  if (m[indexEMail]!='') m[indexEMail]=fakeMember[indexEMail];
  if (m[indexRadioOp]!='') m[indexRadioOp]=fakeMember[indexRadioOp];
  return m;
};


function fakeName (members){
  var lastName,firstName,name;
  for (var i=0;i<PrivacyMaxRetry;i++) {
    lastName=fakeIx(members,indexLastName);
    firstName=fakeIx(members,indexFirstName);
    if (CheckNameInMembers(members, firstName,lastName)>=0) break;
  };  
  name=[lastName,firstName];
  return name;
};


function fakeIx(members,ixName) {
  var name='fake';
  if (members.length<1) return name;  
  var ix=null;
  for (var i=0;i<PrivacyMaxRetry;i++) {
    ix=Math.floor(Math.random()*members.length);
//alert(ix);
    name=members[ix][ixName];
    if (ix!=null && name!=null && name!='') break;
  };  
  return name;
};

function CheckNameInMembers (members, firstName,lastName) {
  var found=-1;
  var m;
  for (var i=0;i<members.length;i++) {
    m=members[i];
    if (m[indexFirstName]==firstName && m[indexLastName]==lastName)
      return i;
  };
  return found;
};

function showPercent(text,i,n, pctPre) {
  var pct=Math.round((i+1)/n*100);
  if (pct!=pctPre) {
    window.status=pct+'% '+text;    
  };
  return pct;
};

function MapContacts(membersIn,title) {
  //ZoneName=document.title;
  ZoneName=title;
  if (ZoneName==null) ZoneName='Selected members';
  //ZoneMembers=membersIn;
  //CERTmembers=membersIn;
  //var members=membersIn.slice(0);
  var members=SortMembers(membersIn);
  ZoneMembers=members;
  ZoneEMails=MembersEMail4Zone(ZoneMembers);
  ZoneTeamLeadersIx=[];
  ZoneMeetingPlaces=[];
  ZoneBoundariesArray=null;
  ZoneDisasterPlanDate='';

  var xmlTxt=Members2XMLtext(ZoneMembers,ZoneName,ZoneMeetingPlaces);

  var xml=String2XML(xmlTxt);
//showInWindow(xml.xml);
  TripXMLdocument=xml;

  window.open(ZoneMapPage);
};

function ReadMembers(fileIn,loadInactive,fileZIn) {
        var file=fileIn;
        if (file==null) file=CERTmembersTXTfile;
        var fileZ=fileZIn;
        if (fileZ==null) fileZ=CERTzonesTXTfile;
	var txt='',txtZ='';
       /*
        var txtPOI;
        var filePOI=filePOIin;
        if (filePOI==null) filePOI=CERTpoiTXTfile;
       */

        txtZ=ReadCERTzonesTXT(fileZ);
        var zones=[];
        zones=CERTzones4txt(txtZ,loadInactive);
        var zonesAsMembers=Zones2Members(zones,loadInactive);

        txt=ReadCERTmembersTXT(file);
        var members=[];
        members=CERTmembers4txt(txt,loadInactive,zonesAsMembers);

       /*
        txtPOI=ReadCERTmembersTXT(filePOI);
//alert(filePOI+'\n\n'+txtPOI);
        var poiData=membersData4txt(txtPOI,loadInactive,null);
        var poi=poiData[0];
         // GLOBAL
        CERTpoi=poi;
       */

        //var allMembers=members.concat(zonesAsMembers);     
        //return allMembers;
        //CERTmembers=members;
        return members;
};

function Zones2Members (zones,loadInactive) {
  var members=[];
  var member;
  for (var i=0;i<zones.length;i++) {
    member=Zone2Member(zones[i]);
    members[members.length]=member;
  };
  return members;
};

function Zone2Member (zone,loadInactive) {
  var member=[];

  member[indexZone]=zone[indexZoneZ];
  member[indexTeamLeaderIx]='';
  member[indexIsActive]=zone[indexIsActiveZ];
  member[indexLastName]='';
  member[indexFirstName]='';
  member[indexAddress]='';
  member[indexCity]='';
  member[indexState]='';
  member[indexZip]='';
  member[indexNeighborhood]='';
  member[indexPhoneHome]='';
  member[indexPhoneWork]='';
  member[indexPhoneCell]='';
  member[indexPhonePager]='';
  member[indexPhoneFax]='';
  member[indexEMail]='';
  member[indexRadioOp]='';
  member[indexGraduationDate]='';
  member[indexCalss]='';
  member[indexId]='';
  member[indexCertRadio]='';
  member[indexSpecialSkills]='';
  member[indexType]=zone[indexZoneTypeZ];
  member[indexMeetingPlace]=zone[indexMeetingPlaceZ];
  member[indexMeetingPlaceNote]=zone[indexMeetingPlaceNoteZ];
  member[indexDisasterPlanDate]=zone[indexDisasterPlanDateZ];
  member[indexZoneFRS]=zone[indexZoneFRSZ];
  member[indexZoneURL]=zone[indexZoneURLZ];
  member[indexZoneNote]=zone[indexZoneNoteZ];
  member[indexZoneColor]=zone[indexZoneColorZ];
  member[indexZoneType]=zone[indexZoneTypeZ];
  member[indexZoneBoundaries]=zone[indexZoneBoundariesZ];
//alert(member[indexZone]+'\n'+member[indexZoneBoundaries]);
    member=fixMember(member,loadInactive);
    member=loggedInMember(member);
  return member;
};


