//-- new members

var NewMembers=[];
var NewMembersZonesIx=[];
var NewMembersPoints=[];
var NewMembersMarkers=[];


function ShowNewMembers() {
  RemoveExistingNewMebersMarkers();
  GetNewMembers();
  //AddNewMembersToLocations();
  MapNewMembers();
  showNewMembersList();
};

function ClearNewMembers() {
  RemoveExistingNewMebersMarkers();
  document.getElementById('NewMembersText').value='';
  document.getElementById('NewMembersList').innerHTML='';
  document.getElementById('NotificationEMails').innerHTML='';
};


function showNewMembersList() {
  var listHtml=NewMembersListHTML('');
  document.getElementById('NewMembersList').innerHTML=listHtml;
};


function MapNewMembers() {
  //remove previus markers
  showNewMemberLocation();
};

function RemoveExistingNewMebersMarkers() {
  for (var i=0;i<NewMembersMarkers.length;i++) {
    if (NewMembersPoints=='NOPOINT') continue;
    map.removeOverlay(NewMembersMarkers[i]);
  }; 
  NewMembersMarkers=[];
  NewMembersPoints=[];
  NewMembersZoneIx=[];
};


function GetNewMembers() {
  var members=Text2NewMembers(document.getElementById('NewMembersText').value);
  NewMembers=SortMembersByZone(members);
  return NewMembers;
};

// format: name | address | tel | note
var dataSeparator=',';
function Text2NewMembers(txt) {
  var members=[];
  var line;
  var lines=txt.split('\n');
  for (var i=0;i<lines.length;i++) {
    line=lines[i].replace(/\r/g,'');
    member=line.split(dataSeparator);
    member=fixNewMember(member);
    if (member==null) {
      //alert(line);
      continue; // Do not add invalid data
    };
    members[members.length]=member;
    window.status=i+'. '+member[indexLastName]+' '+member[indexFirstName]+' : '+member[indexZone];
  };
  window.status=members.length+' new members read';
  return members;
};

function fixNewMember (memberIn) {
// lastName, firstName, address, city state zip, tel

  if (memberIn==null || memberIn.length<2) return null;

  var lastName=memberIn[0];
  var firstName=memberIn[1];
  var address=memberIn[2];
  var city=memberIn[3];
  var state=memberIn[4];
  var zip=memberIn[5];
  var tel=memberIn[6];
  var email=memberIn[7];
  var skills=memberIn[8];
  //var note=memberIn[7];
  //var zone='NewMembers';
  var zone='- N/A -';
  var active='yes';
  active='Active';

  if (lastName==null || lastName=='') return null;

  var member=[];

  member[indexZone]=zone;
  member[indexTeamLeaderIx]='';
  member[indexIsActive]=active;
  member[indexLastName]=lastName;
  member[indexFirstName]=firstName;
  member[indexAddress]=address;
  member[indexCity]=city;
  member[indexState]=state;
  member[indexZip]=zip;
  member[indexNeighborhood]='';
  member[indexPhoneHome]=tel;
  member[indexPhoneWork]='';
  member[indexPhoneCell]='';
  member[indexPhonePager]='';
  member[indexPhoneFax]='';
  member[indexEMail]=email;
  member[indexRadioOp]='';
  member[indexGraduationDate]='';
  member[indexCalss]='';
  member[indexId]='';
  member[indexCertRadio]='';
  member[indexSpecialSkills]=skills;
  member[indexMeetingPlace]='';
  member[indexMeetingPlaceNote]='';
  member[indexDisasterPlanDate]='';
  member[indexZoneFRS]='';
  member[indexZoneURL]='';
  member[indexZoneNote]='';
  member[indexZoneBoundaries]='';

  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]);
//alert(member);
  return member;
};


