var request1 = createRequest();
var request2 = createRequest();

function call(theAction, item) {
   var selected_value = "0";
   var item_id = "";
   link = "no";
   if (typeof item == 'string') {
      selected_value = item;
      c = item.split("_");
      if (c[0] == "country") {
         item_id = "country";
         selected_value = c[1];
         link = "yes";
      } else if (c[0] == "state") {
         item_id = "state";
         selected_value = c[1];
         link = "yes";
      } else {
         item_id = "state";
      }
   } else {
      var selected = find_selected(item);
      selected_value = selected.value;
      item_id = item.id;
   }
   // clear appropriate things
   switch (item_id) {
      case "regionID":
//      if (selected_value == "0") { off for bug 182
         toggleDiv("otherMapContainer", false);
         toggleDiv("worldMapContainer", true);
//      }
      toggleDiv("countrySelect", false);
      var countrySelect = document.getElementById("country");
      clear_all_children(countrySelect);
      if (document.getElementById('countryName')) {
         document.getElementById('countryName').innerHTML = '';
      }
      case "country":
//      if (item_id != "regionID") { off for bug 182
         toggleDiv("worldMapContainer", false);
//         toggleDiv("otherMapContainer", true); off for bug 182
//      }
      toggleDiv("stateSelect", false);
      var stateSelect = document.getElementById("state");
      clear_all_children(stateSelect);
      default:
      toggleDiv("dealerContainer", false);
      var dealerContainer = document.getElementById("dealerContainer");
      clear_all_children(dealerContainer);
   }

   // IE hack requirment
   clear_all_children(dealerContainer);

   if (selected_value == "0" && item_id == "state") {
//      toggleDiv("otherMapContainer", true); off for bug 182
      toggleDiv("worldMapContainer", false);
   }

   if (selected_value != '0') {
      if (item_id == "regionID") {
         set_map(selected_value);
      }
      if (item_id == "state") {
         var data = {
            action: 'getDealers'
         };
         if (typeof item == 'string') {
            if (link == "yes") {
               data.country = document.getElementById('countryName').innerHTML;
               data.state = selected_value;
               document.getElementById('state').value = selected_value;
            } else {
               data.country = selected_value;
               data.state = "";
            }
         } else {
            if (selected_value == "0") {
               toggleDiv("dealerContainer", false);
//               toggleDiv("otherMapContainer", true); off for bug 182
            }
            var countrySelect = document.getElementById("country");
            var selected_country = find_selected(countrySelect);
            data.country = selected_country.value;
            data.state = selected_value;
         }
         request1.open("POST", AJAXurl, true);
         request1.onreadystatechange = show_dealers3;
      } else {
         if (theAction == 'getStates' && link == "yes") {
            document.getElementById('country').value = selected_value;
         }
         var data = {
            action: theAction,
            id: selected_value
         };

         // MMA: Programming starts out as grand architecture. Somewhere along the way it turns into plumbing.
         switch (selected_value) {
            case "1":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "North America";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Nordamerika";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "L'Am\u00e9rique du nord";
                     break;
               }
               break;
            case "2":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "Europe";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Europa";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "L'Europe";
                     break;
               }
               break;
            case "3":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "Asia";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Asien";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "L'Asie";
                     break;
               }
               break;
            case "4":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "Australia and New Zealand";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Australien und Neuseeland";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "L'Australie et la Nouvelle Z\u00e9lande";
                     break;
               }
               break;
            case "5":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "Middle East";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Mittlere Osten";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "Moyen-est";
                     break;
               }
               break;
            case "7":
               switch (document.getElementById("current_language_id").value) {
                  case "1":
                     document.getElementById("regionName").innerHTML = "Africa";
                     break;
                  case "2":
                     document.getElementById("regionName").innerHTML = "Afrika";
                     break;
                  case "3":
                     document.getElementById("regionName").innerHTML = "Afrique";
                     break;
               }
               break;
            default:
               document.getElementById("countryName").innerHTML = selected_value;
         }
         request1.open("POST", AJAXurl, true);
         request1.onreadystatechange = call_back;
      }
      var postData = 'data='+escape(ObjectToJSONString(data));
      request1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      request1.send(postData);
   }
}

function set_map(id) {
   var url = AJAXurl + "?action=getRegionMap&id=" + id;
   request2.open("GET", url, true);
   request2.onreadystatechange = map_callback;
   request2.send(null);
}

