// clear form values
<!--
function clearDefault(el) {
   if (el.defaultValue==el.value) el.value = ""
}

function openDealerMap(url) {
    var map = window.open(url,'dealermap','scrollbars=yes,resizable=yes,menubar=yes,width=675,height=525');
    map.focus();
}

// -->

function fnLoadPngs() {
   if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) {
	var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
	var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5 &&  Number(rslt[1]) < 7);

	for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--) {
		if (itsAllGood && img.src.match(/\.png$/i) != null) {
			var src = img.src;
			var div = document.createElement("DIV");
			div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='crop')"
			div.style.width = img.width + "px";
			div.style.height = img.height + "px";
			div.style.textindent = 0;
			img.replaceNode(div);
		}
	}
   }
}

var ajaxUrl = "";
var searchZip = "";
var searchBrand = "";
var searchRadius = "25";
var searchSortBy = "";
var searchFilter = "";
var searchType = "";
var dealerFocus = "";

function ajaxRefresh(newSearchType) {
	//alert("in:ajaxRefresh");
   // active dealer results div
   //window.scrollTo(0,0);
   //document.getElementById("dealerresultsloading").style.display = "block";
   //document.getElementById("dealerresultswrapper").style.display = "none";
   searchSortBy = document.getElementById("searchSortBy").value;
   //searchRadius select object must exist
   searchRadius=document.getElementById("searchRadius").value;
   if (newSearchType != null && newSearchType != '') {
	   searchType = newSearchType;
   }
//alert("in:ajaxRefresh:\n searchType:" + searchType + "\n searchRadius:" + searchRadius);
    doAjaxRefresh();
   //ajaxRequest("dealersearchresults", "generatorDealerSearchMessage", "searchRadiusUsed");	
}

function doAjaxRefresh() {
   // active dealer results div
   window.scrollTo(0,0);
   document.getElementById("dealerresultsloading").style.display = "block";
   document.getElementById("dealerresultswrapper").style.display = "none";
   //searchSortBy=document.getElementById("searchSortBy").value;
   //searchRadius select object must exist
   //searchRadius=document.getElementById("searchRadius").value;
   //if (newSearchType != null && newSearchType != '') {
//	   searchType = newSearchType;
  // }
   ajaxRequest("dealersearchresults", "generatorDealerSearchMessage", "searchRadiusUsed");	
}

function clearPageState()
{
    document.getElementById("pageState").innerHTML = "";
} // endfunction

function updatePageState(message)
{
    var pageState = document.getElementById("pageState");
    pageState.innerHTML += message;
} // endfunction

function submitted()
{
    //alert("in:submitted");
    var sr = document.getElementById("notFoundSearchRadius");
    searchZip = document.getElementById("notFoundZipcode").value;
    var s = "zipcode=" + document.getElementById("notFoundZipcode").value + ", sr.options.length=" + sr.options.length;
    for (var i = 0; i < sr.options.length; i++) 
    {
        s += "," + i + ":" + sr.options[i].selected;
      if (sr.options[i].selected)
    {
      searchRadius = sr.options[i].value;
      break;
    } // endif
    } // endfor
   document.getElementById("searchZipContainer").innerHTML = searchZip;

    //alert(s);
    doAjaxRefresh();
    return false;
} // endfunction