function NewMembersListHTML (showExtra) {
	var html="";
	// zoom back to trip
	html+="<center>";
	//html+='<input type="button" value="Show Trip" onClick="ZoomToTrip()" />';
	html+='<input type="button" value="Zoom New Members" onClick="ZoomNewMembers()" />';
	html+="</center>";
	html+="<br/>";
	//
	//html+="<ol>";
	html+='<ol 0start="'+(CERTzones.length+1)+'">';
	for (var i=0;i<NewMembers.length;i++) {
  	  html+="<li>";
          html+="<a href='javascript:showNewMemberDetails("+i+")'>";
          //html+="<a href='javascript:showLocationDetails("+(LocationsBeforeNewMembers.length+i)+")'>";
          html+=NewMemberListHTML(i,showExtra);
	  html+="</a>";

          // candidate zones
          var zIx=NewMembersZonesIx[i];
          if (zIx!=null && zIx.length>0) {
            html+="<ul>";
            for (var j=0;j<zIx.length;j++) {
              //html+="<br/>"+CERTzones[zIx[j]];
              html+="<li>";
            html+="<small>";
              //html+='<a href="javascript:showLocationDetails('+zIx[j]+')">';
              html+='<a href="javascript:ShowOnlyZoneBox('+zIx[j]+')">';
              html+=ZoneColorHTML(zIx[j])+' ';
              html+=CERTzones[zIx[j]];
              html+='</a>';
            html+="</small>";
              html+="</li>";
            };
            html+="</ul>";
          };

	  html+="</li>";
        };
	html+="</ol>";
        html+='<br/><input type="button" value="Notification eMails" onClick="ShowNewMembersNotificationEMails()" />';

        html='<small>'+html+'</small>';

	return html;
};

function NewMemberListHTML (i,showExtra) {
  var html='';
  html+=NewMembers[i][indexLastName]+' '+NewMembers[i][indexFirstName];
  if (NewMembersPoints[i]=='NOPOINT') 
    html+=' <font face="webdings" color="red" onClick="alert(\'No Map\')">x</font>';
  return html;
};


function ZoomNewMembers () {
  var b=new GLatLngBounds();
  for (var i=0;i<NewMembersPoints.length;i++) {
    if (NewMembersPoints[i]=='NOPOINT') continue;
    b.extend(NewMembersPoints[i]);
  };
  map.setCenter(b.getCenter(),map.getBoundsZoomLevel(b)); 
};


function showNewMemberDetails(ix) {
  if (NewMembersPoints[ix]=='NOPOINT') {
          alert("Google maps API cannot Geolocate: \n"+NewMembers[ix][indexLastName]+' '+NewMembers[ix][indexFirstName]+"\n"+NewMembers[ix][indexAddress]+', '+NewMembers[ix][indexCity]+', '+NewMembers[ix][indexState]+', '+NewMembers[ix][indexZip]+"\nTel: "+NewMembers[ix][indexPhoneHome]);
          return;
  };
  map.closeInfoWindow(); // else get problems
  NewMembersMarkers[ix].openInfoWindowHtml(NewMembersMarkers[ix].html);
};



function showNewMemberLocation(ixIn) {
  var ix=ixIn;
  if (ix==null) ix=0;
  if (ix>=NewMembers.length) {
    showNewMembersList();
    return;
  };
  var id,name,address,tel,html,lat,lon, description;
  var nm=NewMembers[ix];
  id='newMember'+ix;
  name=nm[indexLastName]+' '+nm[indexFirstName];
  address=nm[indexAddress]+', '+nm[indexCity]+', '+nm[indexState]+' '+nm[indexZip];
  tel=nm[indexPhoneHome];
//alert('['+id+']\n'+'['+name+']\n'+'['+address+']\n'+'['+tel+']');
  lon=null;
  lat=null;
  description=null;
  if (description==null) description="";

  geocoder.getLatLng(
    address,
    function(point) {
      var where=point;
      if (!point) {
 	if (lon==null || lat==null) {
	  lat=0;
	  lon=0;
  	  NewMembersPoints[ix]='NOPOINT';
          //alert("Google maps API cannot Geolocate: \n"+name+"\n"+address);
          window.status=("Google maps API cannot Geolocate: \n"+name+"\n"+address);
          showNewMemberLocation(ix+1);
           return;
         } else {
	};
 	//where=new GPoint(lat,lon);
	//where=new GPoint(lon,lat);
	where=new GLatLng(lat,lon);
       } else { 
	lon=where.x;
    	lat=where.y;
      };


	NewMembersPoints[ix]=where;

        // Create our "tiny" marker icon
        var icon = new GIcon();
        //icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
        icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
        icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
        icon.iconSize = new GSize(12, 20);
        icon.shadowSize = new GSize(22, 20);
        icon.iconAnchor = new GPoint(6, 20);
        icon.infoWindowAnchor = new GPoint(5, 1);

        NewMembersZonesIx[ix]=Zones4NewMember(ix);
        SetNewMembersZone(ix);

        //var markerName = getMarkerIdent( id );
        NewMembersMarkers[ix]=new GMarker(where);
        NewMembersMarkers[ix]=new GMarker(where, icon);
        html="<div>"+NewMemberDescriptionHTML(ix)+"</div>";
	NewMembersMarkers[ix].html=html;
	eval("GEvent.addListener(NewMembersMarkers["+ix+"], 'click', function() { NewMembersMarkers["+ix+"].openInfoWindowHtml(NewMembersMarkers["+ix+"].html); } );" );
        //--eval("map.addOverlay(" + markerName + ");");
        map.addOverlay(NewMembersMarkers[ix]);

        showNewMemberLocation(ix+1);
    }
  );
};