function map_callback() {
   if (request2.readyState == 4) {
      if (request2.status == 200) {
         var resp = request2.responseText;
         var imagePath = "images/" + resp;
//         swap_image("otherMap", imagePath); off for bug 182
//         toggleDiv("otherMapContainer", true); off for bug 182
         toggleDiv("worldMapContainer", false);
      } else {
         alert("Bad Status " + request2.status);
      }
   }
}

function call_back() {
   if (request1.readyState == 4) {
      if (request1.status == 200) {
         var resp = request1.responseText;
         // hack!  don't know why it gets here, but sometimes it gets to here and not show_dealers3
         // it looks good on line 92 - request1.onreadystatechange = show_dealers3;
         // but goes there instead!
         if (resp.substring(0,13) == "[{\"dealerID\":") {
            show_dealers3();
            return
         }
         var result = resp.parseJSON();
         var type = result.type;
         var divName = type + "Select";
         document.getElementById("details").innerHTML = "";
         var id = result.id;
         var theSelect = document.getElementById(type);
         var options = result.data;
         var numChildNodes = options.length;
         if (numChildNodes != 0) {
            clear_all_children(theSelect);
            theSelect[0] = document.createElement("option");
            theSelect[0].value = '0';
            switch (document.getElementById("current_language_id").value) {
               case "1":
                  var selectOne = "Select One";
                  break;
               case "2":
                  var selectOne = "Ausw\u00e4hlen";
                  break;
               case "3":
                  var selectOne = "En s\u00e9lectionner un";
                  break;
            }
            newItem = document.createTextNode("- - "+selectOne+" - -");
            theSelect[0].appendChild(newItem);
            if (numChildNodes != 0) {
               for (var i = 0; i < numChildNodes; i++) {
                  var item = options[i];
                  var link = '';
                  if (type == "country") {
                     link = '<a style="cursor:pointer;" onclick="call(\'getStates\', \'country_' + item + '\')";>';
                  } else if (type == "state") {
                     link = '<a style="cursor:pointer;" onclick="call(\'getDealers\', \'state_' + item + '\')";>';
                  }
                  document.getElementById("details").innerHTML = document.getElementById("details").innerHTML + link + item + "</a> &raquo; <BR><BR>";
                  theSelect[i+1] = document.createElement("option");
                  theSelect[i+1].value = item;
                  newItem = document.createTextNode(item);
                  theSelect[i+1].appendChild(newItem);
               }
            }
            toggleDiv(divName, true);
         } else {
            call('getDealers', id);
         }
      } else {
         alert("Bad Status " + request1.status);
      }
   }
}

function set_region(id) {
   var regionsSelect = document.getElementById("regionID");
   set_selected(regionsSelect, id);
   call('getCountries', regionsSelect);
}

function show_dealers() {
   if (request1.readyState == 4) {
      if (request1.status == 200) {
         var encoded_dealers = request1.responseText;
         var dealers = encoded_dealers.parseJSON();
         var dealerContainer = document.getElementById("dealerContainer");
         clear_all_children(dealerContainer);
         h5 = document.createElement("h5");
         if (dealers[0].dealerState != "") {
            title = document.createTextNode(dealers[0].dealerState);
         } else {
            title = document.createTextNode(dealers[0].dealerCountry);
         }
         h5.appendChild(title);
         dealerContainer.appendChild(h5);
         var table = document.createElement('table');
         dealerContainer.appendChild(table);
         table.setAttribute("cellpadding", "5");
         var limit = dealers.length;
         for (var i = 0; i < limit; i++) {
            var curr = dealers[i];
            if (i % 2 == 0) {
               var newTR = document.createElement("tr");
               var newTD = document.createElement("td");
               newTD.setAttribute("colspan", "3");
               var newText = document.createTextNode(" ");
               newTD.appendChild(newText);
               newTR.appendChild(newTD);
               table.tBodies[0].appendChild(newTR);
               tr = document.createElement("tr");
               table.appendChild(tr);
            } else {
               var newTD = document.createElement("td");
               newTD.setAttribute("width", "150");
               var newText = document.createTextNode(" ");
               newTD.appendChild(newText);
               tr.appendChild(newTD);
            }
            var dealerTD = generate_dealer_html(curr);
            tr.appendChild(dealerTD)
         }
//         toggleDiv("otherMapContainer", false); off for bug 182
         toggleDiv("worldMapContainer", false);
//         toggleDiv("dealerContainer", true); off for bug 182
      } else {
         alert("Bad Status " + request3.status);
      }
   }
}