function getDealerResults(showShortTitle) {
	//alert("in:getDealerResults");
	   var fapLogo = "<a id=\"fapLogo\" href=\"/dealers/authorizedparts.shtml\">"
		   + "<img src=\"/images/content/icn-deal-fapask.gif\" "
		   + "alt=\"Factory Authorized Parts\" />"
		   + "</a>"; 
	   //fapLogo = "";
	   //alert("in:getDealerResults");
   // get params
   var FORM_DATA = createRequestObject();
   searchZip = FORM_DATA["searchZip"];
   if(FORM_DATA["searchFilter"] != undefined) {
	   	searchFilter = FORM_DATA["searchFilter"];
	   }
   if(FORM_DATA["searchRadius"] != undefined) {
	   	searchRadius = FORM_DATA["searchRadius"];
	   }
   if(FORM_DATA["dealerFocus"] != undefined) {
	   	dealerFocus = FORM_DATA["dealerFocus"];
	   }
   else {dealerFocus = "";}
   searchBrand = "BR";
   var title;

   // check for home page zip
   if(FORM_DATA["zipcode"]) {
      searchZip = FORM_DATA["zipcode"];
   }

   //check the zip form data value if there is no searchZip value
   if (searchZip == null || searchZip == "") {
	   searchZip = FORM_DATA["zip"];
   }
    var searchZipContainer = "<span id=\"searchZipContainer\">" + searchZip + "</span>";
   // set form url
   document.getElementById("sortByForm").action = this.location;
   document.getElementById("searchZip").value = searchZip;
   document.getElementById("searchFilter").value = searchFilter;

   // generator search 
   if(searchFilter == "Generator") {
	   // reset radius
	   document.getElementById("searchRadius").options.length = 0;
	   document.getElementById("searchRadius").options[0] = new Option('50','50');
	   document.getElementById("searchRadius").options[1] = new Option('100','100');
	   document.getElementById("searchRadius").options[2] = new Option('200','200');

	  if (showShortTitle) {
		  title = "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  } else {
		  title = "<h1>Bryant Home Generator Dealer Locator</h1>"
		  + fapLogo + "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  }

      searchRadius = "50";
   // FAD
   } else if(searchFilter == "FADOnly") {
	  if (showShortTitle) {
		  title = "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  } else {
		  title = "<h1>Bryant Factory Authorized Dealer Locator</h1>"
			  + fapLogo + "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  }
      
       searchRadius = "25";
   // normal
   } else {
	  if (showShortTitle) {
		  title = "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  } else {
		  title = "<h1>Bryant Dealer Locator</h1>"
		  + fapLogo + "<h1>Dealers In Your Area &mdash; " + searchZipContainer + "</h1>";
	  }
      if (searchRadius == "") searchRadius = "25";
   }
 
   document.getElementById("dealerresultswrapper").innerHTML = title +  document.getElementById("dealerresultswrapper").innerHTML;

   ajaxRequest('dealersearchresults', 'generatorDealerSearchMessage', 'searchRadius'); 

   // set form url
   document.getElementById("sortByForm").action = this.location;
   if (searchFilter != "Generator") {
	   document.getElementById("searchRadius").value = searchRadius;
   }
}

var _xhr = null;
var _xhrTimeout = null;

function ajaxRequest(divId, generatorMessageDivId, searchRadiusUsedDivId)
{ 
	//alert("in:ajaxRequest");
   // get the results
   ajaxUrl = '/apps/dealerlocatorws.jsp?searchZip=' + searchZip + '&searchBrand=' + searchBrand + '&searchRadius=' + searchRadius;
   if((searchSortBy != undefined) && (searchSortBy != "Please Select")) {
	   ajaxUrl += "&searchSortBy=" + searchSortBy;
   }
   if((searchFilter != undefined) && (searchFilter != "undefined")) {
	   ajaxUrl += "&searchFilter=" + searchFilter;
   }
   if((searchType != undefined) && (searchType != "undefined")) {
	   ajaxUrl += "&searchType=" + searchType;
   }
   //alert("ajaxUrl=" + ajaxUrl);
    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();   }
          catch (e3) {  xhr = false;  }
        }
     }
    _xhr = xhr;
    xhr.onreadystatechange  = function()
    { 
         if(xhr.readyState  == 4)
         {
              if(xhr.status  == 200) {
            	  
            	  try {
            	   clearTimeout(_xhrTimeout);
            	  }
            	  catch (e) {alert("Exception:" + e);}
            	  
		  if(xhr.responseText.match(/Sorry, there are no dealers that match this criteria/)) 
          {
            //alert("No Dealers Found! searchZip=" + searchZip);
		  	document.getElementById("sortLabel").style.display = "none";
			//if(searchFilter != "Generator") {
				document.getElementById("searchRadiusLabel").style.display = "none";
			//}

			//another IE hack because IE is a terrible browser. This time it was messing up a simple select box.
			//All these hacks make it very finicky. But it works.
			if(searchFilter != "Generator") {
				var node = document.getElementById(divId);
				var parent = node.parentNode;
				//parent.appendChild(node);
			}
		  } 
            else
            {
                //alert("Dealers Found, searchRadius:" + searchRadius);
                setSelectedIndex(document.getElementById("searchRadius"),searchRadius);
				document.getElementById("searchRadiusLabel").style.display = "block";
    		  	document.getElementById("sortLabel").style.display = "block";

            } // endif

		  // populate div with dealer results
		  removeChildren(document.getElementById(divId));
		  var newDiv = document.createElement("div");
            //clearPageState();
            //updatePageState(xhr.responseText);
		  newDiv.innerHTML = xhr.responseText;
		  
		  document.getElementById(divId).appendChild(newDiv);
		  changeDollarSign(newDiv);
		  // extract the actual search radius used and the generator dealer locator message
		  if(searchFilter == "Generator") {
			  // this is how to extract the generator dealer message (if there is one)
			  if(document.getElementById('noGeneratorDealerMessage')) {
				  var noGeneratorDealerMessage = document.getElementById('noGeneratorDealerMessage').innerHTML;
				 
				  //alert('noGeneratorDealerMessage=' + noGeneratorDealerMessage);

				  if (noGeneratorDealerMessage != null && noGeneratorDealerMessage != '') {
					  document.getElementById(generatorMessageDivId).innerHTML = noGeneratorDealerMessage;
				  } else {
					  document.getElementById(generatorMessageDivId).innerHTML = '';
				  }
			  }
			  
				//update the 'searchRadius' select box, if it exists, to show the actual search radius used
				if (document.getElementById(searchRadiusUsedDivId) != null) {
                    //alert("found:" + searchRadiusUsedDivId);
					var searchRadiusUsed = document.getElementById(searchRadiusUsedDivId).innerHTML;
					var searchRadiusSelect = document.getElementById('searchRadius');
					if (searchRadiusSelect != null) {
						//go through each option and if it's value == searchRadiusUsed, set that as the select's selectedIndex
						for (index = 0; index < searchRadiusSelect.length; index++) {
							if (searchRadiusSelect[index].value == searchRadiusUsed) {
								searchRadiusSelect.selectedIndex = index;
							}
						}
					}
				}

		  }
      
		  // active dealer results div
		  document.getElementById("dealerresultsloading").style.display = "none";
		  document.getElementById("dealerresultswrapper").style.display = "block";
              } else {
                 //alert("Error code " + xhr.status);
		  document.getElementById(divId).innerHTML += "<p>Our Find a Dealer tool is currently experiencing technical difficulties, please try your search again.</p>";

		  // active dealer results div
		  document.getElementById("dealerresultsloading").style.display = "none";
		  document.getElementById("dealerresultswrapper").style.display = "block";
	      }
    		  //alert("dealers loaded. dealerFocus=" + dealerFocus);
    		  if (dealerFocus != "")
    		  {
    			  var e = document.getElementById("dealerFocus" + dealerFocus);
    			  //var offsetTop = getOffsetTop(e);
    			  var offset = $("#dealerFocus" + dealerFocus).offset();
    			  //alert("tagName:" + e.tagName + ", offsetTop:" + offset.top);
    			  //alert("tagName:" + e.tagName + ", offsetTop:" + offsetTop);
    			  //window.scroll(0,offsetTop);
    			  window.scroll(0,Math.round(offset.top - 15));
    			  dealerFocus = "";
    		  } // endif
         }
    }; 
   xhr.open("GET", ajaxUrl,  true); 
   xhr.send(null);
   // Timeout to abort in 5 seconds
   //alert("xhr.sent");
   _xhrTimeout = setTimeout("ajaxTimeout();",50000);
} 