function SetNewMembersZone(ix) {
  var zoneCandidates=[];
  for (var i=0;i<NewMembersZonesIx[ix].length;i++) {
    zoneCandidates[i]=CERTzones[NewMembersZonesIx[ix][i]];
  };
  var zoneCandidate=zoneCandidates.join(' ~ ');
  if (NewMembersZonesIx[ix]==null || NewMembersZonesIx[ix].length<1) zoneCandidate='- N/A -';
  NewMembers[ix][indexZone]=zoneCandidate;
  return NewMembers[ix][indexZone];
};


function NewMemberDescriptionHTML(ix) {
  var html='';
  var nm=NewMembers[ix];
  var name=nm[indexLastName]+' '+nm[indexFirstName];
  var address=nm[indexAddress]+', '+nm[indexCity]+', '+nm[indexState]+' '+nm[indexZip];
  var tel=nm[indexPhoneHome];
  var LatLonURL='http://maps.google.com/maps?f=q&hl=en&q='+address;
  LatLonURL=URLnoBlanks(LatLonURL);
  var LatLonText='i';
  var LatLonHTML='<a href='+LatLonURL+' target="_blank"><font face="webdings" style="{text-decoration: none;}">'+LatLonText+'</font></a>';

  html+="<b>"+name+"</b>";
  html+=" "+LatLonHTML;
  if (address!=null && address.length>0) {
    html+="<br/>"+address;
  };
  if (tel!=null && tel.length>0) {
    html+="<br/>Tel: "+tel;
  };
  var zIx=NewMembersZonesIx[ix];
  //html+="<br/><br/><small> <i>Candidate Zones:</i>";
  html+="<br/><small> <i>Candidate Zones:</i>";
  //html+="<ul>";
  if (zIx!=null && zIx.length>0) {
    var teamLeader=null;
    for (var i=0;i<zIx.length;i++) {
      //html+="<br/>"+CERTzones[zIx[i]];
      //-html+="<li>";
      html+="<br/>";
      //html+='<a href="javascript:showLocationDetails('+zIx[i]+')">';
      html+='<a href="javascript:ShowOnlyZoneBox('+zIx[i]+')">';
      html+=ZoneColorHTML(zIx[i])+' ';
      html+=CERTzones[zIx[i]];
      html+='</a>';
      html+=' - ';
      html+='<a href="javascript:ShowZoneDetails(\''+CERTzones[zIx[i]]+'\')">';
      html+='members map';
      html+='</a>';
      //html+=' '+ZoneTeamLeaderDescriptionText(zIx[i]);
/* * 
      teamLeader=ZonesTeamLeadersTxt[zIx[i]][0];
      if (teamLeader!=null)
      html+=' '+ZonesTeamLeadersTxt[zIx[i]].length; 
 * */
      //-html+="</li>";
    };
   } else {
      html+="<li>"+'- N/A -'+'</li>';
  };
  //html+="</ul>";
  html+="<br/>";
  html+="</small>";
  return html;
};