function generate_dealer_html(dealer) {
   var cmSpan = document.createElement("span");
   cmSpan.setAttribute("class", "cm");
   if (dealer.dealerCM == "true") {
      var newText = document.createTextNode(" [ CM ]");
   } else {
      var newText = document.createTextNode("");
   }
   cmSpan.appendChild(newText);
   var zipText = "";
   if (dealer.dealerZip != "0") {
      zipText = dealer.dealerZip;
   }
   var dealerTD = document.createElement("td");
   var dealerNameContainer = document.createElement("strong");
   var dealerNameText = document.createTextNode(dealer.dealerName);
   dealerNameContainer.appendChild(dealerNameText);
   dealerTD.appendChild(dealerNameContainer);
   dealerTD.appendChild(cmSpan);
   var br = document.createElement("br");
   dealerTD.appendChild(br);
   if (dealer.dealerAddress != "") {
      var address = document.createTextNode(dealer.dealerAddress);
      dealerTD.appendChild(address);
      var br = document.createElement("br");
      dealerTD.appendChild(br);
   }
   var newText = dealer.dealerCity + ", " + dealer.dealerState + "  " + zipText;
   var textElement = document.createTextNode(newText);
   dealerTD.appendChild(textElement);
   var br = document.createElement("br");
   dealerTD.appendChild(br);
   var countryText = document.createTextNode(dealer.dealerCountry);
   dealerTD.appendChild(countryText);
   var br = document.createElement("br");
   dealerTD.appendChild(br);
   if (dealer.dealerPhone != "") {
      var phoneText = document.createTextNode("Phone: " + dealer.dealerPhone);
      dealerTD.appendChild(phoneText);
      var br = document.createElement("br");
      dealerTD.appendChild(br);
   }
   if (dealer.dealerURL != "") {
      var urlText = document.createTextNode(dealer.dealerURL);
      var link = document.createElement("a");
      var href = "http://" + dealer.dealerURL;
      link.setAttribute("href", href);
      link.setAttribute("target", "_blank");
      link.appendChild(urlText);
      dealerTD.appendChild(link);
      var br = document.createElement("br");
      dealerTD.appendChild(br);
   }
   if (dealer.googleLink != "") {
      //var br = document.createElement("br");
      //dealerTD.appendChild(br);
      var urlText = document.createTextNode("Get Directions >>");
      var link = document.createElement("a");
      link.setAttribute("href", dealer.googleLink);
      link.setAttribute("target", "_blank");
      link.appendChild(urlText);
      dealerTD.appendChild(link);
   }
   return dealerTD;
}

//IE Hacks
function show_dealers2() {
   if (request1.readyState == 4) {
      if (request1.status == 200) {
         var encoded_dealers = request1.responseText;
         var dealers = encoded_dealers.parseJSON();
         var dealerContainer = document.getElementById("dealerContainer");
         clear_all_children(dealerContainer);
         h5 = document.createElement("h5");
         if (dealers[0].dealerState != "") {
            title = document.createTextNode(dealers[0].dealerState);
         } else {
            title = document.createTextNode(dealers[0].dealerCountry);
         }
         h5.appendChild(title);
         dealerContainer.appendChild(h5);
         var table = document.createElement("table");
         table.setAttribute("cellpadding", "5");
         dealerContainer.appendChild(table);
         /*
         var limit = dealers.length;
         for (var i = 0; i < limit; i++) {
         var curr = dealers[i];
         if (i % 2 == 0) {
         var newTR = document.createElement("tr");
         newTR.appendChild(newTD);
         table.appendChild(newTR);

         tr = document.createElement("tr");
         table.appendChild(tr);
         } else {
         var newTD = document.createElement("td");
         newTD.setAttribute("width", "150");
         var newText = document.createTextNode(" ");
         newTD.appendChild(newText);
         tr.appendChild(newTD);
         }
         var dealerTD = generate_dealer_html(curr);
         tr.appendChild(dealerTD)
         }
         */
         var newTR = document.createElement("tr");
         var newTD = document.createElement("td");
         newTD.setAttribute("colspan", "3");
         var newText = document.createTextNode(" ");
         newTD.appendChild(newText);
         newTR.appendChild(newTD);
         table.appendChild(newTR);
         tr = document.createElement("tr");
         table.appendChild(tr);
         var newTD = document.createElement("td");
         newTD.setAttribute("colspan", "3");
         var newText = document.createTextNode("Dealer Here");
         var newSPAN = document.createElement("span");
         var newText = document.createTextNode("&nbsp;");
         newSPAN.appendChild(newText);
//         toggleDiv("otherMapContainer", false); off for bug 182
         toggleDiv("worldMapContainer", false);
         toggleDiv("dealerContainer", true);
      } else {
         alert("Bad Status " + request3.status);
      }
   }
}