function removeChildren(element) {
	  var children = element.childNodes;
	  var i = children.length;
	  while (i-- > 0) {
		  children[i].parentNode.removeChild(children[i]);
	  }
}

function ajaxTimeout(){
   //_xhr.abort();
   //alert("Well dang, the AJAX request timed out.  Did you lose network "+
   //      "connectivity for some reason?");
   // Note that at this point you could try to send a notification to the
   // server that things failed, using the same xhr object.
}

function createRequestObject() {
  
  FORM_DATA = new Object();
    // The Object ("Array") where our data will be stored.
  
  separator = ',';
    // The token used to separate data from multi-select inputs
  
  query = '' + this.location;
    // Get the current URL so we can parse out the data.
    // Adding a null-string '' forces an implicit type cast
    // from property to string, for NS2 compatibility.
    
  query = query.substring((query.indexOf('?')) + 1);
    // Keep everything after the question mark '?'.
  
  if (query.length < 1) { return false; }  // Perhaps we got some bad data?
  
  keypairs = new Object();
  numKP = 1;
    // Local vars used to store and keep track of name/value pairs
    // as we parse them back into a usable form.
    
  while (query.indexOf('&') > -1) {
    keypairs[numKP] = query.substring(0,query.indexOf('&'));
    query = query.substring((query.indexOf('&')) + 1);
    numKP++;
      // Split the query string at each '&', storing the left-hand side
      // of the split in a new keypairs[] holder, and chopping the query
      // so that it gets the value of the right-hand string.
  }

  keypairs[numKP] = query;
    // Store what's left in the query string as the final keypairs[] data.
  
  for (i in keypairs) {
    keyName = keypairs[i].substring(0,keypairs[i].indexOf('='));
      // Left of '=' is name.
    keyValue = keypairs[i].substring((keypairs[i].indexOf('=')) + 1);
      // Right of '=' is value.
    while (keyValue.indexOf('+') > -1) {
      keyValue = keyValue.substring(0,keyValue.indexOf('+')) + ' ' + keyValue.substring(keyValue.indexOf('+') + 1);
        // Replace each '+' in data string with a space.
    }
    
    keyValue = unescape(keyValue);
      // Unescape non-alphanumerics
      
    if (FORM_DATA[keyName]) {
      FORM_DATA[keyName] = FORM_DATA[keyName] + separator + keyValue;
        // Object already exists, it is probably a multi-select input,
        // and we need to generate a separator-delimited string
        // by appending to what we already have stored.
    } else {
      FORM_DATA[keyName] = keyValue;
        // Normal case: name gets value.
    }
  }

  return FORM_DATA;
}