function Zones4NewMember(ix) {
  var nm=NewMembers[ix];
  var zones=[];
  var p=NewMembersPoints[ix];
  if (p=='NOPOINT') {
    return zones;
  };
  var b,c,zb;
  var bp=null;
  var bp=new GLatLngBounds();
  bp.extend(p);
  for (var i=0;i<ZonesMembersCount.length;i++) {
  //for (var i=0;i<ZonesCenter.length;i++) {
    zb=ZonesBoundaries[i];
    if (zb==null || zb.length<1) continue;
    //b=new GLatLngBounds(ZonesBoundaries[i]);
    b=new GLatLngBounds();
    for (j=0;j<zb.length;j++) {
      b.extend(zb[j]);
    };
    c=b.containsBounds(bp);
    //-c=bp.containsBounds(b);
    if (c) {
      zones[zones.length]=i;
    };
  };
  return zones;
};

function ShowNewMembersAssigned() {
  return ShowNewMembersText();
};

function ShowNewMembersText() {
  var txt='';
  for (var i=0;i<NewMembers.length;i++) {
     if (i>0) txt=txt+'\n';
     //txt=txt+NewMembers[i].join(',');
     txt=txt+NewMembers[i].join('\t');
  };
//alert(txt);
  txt='<pre>'+txt+'</pre>';
  ShowWindow(txt,'New Members zone assigned and formatted');
};


function isPointInsidePolygon(p,pPolygon) {
  var xCount=0, yCount=0;
  var px=p.x, py=p.y, pp1,pp2, ppx1,ppy1,ppx2,ppy2;
  var s=null,m=null, pi, piX, piY, piM, piQ;
  var m=new GMarker(p),mi,s2;
  map.addOverlay(m);
  for (var i=0;i<pPolygon.length-1;i++) {
    pp1=pPolygon[i];
    ppx1=pp1.x;
    ppy1=pp1.y;
    pp2=pPolygon[i+1];
    s=new GPolyline([pp1,pp2]);
    map.addOverlay(s);
    ppx2=pp2.x;
    ppy2=pp2.y;

    piM=(ppy2-ppy1)/(ppx2-ppx1);
    piQ=(ppx2-ppx1)/(ppy2-ppy1);

    piX=px;
    piY=piX*piM+piQ;

    piX=ppx1;
    piY=piX*piM+piQ;

/*
    piY=py;
    //piX=py*piQ+piM;
    piX=(py-piQ)/piM;

    piY=ppy1+0.05;
    piY=ppy1;
    //piX=py*piQ+piM;
    piX=(piY-piQ)/piM;
*/

    //pi=new GLatLng(piX,piY);
    pi=new GLatLng(piY,piX);

    mi=new GMarker(pi);
    map.addOverlay(mi);
alert(pi+'\nm='+piM+'\nq='+piQ+'\nx='+piX+'\ny='+piY+'\n\npp1='+pp1+'\npp2='+pp2+'\n'+pp2.x+' '+pp2.y+'\np='+p);

    //if (((ppx1>=px || ppx2>=px) && (ppx1>ppx2)) || ((ppx1<=px || ppx2<=px) && (ppx1<ppx2)))
    if (ppx1>=px && ppx2>=px)
      if ((py>=ppy1 && py<=ppy2) || (py<=ppy1 && py>=ppy2)) xCount++;
    if (ppy1>=py || ppy2>=py) 
      if ((px>=ppx1 && px<=ppx2) || (px<=ppx1 && px>=ppx2)) yCount++;
//alert(xCount+'\n'+yCount);
    map.removeOverlay(s);
    map.removeOverlay(mi);
  };
  map.removeOverlay(m);
  var oddX=((xCount%2)>0);
  var oddY=((yCount%2)>0);
  var oddXY=(((xCount+yCount)%2)>0);
//alert(xCount+' '+yCount+'\n'+oddX+' '+oddY+'\n'+oddXY);
  var inside=oddXY;  
  return inside; 
};


// Notification eMail

