
// === BEGIN SLIDER SCRIPT ===

var timerlen = 5;
var slideAniLen = 2000;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();

function slidedown(objname){
        if(moving[objname])
                return;

        if(document.getElementById(objname).style.display != "none")
                return; // cannot slide down something that is already visible

        moving[objname] = true;
        dir[objname] = "down";
        startslide(objname);
}

function slideup(objname){
        if(moving[objname])
                return;

        if(document.getElementById(objname).style.display == "none")
                return; // cannot slide up something that is already hidden

        moving[objname] = true;
        dir[objname] = "up";
        startslide(objname);
}

function startslide(objname){
        obj[objname] = document.getElementById(objname);

        endHeight[objname] = parseInt(obj[objname].style.height);
        startTime[objname] = (new Date()).getTime();

        if(dir[objname] == "down"){
                obj[objname].style.height = "1px";
        }

        obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname){
	var elapsed = (new Date()).getTime() - startTime[objname];

	if (elapsed > slideAniLen)
		endSlide(objname)
	else {
		var d =Math.round(elapsed / slideAniLen * endHeight[objname]);
		if(dir[objname] == "up")
			d = endHeight[objname] - d;
			obj[objname].style.height = d + "px";
	}

	return;
}

function endSlide(objname){
	clearInterval(timerID[objname]);

	if(dir[objname] == "up")
		obj[objname].style.display = "none";

	obj[objname].style.height = endHeight[objname] + "px";

	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(endHeight[objname]);
	delete(obj[objname]);
	delete(dir[objname]);

	return;
}

function toggleSlide(objname){
	if(document.getElementById(objname).style.display == "none"){
		slidedown(objname);
	}else{
		slideup(objname);
	}
}

// ====== Plot a marker after positive reponse to "We found multiple" ======
function place(address) {
	document.myForm.search.value = address;
	document.myForm.submit();
}

// === BEGIN SLIDER SCRIPT ===