function changeDollarSign(resultDiv) {
	var links_array = resultDiv.getElementsByTagName('a');
	
	for(i = 0; i < links_array.length; i++) {
		if(links_array[i].className == "financing") {
			links_array[i].href = "http://www.gemoney.com/en/personal/for_your_home/bryant.html";
		}
	}
}

function setSelectedIndex(selector, target)
{
//alert("in:setSelectedIndex, target:" + target);
if (selector == null)
{
    //alert("selector is null");
    return;
} // endif
//selector.selectedIndex = 0;
//selector.options[0].selected = true;
//return;
//go through each option and if it's value == target, set that as the select's selectedIndex
for (index = 0; index < selector.length; index++) 
{
    //alert("[" + index + "]:" + selector[index].value);
    if (selector[index].value == target) 
    {
	    selector.selectedIndex = index;
	    selector.options[index].selected = true;
        //alert("selectedIndex:" + selector.selectedIndex);
        break;
	} // endif
} // endfor
} // endfunction

/*
    for (var i = 0; i < sr.options.length; i++) 
    {
        s += "," + i + ":" + sr.options[i].selected;
      if (sr.options[i].selected)
    {
      searchRadius = sr.options[i].value;
      break;
    } // endif
    } // endfor
*/

//var _zip;

function ipToZipDealers()
{
	//98.220.187.20
	var ip = null; 
	_zip = null;
	var dealers = null;
	var innerHtml = "";
	var testMode = false;
	if (testMode)
	{
		ip = prompt("Test ipToZipDealers?", "98.220.187.20"); 
		if (ip != null)
		{
			//alert("Testing");
			ajaxRequestIpToZip(ip);
		}
		else
		{
			//alert("Cancelled");
		} // endif
	}
	else
	{
		ajaxRequestIpToZip(ip);
	} // endif
}