function NewMembersNotificationEMailsHTML () {
  // Replicate members if member in multiple zone
  var startMembers=NewMembers.slice(0);
  var zonesWNMIMZS='~';
  var candiateZones, member;
  for (var i=0;i<NewMembers.length;i++) {
  //for (var i=0;i<startMembers.length;i++) {
    candidateZones=NewMembersZonesIx[i];
    //candidateZones=(startMembers[i][indexZone].split(' ~ '));
/*
    if (candidateZones==null) {
      member=startMembers[i].slice(0);
      member[indexZone]='- N/A -';
      startMembers[i]=member;
alert(startMembers[i][indexLastName]+' '+startMembers[i][indexFirstName]+ 
      '\n'+NewMembers[i][indexZone]+
      '\n'+startMembers[i][indexZone]+
      '\n ['+candidateZones+']'
);
    };
*/
    if (candidateZones!=null && candidateZones.length>1) {
      member=startMembers[i].slice(0);
      member[indexZone]=CERTzones[candidateZones[0]];
      startMembers[i]=member;
      for (var j=1;j<candidateZones.length;j++) {
        member=startMembers[i].slice(0);
        member[indexZone]=CERTzones[candidateZones[j]];
        startMembers[startMembers.length]=member;
/*
alert(startMembers[i][indexLastName]+' '+startMembers[i][indexFirstName]+ 
      '\n'+startMembers[i][indexZone]+
      '\n'+startMembers[startMembers.length-1][indexZone]
);
*/
        if (zonesWNMIMZS.indexOf(startMembers[i][indexZone])<0) zonesWNMIMZS+=startMembers[i][indexZone]+'~';
        if (zonesWNMIMZS.indexOf(startMembers[startMembers.length-1][indexZone])<0) zonesWNMIMZS+=startMembers[startMembers.length-1][indexZone]+'~';
      };
    };
  };
//alert(NewMembers.length+'\n'+startMembers.length);
  // sort by zone
  //var newMembers=SortMembersByZone(NewMembers);
  var newMembers=SortMembersByZone(startMembers);
  //var newMembers=NewMembers;
//alert(newMembers.length);
  var zones=Zones4Members(newMembers);
//alert(zones);
  var teamLeaders=TeamLeadersMembers();
//alert(teamLeaders);
  // for each zone
  var zonesWithNewMemberInMultipleZone=zonesWNMIMZS.split('~');
  var html='';
  html+='EMail notification for:';
  var j=0;
  var zone, zoneNewMembers, zoneTeamLeadersIx;
  var to, cc, text, tmp, subject, url;
  for (var i=0;i<zones.length;i++) {
    zone=zones[i];
    //zoneMembers=Members4Zone(NewMembers,zone);
    zoneMembers=Members4Zone(newMembers,zone);
    zoneTeamLeaders=Members4Zone(teamLeaders,zone);
  // get team leaders for each zone: name, email, tel
  // prepare emmail to: team leaders, cc: members
  //  with new members data: name, address, email, tel
    // to
     var teamLeadersText='';
     to='';
     for (j=0;j<zoneTeamLeaders.length;j++) {
       //if (j>0) to+=', ';
       tmp=zoneTeamLeaders[j][indexEMail];
       if (tmp!=null && tmp.length>4) {
         if (to.length>0) to+=', ';
         to+=tmp;
       };
       teamLeadersText+='\n';
       teamLeadersText+=' - '+zoneTeamLeaders[j][indexLastName];
       teamLeadersText+=' '+zoneTeamLeaders[j][indexFirstName];
       teamLeadersText+=', '+zoneTeamLeaders[j][indexAddress];
       teamLeadersText+=', '+zoneTeamLeaders[j][indexCity];
       teamLeadersText+=', '+zoneTeamLeaders[j][indexState];
       if (zoneTeamLeaders[j][indexZip]==null) zoneTeamLeaders[j][indexZip]='';
       teamLeadersText+=', '+zoneTeamLeaders[j][indexZip];
       if (zoneTeamLeaders[j][indexPhoneHome]==null) zoneTeamLeaders[j][indexPhoneHome]='';
       teamLeadersText+=', '+zoneTeamLeaders[j][indexPhoneHome];
       if (zoneTeamLeaders[j][indexEMail]==null) zoneTeamLeaders[j][indexEMail]='';
       teamLeadersText+=', '+zoneTeamLeaders[j][indexEMail];
       //if (zoneTeamLeaders[j][indexSpecialSkills]==null) zoneTeamLeaders[j][indexSpecialSkills]='';
       //teamLeadersText+=', '+zoneTeamLeaders[j][indexSpecialSkills];
     };
     if (teamLeadersText=='') teamLeadersText='\n - no team leaders - ';
     cc='';
     for (j=0;j<zoneMembers.length;j++) {
       //if (j>0) cc+=',';
       tmp=zoneMembers[j][indexEMail];
       //if (tmp!=null && tmp!='') cc+=tmp;
       if (tmp!=null && tmp.length>4) {
         if (cc.length>0) cc+=', ';
         cc+=tmp;
       };
     };
     cc+=', '+ZonesPageMailEmail;
     subject='New Members for '+EMailSubjectTitle+' '+zone;
     //text=subject+'\n';
     text='New Members for '+EMailSubjectTitle+' '+zone+'\n';
     for (j=0;j<zoneMembers.length;j++) {
       text+='\n';
       text+=' - '+zoneMembers[j][indexLastName];
       text+=' '+zoneMembers[j][indexFirstName];
       text+=', '+zoneMembers[j][indexAddress];
       text+=', '+zoneMembers[j][indexCity];
       text+=', '+zoneMembers[j][indexState];
       if (zoneMembers[j][indexZip]==null) zoneMembers[j][indexZip]='';
       text+=', '+zoneMembers[j][indexZip];
       if (zoneMembers[j][indexPhoneHome]==null) zoneMembers[j][indexPhoneHome]='';
       text+=', '+zoneMembers[j][indexPhoneHome];
       if (zoneMembers[j][indexEMail]==null) zoneMembers[j][indexEMail]='';
       text+=', '+zoneMembers[j][indexEMail];
       if (zoneMembers[j][indexSpecialSkills]==null) zoneMembers[j][indexSpecialSkills]='';
       text+=', '+zoneMembers[j][indexSpecialSkills];
     };
     // Team Leaders
     text+='\n';
     text+='\nTeam Leaders';
     text+=teamLeadersText;
     // Zone Meeting Places
     // web site
     //text+='\n\n'+ZonesMapsURL;
     text+='\n\n'+PagesURL;
     //alert(to+'\n'+cc+'\n'+subject+'\n'+text);
     text=text.replace(/\n/g,'%0D');
     url='mailto:'+to+'&cc='+cc+'&subject='+subject+'&body='+text;
     //-html+='<br/>'+'<a href="'+url+'">'+zone+'</a> ('+zoneMembers.length+')';
     //-html+='<br/>'+'<a href="'+url+'">'+zone+'</a> ';
     html+='<br/>'+'<a href="'+url+'" style="font-family:webdings;text-decoration:none;">i</a> ';

     text=text.replace(/\'/g,'-');
     text=text.replace(/\"/g,'-');
     text=text.replace(/%0D/g,'\\n');
     //url='<a href="javascript:OpenEMailWindow(\''+to+'\',\''+subject+'\',\''+text+'\',\''+cc+'\');" style="text-decoration:none">~</a>';
     url=' <a href="javascript:OpenEMailWindow(\''+to+'\',\''+subject+'\',\''+text+'\',\''+cc+'\');" style="text-decoration:none">'+zone+'</a> ';
//alert(url);
     html+=url;

     if (zonesWNMIMZS.indexOf('~'+zone+'~')>=0) html+='<font color="red">';
     html+='('+zoneMembers.length+')';
     if (zonesWNMIMZS.indexOf('~'+zone+'~')>=0) html+=' *</font>';

     //window.open(url);
  };
  if (zones.length<1) html+='<br/> - no zones -';
  return html;
};


function ShowNewMembersNotificationEMails() {
  if (NewMembers.length<1) {
    alert('no new members identified');
    return;
  };
  var html=NewMembersNotificationEMailsHTML();
  var div=document.getElementById('NotificationEMails');
  div.innerHTML=html;
};



// override

function ZonesListHTMLall(zones) {
  return '';
};


//-- /new members