function show_dealers3() {
   if (request1.readyState == 4) {
      if (request1.status == 200) {
         var encoded_dealers = request1.responseText;
         var dealers = encoded_dealers.parseJSON();
         var dealerContainer = document.getElementById("dealerContainer");
         clear_all_children(dealerContainer);
         dealerContainer.innerHTML = '';
         h5 = document.createElement("h5");
         if (dealers[0].dealerState != "") {
            title = document.createTextNode(dealers[0].dealerState);
         } else {
            title = document.createTextNode(dealers[0].dealerCountry);
         }
         h5.appendChild(title);
         dealerContainer.appendChild(h5);
         /*
         p = document.createElement("p");
         stuff = document.createTextNode(dealers[0].dealerState);
         p.appendChild(stuff);
         dealerContainer.appendChild(p);
         */
         var limit = dealers.length;
         for (var i = 0; i < limit; i++) {
            var curr = dealers[i];
            span = document.createElement("span");
            span.setAttribute("class", "dealerSpan");
            stuff = generate_dealer_html2(curr);
            //stuff = document.createTextNode(dealers[0].dealerState);
            span.appendChild(stuff);
            dealerContainer.appendChild(span);
         }
//         toggleDiv("otherMapContainer", false);
         toggleDiv("worldMapContainer", false);
         toggleDiv("dealerContainer", true);
      } else {
         alert("Bad Status " + request3.status);
      }
   }
}

function generate_dealer_html2(dealer) {
   var cmSpan = document.createElement("span");
   cmSpan.setAttribute("class", "cm");
   if (dealer.dealerCM == "true") {
      var newText = document.createTextNode(" [ CM ]");
   } else {
      var newText = document.createTextNode("");
   }
   cmSpan.appendChild(newText);
   var zipText = "";
   if (dealer.dealerZip != "0") {
      zipText = dealer.dealerZip;
   }
   var dealerSPAN = document.createElement("span");
   var dealerNameContainer = document.createElement("strong");
   var dealerNameText = document.createTextNode(dealer.dealerName);
   var br = document.createElement("br");
   dealerSPAN.appendChild(br);
   dealerNameContainer.appendChild(dealerNameText);
   dealerSPAN.appendChild(dealerNameContainer);
   dealerSPAN.appendChild(cmSpan);
   var br = document.createElement("br");
   dealerSPAN.appendChild(br);
   if (dealer.dealerAddress != "") {
      var address = document.createTextNode(dealer.dealerAddress);
      dealerSPAN.appendChild(address);
      var br = document.createElement("br");
      dealerSPAN.appendChild(br);
   }
   var newText = dealer.dealerCity + ", " + dealer.dealerState + "  " + zipText;
   var textElement = document.createTextNode(newText);
   dealerSPAN.appendChild(textElement);
   var br = document.createElement("br");
   dealerSPAN.appendChild(br);
   var countryText = document.createTextNode(dealer.dealerCountry);
   dealerSPAN.appendChild(countryText);
   var br = document.createElement("br");
   dealerSPAN.appendChild(br);
   if (dealer.dealerPhone != "") {
      var phoneText = document.createTextNode("Phone: " + dealer.dealerPhone);
      dealerSPAN.appendChild(phoneText);
      var br = document.createElement("br");
      dealerSPAN.appendChild(br);
   }
   if (dealer.dealerURL != "") {
      var urlText = document.createTextNode(dealer.dealerURL);
      var link = document.createElement("a");
      var href = "http://" + dealer.dealerURL;
      link.setAttribute("href", href);
      link.setAttribute("target", "_blank");
      link.appendChild(urlText);
      dealerSPAN.appendChild(link);
      var br = document.createElement("br");
      dealerSPAN.appendChild(br);
   }
   if (dealer.googleLink != "") {
      //var br = document.createElement("br");
      //dealerSPAN.appendChild(br);
      var urlText = document.createTextNode("Get Directions >>");
      var link = document.createElement("a");
      link.setAttribute("href", dealer.googleLink);
      link.setAttribute("target", "_blank");
      link.appendChild(urlText);
      dealerSPAN.appendChild(link);
      var br = document.createElement("br");
      dealerSPAN.appendChild(br);
   }
   return dealerSPAN;
}