var _dealers;
var _zip;
function getDealers(zip)
{
	_dealers = null;
	_zip = zip;
	//alert("in:getDealers");
	var ajaxUrl = "/apps/dealerlocatorws.jsp"
		+ "?searchZip=" 
		+ zip
		+ "&searchBrand=BR"
		+ "&searchRadius=25"
		+ "&ipToZip=y"
		//+ "&searchSortBy=Proximity"
		//+ "&searchFilter="
		//+ "&searchType=Proximity"
		+ "";
		//ajaxUrl = getDealerUrl(zip, "100");
	   //alert("ajaxUrl=" + ajaxUrl);
	    var xhr; 
	    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
	    catch (e) 
	    {
	        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
	        catch (e2) 
	        {
	          try {  xhr = new XMLHttpRequest();   }
	          catch (e3) {  xhr = false;  }
	        }
	     }
	  
	    xhr.onreadystatechange  = function()
	    { 
	         if(xhr.readyState  == 4)
	         {
	              if(xhr.status  == 200) 
	              {
	            	  //alert("Have Dealers");
	            	  updateDealers(xhr.responseText);
	              }
	         }
	    } 
	   xhr.open("GET", ajaxUrl,  true); 
	   xhr.send(null);
}

function getDealerUrl(zip, radius)
{
var url = "/apps/dealerlocatorws.jsp"
	+ "?searchZip=" + zip
	+ "&searchBrand=BR"
	+ "&searchRadius=" + radius
	//+ "&searchSortBy=Proximity"
	//+ "&searchFilter="
	//+ "&searchType=Proximity"
	+ "";
	return url;
} // end

