// Row-by-row format for multiple list options
//
// Use the following format to include this script on your webpage within the <BODY>:
//     <script language="JavaScript">
//         var db = new Array;
//         <%
//            i = 0
//            do while i < max
//               response.write "db[" & i & "] = '" & db(i) & "';"
//               i = i + 1
//            loop
//         %>
//         security = "MEMBER";  // REPLACE WITH DESIRED SECURITY LEVEL
//         listtype = "NAME";    // REPLACE WITH DESIRED LIST TYPE
//         loRange = "";         // REPLACE WITH DESIRED LOW RANGE
//         hiRange = "";         // REPLACE WITH DESIRED HIGH RANGE
//         printable = false;    // REPLACE WITH true IF THIS IS TO BE A PRINTER-FRIENDLY PAGE
//     </script>
//     <script language="JavaScript" src="include/RowBuilder.js"></script>
//
// Parameters passed from calling module: listtype, security, loRange, hiRange, printable

var bgColorCountry, bgColorCity, bgColorName, myFormattedName, myUnformattedName, myGlobe, myHOsuffix, mySpecialty, myMailTo;
var security, listtype, loRange, hiRange, printable;

// Database index keys follow:
var iAppStat = 0;            //application status (not yet a member)
var iFM = 1;                 //founding member
var iAA = 2;                 //signed agency agreement
var iClientProfileURL = 3;   //client profile URL
var iRating = 4;             //1=white star; 2=blue star; 3=green star
var iVotes = 5;              //accumulated survey votes
var iSkype = 6;              //has Skype account ("yes")
var iPangaea = 7;            //has Pangaea account ("yes")
var iSpecialty = 8;          //T=tradeshow; P=project; H=household; C=courier; V=vehicles; S=slowpayer
var iName = 9;
var iProfileURL = 10;
var iPricingURL = 11;
var iBankingURL = 12;
var iCountry = 13;
var iRegion = 14;
var iHO = 15;                //head office
var iCity = 16;
var iMaxRepCountry = 17;
var iMaxRep = 18;
var iContact = 19;
var iAddr1 = 20;
var iAddr2 = 21;
var iAddr3 = 22;
var iAddr4 = 23;
var iPhone = 24;
var iFax = 25;
var iEmail = 26;
var iEmail2 = 27;
var iCCList = 28;
var iNoAlerts = 29;

// Some of above database keys also appear in postBulletin.asp and ASPconstants.inc ASP scripts.

// Region ordinal values
var oRegion = new Array();
oRegion[0] = "North America";
oRegion[1] = "Latin America and Caribbean";
oRegion[2] = "Asia Pacific";
oRegion[3] = "Middle East, Africa and South Asia";
oRegion[4] = "Europe";

var pathProfURL = 'http://www.globalinknetwork.com/member_profiles/';
var numtest = /[0-9]/;
var alphaAnchor = " ";
var starCode = "wbg";
var myString = new String;
var myData = new Array;
var myIndex = new Array;

//
// SortBy() fourth sort parameter added 5/05/2008 by J Gruberman
//
function SortBy(first, second, third, fourth, loRange, hiRange)
{
// ============================================================
// Build a sort key and use it to access db with sort pointers.   
// ============================================================
   myIndex[0] = '#0';
   for (var i = 1; i < db.length; i++)
   {
      myData = ParseToArray(i);
	if (first == iRegion)
      {
         for (var ii = 0; ii < oRegion.length; ii++)
         {
            if (myData[first] == oRegion[ii])    // convert region to ordinal value defined by iRegion array (table)
            {
               myData[first] = ii;
            }
         }
         if (!numtest.test(myData[first]))
         {
            myData[first] = 99;                  // default sort to end if no region found
         }
      }
      myIndex[i] = myData[first] + "  " + myData[second] + "  " + myData[third] + "  " + myData[fourth] + "  #" + i;
   }
   myIndex.sort();
// ============================================================
// Reduce sorted index to elements between loRange and hiRange.
// ============================================================
   if (loRange > "")
   { 
      for (i = 1; i < myIndex.length; i++)
      {
         if (myIndex[i].substring(0,loRange.length) < loRange)
         {
            var throw_away = myIndex.splice(i,1);
            i = i - 1;
         } 
      }
   }
   if (hiRange > "")
   { 
      for (i = 1; i < myIndex.length; i++)
      {
         if (myIndex[i].substring(0,hiRange.length) > hiRange)
         {
            var throw_away = myIndex.splice(i,1);
            i = i - 1;
         } 
      }
   }
}