function showAddress(search) {
    if (GBrowserIsCompatible()) {
    
		document.getElementById("side_bar").innerHTML = "<b>Searching for BioLogical Theraputics Locations...</b>";
		document.getElementById('mydiv').style.height = "411px";

		var side_bar_html = "";
		var gmarkers = [];
		var htmls = [];
		var i = 0;
     	var geo = new GClientGeocoder(); 
     	
      // A function to create the marker and set up the event window
      function createMarker(point,name,html,icontype) {
        // === create a marker with the requested icon ===
        var marker = new GMarker(point, gicons[icontype]);
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
        });
        // save the info we need to use later for the side_bar
        gmarkers[i] = marker;
        htmls[i] = html;
        i++;
        return marker;
      }
 
      // This function picks up the click and opens the corresponding info window
      function myclick(i) {
        gmarkers[i].openInfoWindowHtml(htmls[i]);
      }
      
		// === Create an associative array of GIcons() ===
		var gicons = [];
		gicons["logo"] = new GIcon(G_DEFAULT_ICON, "logoSign.png");
		gicons["logo"].image = "/logoSign.png";
		gicons["logo"].shadow = "/signShadow.png";  
		gicons["logo"].iconSize=new GSize(32,32);
		gicons["logo"].shadowSize=new GSize(56,32);
		gicons["logo"].iconAnchor=new GPoint(16,28);
		gicons["logo"].infoWindowAnchor=new GPoint(16,0);
		gicons["home"] = new GIcon(G_DEFAULT_ICON, "logo.png");



    // ====== Array for decoding the failure codes ======
    var reasons=[];
    reasons[G_GEO_SUCCESS]            = "Success";
    reasons[G_GEO_MISSING_ADDRESS]    = "The address was either missing or had no value.";
    reasons[G_GEO_UNKNOWN_ADDRESS]    = "No corresponding geographic location could be found for the specified address.";
    reasons[G_GEO_UNAVAILABLE_ADDRESS]= "The given address cannot be returned due to legal or contractual reasons.";
    reasons[G_GEO_BAD_KEY]            = "Error";
    reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
    reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
       
   if (search == undefined) {
    var search = document.getElementById("search").value + ', Canada';
    var searchsmall = document.getElementById("search").value;
   }
   		// ====== Perform the Geocoding ======        
        geo.getLocations(search, function (result)
          { 
            if (result.Status.code == G_GEO_SUCCESS) {
			
					slidedown('mydiv');
								
					// ===== If there was more than one result, "ask did you mean" on them all =====
              		if (result.Placemark.length > 1) {
              		
									document.getElementById("side_bar").innerHTML = "<div class='addresslinkageout'>We found multiple addresses which match your search. Please choose one, or enter a more precise address!";
									// Loop through the results
									for (var i=0; i<result.Placemark.length; i++) {
									  var p = result.Placemark[i].Point.coordinates;
									  document.getElementById("side_bar").innerHTML += "<div class='addresslinkage'><form name=go"+(i+1)+"><input type=hidden name=search value='"+ result.Placemark[i].address+"'>"+(i+1)+": <a href='javascript:showAddress(document.go"+(i+1)+".search.value)'>"+ result.Placemark[i].address+"</a></form></div>";
									}
									document.getElementById("side_bar").innerHTML += "</div>";
              		}
              		
              		else {
              		
									// ====== Get the nearest Mr Trans ======  
										var map = new GMap2(document.getElementById("map"));
										map.addControl(new GLargeMapControl());
										map.addControl(new GMapTypeControl());
      									map.addControl(new GScaleControl());
										map.setCenter(new GLatLng(20,0),1);
										
										
								  // Loop through the results, placing markers
								  for (var i=0; i<result.Placemark.length; i++) {
									var p = result.Placemark[i].Point.coordinates;
									var marker = new GMarker(new GLatLng(p[1],p[0]));
									map.addOverlay(marker);
								  }
								  // centre the map on the first result
								  var p = result.Placemark[0].Point.coordinates;
								  map.setCenter(new GLatLng(p[1],p[0]),11);
									document.getElementById("side_bar").innerHTML = "<b>Searching for BioLogical Theraputics Locations close to your address....</b>";
								  
										
									var randomnumber=Math.floor(Math.random()*11)
									var url = "GoogleData.lasso?Random="+randomnumber+"&Search=" + search;
									var request = GXmlHttp.create();
									request.open("GET", url, true);
										request.onreadystatechange = function() {
											if (request.readyState == 4) {
											
												var xmlDoc = request.responseXML;
												var markers = xmlDoc.documentElement.getElementsByTagName("marker");
												var currentdivheight = document.getElementById('mydiv').offsetHeight;
												
												map.getInfoWindow().hide();
												map.clearOverlays();
												gmarkers = [];
												side_bar_html="";
												
												for (var i = 0; i < markers.length; i++) {
												
														var lat = parseFloat(markers[i].getAttribute("lat"));
														var lng = parseFloat(markers[i].getAttribute("lng"));
														var point = new GLatLng(lat,lng);
														var html = markers[i].getAttribute("html");
														var label = markers[i].getAttribute("label");
														var icontype = markers[i].getAttribute("icontype");
														var address = markers[i].getAttribute("address");
														var website = markers[i].getAttribute("website");
														var locationid1 = markers[i].getAttribute("locationid");
														var distance = markers[i].getAttribute("distance");
														var marker = createMarker(point,label,html,icontype);
														map.addOverlay(marker);	
																												
												}
														
												for (var i = 1; i < 2; i++) {
													
													var address = markers[i].getAttribute("address");
													var locationid = markers[i].getAttribute("locationid");
														var distance = markers[i].getAttribute("distance");
													document.getElementById("side_bar").innerHTML = 'The closest Biological Therapeutics to <b>' + searchsmall + '</b> is <b>'+address+'</b>.  <a target="_blank" href="/GoogleJump.lasso?act=directions&FindID=' + locationid + '">Click here for directions</a> or <a href="/GoogleJump.lasso?act=info&FindID=' + locationid + '">Click here for more info</a><br>';
													
												}
												for (var i = 2; i < markers.length; i++) {
													var address = markers[i].getAttribute("address");
													var locationid = markers[i].getAttribute("locationid");
														var distance = markers[i].getAttribute("distance");
														document.getElementById("side_bar").innerHTML += 'Another close Biological Therapeutics to <b>' + searchsmall + '</b> is <b>'+address+'</b>.  <a target="_blank" href="/GoogleJump.lasso?act=directions&FindID=' + locationid + '">Click here for directions</a> or <a href="/GoogleJump.lasso?act=info&FindID=' + locationid + '">Click here for more info</a><br>';
														currentdivheight = currentdivheight + 14;
												
												}
										
												var lat = parseFloat(markers[1].getAttribute("lat"));
												var lng = parseFloat(markers[1].getAttribute("lng"));
												
												map.panTo(new GLatLng(lat,lng),17);
												
												for (var i = 0; i < markers.length; i++) {
												
													var distance = markers[i].getAttribute("distance");
													var distance = Math.round(distance);
													if (distance > 200) {
														document.getElementById("side_bar").innerHTML += '<br><b>This BioLogical Theraputics Location is over '+distance+' miles away! That\'s a long drive with a problematic transmission.</b><br> <a href="Locations">Perhaps you should look through our list of locations by clicking here.</a>';;
													currentdivheight = currentdivheight + 42;
													}
														
												}
												
												document.getElementById('mydiv').style.height = currentdivheight + 'px';
												
											}
										
										}
										request.send(null);
										
						}
										
            }
         
            else {
            
				  var reason="Code "+result.Status.code;
				  if (reasons[result.Status.code]) {
					reason = reasons[result.Status.code]
				  } 
				  alert('Could not find "'+search+ '" ' + reason);
             
            }
          }

        );
        
       
 
 	}
	}