function updateDealers(dealers)
{
	//alert("in:updateDealers=" + dealers);
	var results = "";
	var index = 0;
	var nDealers = 0;
	var dealerList = "";
	var tagStartPCompanyName = "<p class=\"companyname\">";
	var tagEndStrong = "</strong>";
	var tagEndP = "</p>";
	var tagGt = ">";
	var tagAddress = "<address>";
	var startAddress = "Address:</strong>";
	var startCity = "<br/>";
	var endCity = ",";
	var startPhone = "Phone:</strong>";
	var endPhone = "</p>";
	while (nDealers < 20)
	{
		var startIndex = dealers.indexOf("<li>", index);
		if (startIndex < 0) {break;}
		var endIndex = dealers.indexOf("</li>", startIndex);
		if (endIndex < 0) {break;}
		var temp = dealers.substring(startIndex + "<li>".length, endIndex);
		/*
		var companyName = dealers.substring(startIndex + tagEndStrong.length, endIndex);
		var startIndex = dealers.indexOf(tagStartPCompanyName, index);
		if (startIndex < 0) {break;}
		startIndex = dealers.indexOf(tagEndStrong, startIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealers.indexOf(tagEndP, startIndex);
		if (endIndex < 0) {break;}
		var companyName = dealers.substring(startIndex + tagEndStrong.length, endIndex);
		if (companyName.indexOf("<a") > -1)
			companyName = getSubString(companyName,">","<");
		alert(companyName);
		startIndex = dealers.indexOf(startAddress, endIndex);
		if (startIndex < 0) {break;}
		startIndex = dealers.indexOf(startCity, startIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealers.indexOf(endCity, startIndex);
		if (endIndex < 0) {break;}
		var city = dealers.substring(startIndex + startCity.length, endIndex);
		
		startIndex = dealers.indexOf(startPhone, endIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealers.indexOf(endPhone, startIndex);
		if (endIndex < 0) {break;}
		var phone = dealers.substring(startIndex + startPhone.length, endIndex);
		*/
		if (nDealers == 0) {dealerList += "<b>DEALERS NEAR ZIP: " + _zip + "</b><br />";}
		else {dealerList += "<br /><br />";}
		/*
		 dealerList += "<a href=\"/dealers/dealer-locator.shtml?"
			+ "searchBrand=BR"
			+ "&zipcode=" + _zip 
			+ "&dealerFocus=" + (nDealers + 1) + "\">"
			+ companyName + "</a><br />" 
			+ city + "&nbsp;" + phone;
		*/
		++nDealers;
		dealerList += buildDealerLink(temp, nDealers);
		index = endIndex;
	} // endwhile
	if (nDealers > 0)
	{
		document.getElementById("rightBarFlash").style.display = "none";
		var rbd = document.getElementById("rightBarDealers");
		var rb = document.getElementById("rightbar");
		//alert("rb:" + typeof rb + ", id:" + rb.id + ", left:" + rb.style.left);
		var rbf = document.getElementById("rightBarFlash");
		//alert("rbf:" + typeof rbf + ", id:" + rbf.id);
		//var rbfTop = getOffsetTop(rbf);
		//var rbTop = getOffsetTop(rb);
		var offset = $("#rightBarDealers").offset();
		var rbfOffset = $("#rightBarFlash").offset();
		var elm = $("#rightBarDealers");
		rbd.style.width = "198px";
		rbd.style.height = "170px";
		rbd.style.display = "block";
		rbd.style.overflow = "auto";
		rbd.innerHTML = dealerList;
		//alert("tagName:" + rbd.tagName + "," + rbd.id + ", left:" + offset.left + ", top:" + offset.top + "(" + elm.width() + ":" + elm.height() + ")");
	}	
}

function buildDealerLink(dealerItem, nDealers)
{
	var dealerLink = "";
	var companyName = getSubstringUsingTargets(dealerItem, "companyname", "</p>");
	companyName = getSubstringUsingTargets(dealerItem, "</strong>", "</p>");
	if (companyName.indexOf("<a") > -1)
		companyName = getSubString(companyName,">","<");
	var city = getSubstringUsingTargets(dealerItem, "Address:", "<a");
	city = getSubstringUsingTargets(dealerItem, "<br/>", ",");
	var phone = getSubstringUsingTargets(dealerItem, "Phone:</strong>", "</p>");
	var dealerFocus = getSubstringUsingTargets(dealerItem, "dealerFocus", "\"");
	var dealerRadius = getSubstringUsingTargets(dealerItem, "dealerRadius", "\"");
	dealerLink += "<a href=\"/dealers/dealer-locator.shtml?"
			+ "searchBrand=BR"
			+ "&zipcode=" + _zip 
			+ "&dealerFocus=" + dealerFocus 
			+ "&searchRadius=" + dealerRadius 
			+ "\">"
			+ companyName + "</a><br />" 
			+ city + "&nbsp;" 
			+ phone;
		return dealerLink;
}