function ParseToArray(indx)
{
// ================================================
// FIX DELIMITERS AND PARSE ROW OF DATA TO AN ARRAY
// ================================================
   myString = db[indx];                        // get a row
   myString = myString + ',,,,,,,,,,,,,,,';    // trailing commas eliminate undefined fields
   myString = myString.replace(/,/g,'~');      // isolate commas
   myString = myString.replace(/~"~/g,',"~');  // retrieve trailing commas
   myString = myString.replace(/~ /g,', ');    // retrieve embedded commas
   myString = myString.replace(/"/g,'');       // remove double quotes
   myString = myString.replace(/`/g,"'");      // replace accent with single quotes
   return myString.split('~');                 // unstring into an array
}

function BuildRowMembersByName()
{
// ======================================
// WRITE A FORMATTED ROW: MEMBERS BY NAME
// ======================================
   document.write('<tr>');
   TD_is_Name();
   TD_is_FM();
   TD_is_Rating();
   TD_is_City();
   TD_is_Country();
   document.write('</tr>');
}

function BuildRowMembersByCity()
{
// ======================================
// WRITE A FORMATTED ROW: MEMBERS BY CITY
// ======================================
   document.write(RowBreak);
   document.write('<tr>');
   TD_is_City();
   TD_is_Country();
   TD_is_Name();
   TD_is_FM();
   TD_is_Rating();
   document.write('</tr>');
}

function BuildRowMembersByRegion()
{
// ========================================
// WRITE A FORMATTED ROW: MEMBERS BY REGION
// ========================================
   document.write(RowBreak);
   document.write('<tr>');
   TD_is_Country();
   TD_is_City();
   TD_is_Name();
   TD_is_FM();
   TD_is_Rating();
   document.write('</tr>');
}

function TD_is_Region()   // this used strictly for testing...we never actual print the region in a row
{
// =================================
// GENERIC DIRECTORY FORMAT: REGION 
// =================================
   document.write('<td valign="top" align="center"><font size="2" face="Tahoma" color="#000080"><b>' + myData[iRegion] + '</b></font></td>');
}

function TD_is_Country()
{
// =================================
// GENERIC DIRECTORY FORMAT: COUNTRY 
// =================================
   document.write('<td valign="top" ' + bgColorCountry + 'align="center"><font size="2" face="Tahoma" color="#000080"><b>' + myData[iCountry] + '</b></font>');
   document.write('<font face="Tahoma" color="#000080" size="1"> ' + myData[iMaxRepCountry] + '</font></td>');
}

function TD_is_City()
{
// ==============================
// GENERIC DIRECTORY FORMAT: CITY
// ==============================
   document.write('<td valign="top" ' + bgColorCity + '><p align="center">');
   if (listtype == "CITY" && myData[iCity].charAt(0) > alphaAnchor)
   {
      alphaAnchor = myData[iCity].charAt(0);
      document.write('<a name="goto' + alphaAnchor + '"></a>');
   } 
   document.write('<font size="2" face="Tahoma" color="#000080"><b>' + myData[iCity] + '</b></font>');
   document.write('<font face="Tahoma" color="#000080" size="1"> ' + myData[iMaxRep] + '</font></td>');
}

function TD_is_Rating()
{
// ======================================================
// GENERIC DIRECTORY FORMAT: RATING (STAR) AND VOTE COUNT
// ======================================================
   if (security == "MEMBER")
   {
      document.write('<td valign="top" align="center">' + myData[iRating] + '</td>');
   }
}

function TD_is_FM()
{
// ==================================================
// GENERIC DIRECTORY FORMAT: FOUNDING MEMBER INSIGNIA
// ==================================================
   document.write('<td valign="top" align="center">' + myGlobe + '</td>');
}

function TD_is_Name()
{
// ==============================
// GENERIC DIRECTORY FORMAT: NAME
// ==============================
   document.write('<td valign="top"' + bgColorName + '>');
   if (listtype == "NAME" && myUnformattedName.charAt(0) > alphaAnchor)
   {
      alphaAnchor = myUnformattedName.charAt(0);
      document.write('<a name="goto' + alphaAnchor + '"></a>');
   } 
   document.write('<font size="2" face="Tahoma" color="#000080"><b>' + myData[iName] + '</b>');
   if (security == "MEMBER" || security == "CLIENT")
   {
      document.write(myData[iAddr1]);
      document.write(myData[iPhone]);
      document.write(myData[iFax]);
      document.write(myData[iEmail]);
   }
   if ( security == "MEMBER" && ( myData[iPricingURL] != "" || myData[iBankingURL] != "" || myData[iSkype] != "" || myData[iPangaea] != "" || myData[iSpecialty] != "") && printable != true )
   {
      document.write('<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" bgcolor="#F4F4F4" bordercolor="#C0C0C0">');
      document.write('  <tr>');
      document.write('    <td width="25%" align="center">');
      document.write('       <font color="#0066CC" size="2"><b>' + myData[iPricingURL] + '</b></font>');
      document.write('    </td>');
      document.write('    <td width="25%" align="center">');
      document.write('       <font color="#0066CC" size="2"><b>' + myData[iBankingURL] + '</b></font>');
      document.write('    </td>');
      document.write('    <td width="25%" align="center">');
      document.write(mySpecialty);
      document.write('    </td>');
      document.write('    <td width="25%" align="center">');
      document.write(myData[iSkype]);
      document.write(myData[iPangaea]);
      document.write('    </td>');
      document.write('  </tr>');
      document.write('</table>');
   }
   document.write('</font></td>');
}


// ===========================
// MAIN SCRIPT STARTS HERE!!!
// ===========================

//
// SortBy() fourth sort parameter added 5/05/2008 by J Gruberman
// iName in Region sort is the only significant fourth sort parameter
//
// ==========================
// SPECIFY LIST TYPE AND SORT
// ==========================
   if (listtype == "NAME")
   {
      SortBy(iName,iCountry,iCity,iFM,loRange,hiRange);
   }
   if (listtype == "CITY")
   {
      SortBy(iCity,iCountry,iName,iFM,loRange,hiRange);
   }
   if (listtype == "REGION")
   {
      SortBy(iRegion,iCountry,iCity,iName,loRange,hiRange);
   }

// ===============================================
// LOOP THROUGH ENTIRE ARRAY, SKIPPING HEADING ROW
// ===============================================
   for (var i = 1; i < myIndex.length; i++)
   {

// ===========
// Apply Rules
// ===========

// =================================
// Get previous row and current row.
// =================================
      var i1 = myIndex[i-1].substr(myIndex[i-1].lastIndexOf("#") + 1);
      var i2 = myIndex[i].substr(myIndex[i].lastIndexOf("#") + 1);
      myPrev = ParseToArray(i1);
      myData = ParseToArray(i2);

// ===============================================
// If this is a founding member, display an image.
// ===============================================
      myGlobe = '';
      if (myData[iFM] == "F")
      {
         myGlobe = '<p align="center"><img border="0" src="image/FM2.jpg" width="32" height="20">';
      }

// ==========================================
// If this is the head office, indicate that.
// ==========================================
      myHOsuffix = '';
      if (myData[iHO] > "")
      {
         myHOsuffix = " - Head Office";
      }

// ==========================================
// If this company has a profile, link to it.
// ==========================================
      myFormattedName = myData[iName];     //prepare to format
      myUnformattedName = myData[iName];   //preserve original
      if ((security == "MEMBER" && myData[iProfileURL] != "") || (security == "CLIENT" && myData[iProfileURL] != "" && myData[iClientProfileURL] == ""))
      {
         myFormattedName = '<a target="_blank" href="' + pathProfURL + myData[iProfileURL] + '_pro.html">' + myData[iName] + '</a>' + myHOsuffix;
      } else {
         if (security == "CLIENT" && myData[iClientProfileURL] != "")
         {
            myFormattedName = '<a target="_blank" href="' + pathProfURL + myData[iClientProfileURL] + '_pro_CL.html">' + myData[iName] + '</a>' + myHOsuffix;
         } else {
            myFormattedName = myData[iName] + myHOsuffix;
         }
      }
      myData[iName] = myFormattedName;

// =============================================
// If this company has pricing info, link to it.
// =============================================
      if (security == "MEMBER" && myData[iPricingURL])
      {
         myData[iPricingURL] = '<a target="_blank" href="' + pathProfURL + myData[iPricingURL] + '_pricing.html"><div style="color: #0066CC; font-size: 7pt; padding: 0 5 0 5">Pricing</div></a>';
      }

// ==========================================
// If this company has bank info, link to it.
// ==========================================
      if (security == "MEMBER" && myData[iBankingURL])
      {
         myData[iBankingURL] = '<a target="_blank" href="' + pathProfURL + myData[iBankingURL] + '_bank.html"><div style="color: #0066CC; font-size: 7pt; padding: 0 5 0 5">Banking/Payment</div></a>';
      }

// ==============================================================
// If this company has Skype info, link to the Skype member page.
// ==============================================================
      if (security == "MEMBER" && myData[iSkype])
      {
         myData[iSkype] = '<a target="_blank" href="Skype_Members_print.asp"><img border="0" src="image/skype.jpg"></a>';
      }

// ================================================================
// If this company has Pangaea info, link to the Skype member page.
// ================================================================
      if (security == "MEMBER" && myData[iPangaea])
      {
         myData[iPangaea] = '<a target="_blank" href="Skype_Members_print.asp"><img border="0" src="image/pangaea.jpg"></a>';
      }

// =================================================
// If this company has specialties, display an icon.
// =================================================
      mySpecialty = '';
      if (security == "MEMBER")
      {
         if (myData[iSpecialty].indexOf("T") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/Trade-Shows.jpg" alt="Trade Shows and Exhibitions">';
         }
         if (myData[iSpecialty].indexOf("P") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/Project.jpg" alt="Project Forwarding">';
         }
         if (myData[iSpecialty].indexOf("H") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/household.jpg" alt="Household Goods Moving">';
         }
         if (myData[iSpecialty].indexOf("C") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/Courier.jpg" alt="Courier Services">';
         }
         if (myData[iSpecialty].indexOf("V") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/Vehicles.jpg" alt="Vehicle Transportation">';
         }
         if (myData[iSpecialty].indexOf("S") != -1)
         {
            mySpecialty = mySpecialty + '<img border="0" src="image/icons/dollar-sign.jpg" alt="Slow Payer">';
         }
      }

// ==============================================================
// If this company has survey info, show rating.
// ==============================================================
      if (myData[iRating] > "0" && myData[iRating] < "4")
      {
         myData[iRating] = starCode.charAt(myData[iRating] - 1);
         myData[iRating] = '<img border="0" src="image/star-' + myData[iRating] + '.jpg"><br><span style="font-size: xx-small">' + myData[iVotes] + '</span>';
      }

// =====================================
// Concatenate and format address lines.
// =====================================
      if (myData[iAddr2] != "") 
      {
         myData[iAddr1] = myData[iAddr1] + '<br>' + myData[iAddr2];
      }
      if (myData[iAddr3] != "") 
      {
         myData[iAddr1] = myData[iAddr1] + '<br>' + myData[iAddr3];
      }
      if (myData[iAddr4] != "") 
      {
         myData[iAddr1] = myData[iAddr1] + '<br>' + myData[iAddr4];
      }
      if (myData[iAddr1] != "") 
      {
         myData[iAddr1] = '<br>' + myData[iAddr1];
      }

// ======================================
// Format optional phone/fax/email lines.
// ======================================
      if (myData[iPhone] != "")
      {
         myData[iPhone] = '<br>Phone: +' + myData[iPhone];
      }
      if (myData[iFax] != "")
      {
         myData[iFax] = '<br>Fax: +' + myData[iFax];
      }
      if (myData[iEmail] != "")
      {
         myData[iEmail] = '<br>Email: <a href="mailto:' + myData[iEmail] + '" style="text-decoration: underline; text-underline: single">' + myData[iEmail] + '</a>';
      }

// ============================================================================================
// If application status is "received" or "approved", reduce COMPANY information to name alone.
// ============================================================================================
      if (myData[iAppStat] == "R")
      {
         myData[iAppStat] = "(Application Received)"
      }
      if (myData[iAppStat] == "A")
      {
         myData[iAppStat] = "(Application Approved)"
      }
      if (myData[iAppStat] > " ")
      {
         myData[iName] = '<span style="color: #C0C0C0">' + myUnformattedName + '</span><span style="color: #C0C0C0; font-weight:700"><font size="1"> ' + myData[iAppStat] + '</font></span>';
         myData[iAddr1] = "";
         myData[iAddr2] = "";
         myData[iAddr3] = "";
         myData[iAddr4] = "";
         myData[iPricingURL] = "";
         myData[iBankingURL] = "";
         myData[iSkype] = ""; 
         myData[iPangaea] = ""; 
         myData[iSpecialty] = ""; 
         myData[iPhone] = "";
         myData[iFax] = "";
         myData[iEmail] = "";
         myData[iHO] = "";
      }

// =========================================
// Suppress duplicate Country and City data.
// =========================================
//    myData[iMaxRep] = '(' + myData[iMaxRep] + ')'; 
      myData[iMaxRep] = myData[iMaxRep]; 
//    myData[iMaxRepCountry] = myData[iMaxRepCountry];
      bgColorCity = 'bgcolor="#DEECF3" ';
      bgColorCountry = 'bgcolor="#E5E5E5" ';
// =================================================
// If same as previous country, leave country blank.
// =================================================
      if (myData[iCountry] == myPrev[iCountry])
      {
         RowBreak = '';
         myData[iCountry] = '';
         myData[iMaxRepCountry] = '';
         bgColorCountry = '';
// ============================================================
// If same country AND same as previous city, leave city blank.
// ============================================================
         if (myData[iCity] == myPrev[iCity])
         {
            myData[iCity] = '';
            myData[iMaxRep] = '';
            bgColorCity = '';
         }   
      }
      else 
      {
         RowBreak = '<tr><td height="10"></td><td height="10"></td><td height="10"></td><td height="10"></td></tr>';
      }
      if (i == 1)
      {
         RowBreak = '';
      }

// =================================
// Miscellaneous format adjustments.
// =================================
      if (security == "MEMBER")
      {
         bgColorCity = '';
      }
      if (listtype == "NAME")
      {
         myData[iMaxRep] = '';
      }
      bgColorName = '';

      if ((security == "MEMBER" || security == "CLIENT") && myData[iAA] == "X")
      {
         bgColorName = 'bgcolor="#EAF4FF" ';
      } else {
        if ((security == "MEMBER" || security == "CLIENT") && myData[iAA] == "B")
        {
           bgColorName = 'bgcolor="#FFDFDF" ';
        } else {
           bgColorName = '';
        }
      }

// ===================================
// Output a row in the desired format.
// ===================================
      if (listtype == "NAME")
      {
         BuildRowMembersByName();
      }
      if (listtype == "CITY")
      {
         BuildRowMembersByCity();
      }
      if (listtype == "REGION")
      {
         BuildRowMembersByRegion();
      }

   }
// ================
// END OF MAIN LOOP
// ================