function xbuildDealerLink(dealerItem, nDealers)
{
	//alert("in:buildDealerLink=" + dealerItem);
	var results = "";
	var index = 0;
	//var nDealers = 0;
	var dealerList = "";
	var tagStartPCompanyName = "<p class=\"companyname\">";
	var tagEndStrong = "</strong>";
	var tagEndP = "</p>";
	var tagGt = ">";
	var tagAddress = "<address>";
	var startAddress = "Address:</strong>";
	var startCity = "<br/>";
	var endCity = ",";
	var startPhone = "Phone:</strong>";
	var endPhone = "</p>";
	var companyName = "";
	while (true)
	{
		var startIndex = dealerItem.indexOf(tagStartPCompanyName, index);
		if (startIndex < 0) {break;}
		startIndex = dealerItem.indexOf(tagEndStrong, startIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealerItem.indexOf(tagEndP, startIndex);
		if (endIndex < 0) {break;}
		companyName = dealerItem.substring(startIndex + tagEndStrong.length, endIndex);
		if (companyName.indexOf("<a") > -1)
			companyName = getSubString(companyName,">","<");
		alert(companyName);
		startIndex = dealerItem.indexOf(startAddress, endIndex);
		if (startIndex >= 0) {break;}
		startIndex = dealerItem.indexOf(startCity, startIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealerItem.indexOf(endCity, startIndex);
		if (endIndex < 0) {break;}
		var city = dealerItem.substring(startIndex + startCity.length, endIndex);
		
		startIndex = dealerItem.indexOf(startPhone, endIndex);
		if (startIndex < 0) {break;}
		var endIndex = dealerItem.indexOf(endPhone, startIndex);
		if (endIndex < 0) {break;}
		var phone = dealerItem.substring(startIndex + startPhone.length, endIndex);
		dealerList += "<a href=\"/dealers/dealer-locator.shtml?"
			+ "searchBrand=BR"
			+ "&zipcode=" + _zip 
			+ "&dealerFocus=" + nDealers + "\">"
			+ companyName + "</a><br />" 
			+ city + "&nbsp;" + phone;
		break;
	} // endwhile
		return dealerList;
}

function getOffsetTop(e)
{
	alert("in:getOffsetTop");
	alert("id:" + e.id);
	var offsetTop = e.offsetTop;
	var p;
	try
	{
		alert("id:" + p.id);
		p = e.offsetParent;
		//if (confirm("id:" + p.id + "p.tagName:" + p.tagName + ", offsetTop:" + p.offsetTop))
			alert("id:" + p.id + "p.tagName:" + p.tagName + ", offsetTop:" + p.offsetTop);
		{
		offsetTop += getOffsetTop(p);
		}
	}
	catch (e) {alert(":no offsetParent");}
	return offsetTop;
}

function getSubstringUsingTargets(line, begin, end) {
	var content = "";
	var beginIndex = line.indexOf(begin);
	if (beginIndex > -1) {
		beginIndex += begin.length;
		var endIndex = line.indexOf(end, beginIndex);
		if (endIndex < 0) endIndex = line.length;
		content = line.substring(beginIndex, endIndex);
	}
	return content;
}

function getSubString(line, begin, end) {
	var content = "";
	var beginIndex = line.indexOf(begin);
	if (beginIndex > -1) {
		beginIndex += begin.length;
		var endIndex = line.indexOf(end, beginIndex);
		if (endIndex < 0) endIndex = line.length;
		content = line.substring(beginIndex, endIndex);
	}
	return content;
}


function ajaxRequestIpToZip(ip)
{
var parameters = "";
//_zip = null;
if (typeof ip != "undefined" && ip != null)
{
	parameters = "?action=getZip&ip=" + ip;
}
	// get the results
   ajaxUrl = "/apps/TestIpToZip" + parameters;
   //alert("ajaxUrl=" + ajaxUrl);
    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();   }
          catch (e3) {  xhr = false;  }
        }
     }
  
    xhr.onreadystatechange  = function()
    { 
         if(xhr.readyState  == 4)
         {
              if(xhr.status  == 200) 
              {
        		  //alert("Have IpToZip Result");
            	  var index = xhr.responseText.indexOf("postalCode: ");
            	  if (index > -1)
            	  {
            		  var zip = xhr.responseText.substr(index + "postalCode: ".length,5)
            		  //alert("zip:" + zip);
            		  getDealers(zip);
            		  
            	  }	  
              }
         }
    } 
   xhr.open("GET", ajaxUrl,  true); 
   xhr.send(null);
} 

