var classDealer = {

	getDealerInfo: function(url) {
		//alert("inventaire.getList: " + url);
		//on get notre classe ajax, le url qu'on veut et la fonction a caller par apres !
		ajax.get(url, classDealer.afficheDealer);
	},
	
	getDealerInfoByPostal: function(url) {
		//alert("inventaire.getList: " + url);
		//on get notre classe ajax, le url qu'on veut et la fonction a caller par apres !
		ajax.get(url, classDealer.afficheDealerByPostal);
	},
	
	getDealerGMapsCoords: function(url) {
		//alert("inventaire.getList: " + url);
		ajax.get(url, classDealer.updateGMaps);
	},
	
	getDealerGMapsByPostal: function(url) {
		//alert("inventaire.getList: " + url);
		ajax.get(url, classDealer.updateGMapsByPostal);
	},
	
	afficheDealer: function(result) 
	{
		document.getElementById('livelist').innerHTML = result.responseText;
		getLongLatCountry($laChaine);
	},
	
	afficheDealerByPostal: function(result) 
	{
		document.getElementById('livelist').innerHTML = result.responseText;
		//document.getElementsByName('distancetest').innerHTML = "This is where the distance info will be after a Javascript Append mod ";
		
		var e = document.getElementsByName('distancetest');
		for (i in e)
		{
			//e[i].innerHTML = "This is where the distance info will be after a Javascript Append mod ";
			e[i].innerHTML = lesDistances[i];
			//alert(lesDistances[i]);
		}
	},
	
	updateGMaps: function(result) 
	{
		var listeProduit;
		var marker = new Array();		
	
		//tableau = tabArticle[listeArticle.value];
		//('(' + [XMLHTTPRequest.responseText] + ')')
		
		eval(result.responseText);
		globalGMap.clearOverlays();
		globalGMap.enableScrollWheelZoom();
		globalGMap.addControl(new GLargeMapControl());
		globalGMap.addControl(new GMapTypeControl());
		
		var marker = new Array();
		for (element in dealers) 
		{
			
			if (isNaN(parseFloat(dealers[element].latitude)) === false)
			{	
				
				//objet = tabReponse[i]; ==> sample code de inventaire3.js, demo !!
				//alert("Objet #" + i + " contient numero:" + objet["numero"] + " desc:<" + objet["desc"] + ">" );
				//var point = new GLatLng(parseFloat(dealers[element]["latitude"]),
				//parseFloat(dealers[element]["longitude"]));
				
				//GEvent.addListener(point, 'click', function() 
				//{  
					// When clicked, open an Info Window  
				//	point.openInfoWindowHtml("Latitude: " + dealers[element]["latitude"]);  
				//});  
				//globalGMap.addOverlay(new GMarker(point));
				var point = new GLatLng(parseFloat(dealers[element].latitude), parseFloat(dealers[element].longitude));
				
				//var point = new GLatLng(dealer.lat, dealer.lng);
				//var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/mapfiles/marker" + String.fromCharCode(66 + parseInt(element)) + ".png");
				var icon = new GIcon();
				icon.image = "/imgs/gmap/icon.png";
				icon.shadow = "/imgs/gmap/shadow.png";
				icon.iconSize = new GSize(32, 37);
				icon.shadowSize = new GSize(32, 51);
				icon.iconAnchor = new GPoint(6, 20);
				icon.infoWindowAnchor = new GPoint(5, 1);
				//alert();
				var MapOptions = { icon:icon, title:dealers[element].company };
				//html = "<b>" + dealers[element]["company"] + "</b><br/>" + dealers[element]["address"] + "<br/>" + dealers[element]["city"] + ", " + dealers[element]["phone"];
				html = "<h4>Dealer Informations</h4><p><b>" + dealers[element].company +"</b><br />" + dealers[element]["address"] + ", " + dealers[element]["city"] + "<br />" + dealers[element]["state_name"] + ", " + dealers[element]["country_name"] + "<br />" + dealers[element]["postal_zip"] + "</p><p> Telephone: <b>" + dealers[element]["phone"] + "</b><br />      Email: <a href=\"mailto:" + dealers[element]["email"] + "\"><b>" + dealers[element]["email"] + "</b></a> <br/></p><p><a href=" + dealers[element]["url"] + "><b>" + dealers[element]["more_details"] + "</b></a></p>";
				
				marker[marker.length] = create_gmarker(point, MapOptions, html);
				//if(dealers.length ==1)
				//alert(point);
				globalGMap.addOverlay(marker[marker.length - 1]);
			
			}
		}	
		
	},
	
	updateGMapsByPostal: function(result) 
	{
		eval(result.responseText);
		
		if (dealers !== null)
		{		
		globalGMap.clearOverlays();
		globalGMap.enableScrollWheelZoom();
		globalGMap.setCenter(start, 7);
		globalGMap.addControl(new GLargeMapControl());
		globalGMap.addControl(new GMapTypeControl());
		
		var dir = new GDirections(globalGMap);
		
		//GEvent.addListener(dir, "load", dir_load);
		
		var gotDirections = false;
		//for (var key in dealers) {
		//	map.addOverlay(makeMarker(dealers[key]));
		//	
		//	if (!gotDirections) {
		//		gotDirections = true;
		//		lastDealer = dealers[key];
		//		dir.load("from: " + lat + ", " + lng + " to: " + dealers[key].lat + ", " + dealers[key].lng);
		//	}
		//}
		var marker = new Array();
		lesDistances.length = 0;
		for (element in dealers) 
		{
			if (isNaN(parseFloat(dealers[element].latitude)) === false)
			{	
				var point = new GLatLng(parseFloat(dealers[element].latitude), parseFloat(dealers[element].longitude));
				//var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/mapfiles/marker" + String.fromCharCode(66 + parseInt(element)) + ".png");			
				var icon = new GIcon();
				icon.image = "/imgs/gmap/icon.png";
				icon.shadow = "/imgs/gmap/shadow.png";
				icon.iconSize = new GSize(32, 37);
				icon.shadowSize = new GSize(32, 51);
				icon.iconAnchor = new GPoint(6, 20);
				icon.infoWindowAnchor = new GPoint(5, 1);
				var options = { icon:icon, title:dealers[element].company };
	
				html = "<h4>Dealer Informations</h4><p><b>" + dealers[element].company + "</b><br />" + dealers[element]["address"] + ", " + dealers[element]["city"] + "<br />" + dealers[element]["state_name"] + ", " + dealers[element]["country_name"] + "<br />" + dealers[element]["postal_zip"] + "</p><p> Telephone: <b>" + dealers[element]["phone"] + "</b><br />      Email: <a href=\"mailto:" + dealers[element]["email"] + "\"><b>" + dealers[element]["email"] + "</b></a> <br/></p><p><a href=" + dealers[element]["url"] + "><b>" + dealers[element]["more_details"] + "</b></a></p>";
				marker[marker.length] = create_gmarker(point, options, html);
				
				globalGMap.addOverlay(marker[marker.length - 1]);
				
				
				//map.addOverlay(makeMarker(dealers[element]));
				if (!gotDirections) 
				{
					//premier = plus proche donc on pogne celui la !
					gotDirections = true;
					//this line works fine, just removed for improvement purposes !
					//dir.load("from: " + startLat + ", " + startLng + " to: " + dealers[element]["latitude"] + ", " + dealers[element]["longitude"]);
				}
				
				getDistanceByPostal(startLat,startLng,dealers[element].latitude,dealers[element].longitude, dealers.length);
			
			}
		}	
		//while (lesDistances.length != element) {
			//do nothing
		//}
		
		//getShopsByPostal(startPostal);
/*		compteur = 0;
		lowerhtml = "";
		lowerhtml = lowerhtml + "<table id=\"livesearch\"><tr><td colspan=\"2\"><b>State / City</b></td><td><b>Company</b></td><td><b>Contact</b></td><td><b>Phone</b></td><td><b>Address</b></td><td></td></tr>";
		for (element2 in dealers) 
		{
			if (isNaN(parseFloat(dealers[element2]["latitude"])) === false)
			{
			if (compteur == 0)
			{
				lowerhtml = lowerhtml + "<tr class=\"cell_black\"><td colspan=\"7\" class=\"flagtd\"><img src=\"/imgs/flags/" + "strtolower( $user['countryid'] );" + ".gif\" alt=" + "getCountryName($user[\'countryid\'])" + "/><b>" + " echo getCountryName($user['countryid']) </b></td></tr>";
			}
			compteur = compteur + 1;
			if ( compteur % 2 == 0 ) 
			{ 
				grey = "_grey"; 
				lowerhtml = lowerhtml + "<tr class=\"cell\">";	
			} 
			else 
			{ 
				$grey = "";
				lowerhtml = lowerhtml + "<tr>";
			}		
        
			lowerhtml = lowerhtml + "<td colspan=\"2\"><b>" + dealers[element2]["city"] + "</b></td>" 
			//lowerhtml = lowerhtml + "<td><?if ( isset( $user['website'] ) ) { echo "<a href=\"http://". $user['website'] ."\"><b>" . $user['company'] . "</b></a>"; } else { echo "<b>" . $user['company'] . "</b>"; } ?></td>";
			lowerhtml = lowerhtml + "<td><b>" + dealers[element2]["company"] + "</b></td>";
			//lowerhtml = lowerhtml + "<td><? echo "<a href=\"mailto:". $user['email'] ."\">"; ?><b><? echo $user['firstname'] . " " . $user['lastname']; ?></b></a></td>";
			//lowerhtml = lowerhtml + "<td><? echo $user['phone']; ?></td>";
			//lowerhtml = lowerhtml + "<td><? echo $user['address'] . ", " . $user['postal_zip']; ?></td>";
			//lowerhtml = lowerhtml + "<td nowrap=\"nowrap\" class=\"nopad\"><? echo "<a href=\"/" . $make . "/" . $lang . "/dealers/" . $user['userid'] . "_" . formatterUrl( $user['company'] ) . ".html\" class=\"more_nomarge" . $grey . "\"><b>" . $more_details . "</b></a>" ?></td>";
			lowerhtml = lowerhtml + "</tr>";
			}
		}
			lowerhtml = lowerhtml +  "</table>";
		
		//alert(lowerhtml);
		document.getElementById('livelist').innerHTML = lowerhtml;*/
		}
		else
		{	
			if (document.getElementById("distance").selectedIndex < 4)
			{
				document.getElementById("distance").selectedIndex = document.getElementById("distance").selectedIndex + 1;
				getLocationByPostal(startPostal);
			}
			else 
			{
				document.getElementById('livelist').innerHTML = document.getElementById("distance").selectedIndex + "erreur, mettre message ici, ERR21";
			}
		}
		
	}
	
};

function create_gmarker( point, option, html )
{
    var gmarker = new GMarker(point, option);
    GEvent.addListener( gmarker, 'click', function( ) {
                gmarker.openInfoWindowHtml(html);
        }
    );
    return gmarker;
}


var lesDistances = new Array();
var $laChaine;
var startPostal;
var start;
var startLat;
var startLng;

function getCountryShops(chaine)
{
	init_maxDistance(chaine);

	var country;
	$laChaine = chaine;

	if (chaine == "RD")
	{
		country = "CANADA";
	}
	else
	{
		country = document.getElementById("country").options[document.getElementById("country").selectedIndex].text;
	}
  geo = new GClientGeocoder();
  geo.getLatLng(country , setGMapCountryCenter);
  
  var makeid = document.getElementById("make").value;
  var langid = document.getElementById("lang").value;
	
  var url="/pages/ajaxDealerListReturn.php";
  url=url+"?pays=" + chaine + "&make=" + makeid + "&lang=" + langid;
  //alert(url);
  classDealer.getDealerInfo(url);
  
} 

function getLongLatCountry(chaine)
{
	var makeid = document.getElementById("make").value;
	var langid = document.getElementById("lang").value;
	
	var url="/pages/ajaxGMapsReturn.php";
	url=url+"?pays=" + chaine + "&make=" + makeid + "&lang=" + langid;
	//alert(url);
	classDealer.getDealerGMapsCoords(url);
  
}

function getShopsByPostal(postalCode)
{
	var pays = document.getElementById("country").value;
	var distance = document.getElementById("distance").value;
	
	var makeid = document.getElementById("make").value;
	var langid = document.getElementById("lang").value;

	var url="/pages/ajaxDealerListReturnByPostal.php";
	
	url = url + "?make=" + makeid + "&lang=" + langid + "&latitude=" + startLat + "&longitude=" + startLng + "&distance=" + distance + "&zip=" + postalCode + "&sid=" + Math.random();
	//global_check_url = url;
	classDealer.getDealerInfoByPostal(url);
} 
 
function tmpgetLongLatCountry(chaine)
{
  var url="/pages/ajaxGMapsReturn.php";
  url=url+"?pays="+chaine;
  
  classDealer.getDealerGMapsCoords(url);
} 

function rendRadiusEnable(){
	document.getElementById("distance").disabled=false;
	document.getElementById("dealerwarning").style.display="none";
}

function getLocationByPostal(postalCode)
{
	var postalCode = document.getElementById("zipcode").value;

	var regexPostalUSA = /^(\d\d\d\d\d)$/;
	var regexPostalCAN = /^([A-Za-z]\d[A-Za-z]\d[A-Za-z]\d)$/;
  
	if ((regexPostalUSA.test(postalCode)) || (regexPostalCAN.test(postalCode)))
	{
		startPostal = postalCode;
		geo = new GClientGeocoder();
		geo.getLatLng(postalCode, getLocationByLatLng);
		
	} 
} 

function getLocationByLatLng(latLng) {
	if (latLng) {
	
		var pays = document.getElementById("country").value;
		var distance = document.getElementById("distance").value;
		var makeid = document.getElementById("make").value;
		var langid = document.getElementById("lang").value;
	
		start = new GLatLng(latLng.lat(), latLng.lng());
		startLat = latLng.lat();
		startLng = latLng.lng();
		
		var url="/pages/ajaxGMapsReturnByPostal.php";
		url = url + "?latitude=" + latLng.lat() + "&longitude=" + latLng.lng() + "&distance=" + distance + "&make=" + makeid + "&lang=" + langid + "&sid=" + Math.random();
		//alert( url );
		classDealer.getDealerGMapsByPostal(url);
	
	} else {
		alert("The location of the given address was not found.");
	}	
}

function makeMarker(dealer) {
	var point = new GLatLng(dealer.latitude, dealer.longitude);
	var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/mapfiles/marker" + dealer.letter + ".png");
	var options = { icon:icon, title:dealer["company"] };
	var marker = new GMarker(point, options);
	marker.dealer = dealer;
	dealer.marker = marker;
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(document.getElementById("info_" + dealer.id).innerHTML);
	});
	
	return marker;
}

function dir_load() {
	dir.getMarker(1).getIcon().image = lastDealer.marker.getIcon().image;
	setTimeout("updateMarkers();", 100);
}

function updateMarkers() {
	document.getElementById("directions").childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].src = lastDealer.marker.getIcon().image;
	document.getElementById("directions").childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML = lastDealer.name;
	dir.getMarker(1).getIcon().image = lastDealer.marker.getIcon().image;
}

function getDirections(obj) {
	lastDealer = dealers[obj.rel];
	dir.load("from: " + lat + ", " + lng + " to: " + dealers[obj.rel].lat + ", " + dealers[obj.rel].lng);
}


function setGMapCountryCenter(latLng) 
{
	if (latLng) {
		globalGMap.setCenter(new GLatLng(latLng.lat(), latLng.lng()), 3);
	}
}

function init_maxDistance(pays)
{
	
	var maxDistance = [5, 20, 50, 100, 200];
	var unites = " KM radius";
	var troisieme = false;
	var multiplicateur = 1;
	if ((pays =="GB") || (pays =="US"))
	{
		multiplicateur = 1.6;
		var unites = " Miles radius";
	}
	
	document.getElementById('distance').options.length = 0;
	
	for (i in maxDistance)
	{
		if (!isNaN(maxDistance[i]))
		{
			if (maxDistance[i] == 50)
			{
				troisieme = true;
			}
			else
			{
				troisieme = false;
			}
		
		document.getElementById('distance').options[document.getElementById('distance').options.length] = new Option(maxDistance[i] + unites,  maxDistance[i] * multiplicateur, troisieme, troisieme);
		}
	}
}

function RefreshGMap(geoCountry)
{
	//geoCountry is default geolocated country
	var postalCode = document.getElementById("zipcode").value;
	var country = document.getElementById("country").value;
	//Verifier regex !
	var regexPostalUSA = /^(\d\d\d\d\d)$/;
	var regexPostalCAN = /^([A-Za-z]\d[A-Za-z]\d[A-Za-z]\d)$/;

	if ((regexPostalUSA.test(postalCode)) || (regexPostalCAN.test(postalCode)))
	{
		getLocationByPostal(postalCode);
	}
	else if (document.getElementById("country").selectedIndex  > 0)
	{
		getCountryShops(country);
	}
	else
	{
		getCountryShops(geoCountry);
	}
}

function getDistanceByPostal(customerlat, customerlng, dealerlat, dealerlng, element)
{
	
		var dir = new GDirections();
	
		//GEvent.addListener(dir, "load", dir_load);
		
		GEvent.addListener(dir,"error", function() { 
			//alert("Something Failed: "+dir.getStatus().code); 
			lesDistances[lesDistances.length] =  getDirectionsError(dir);
		}); 
		GEvent.addListener(dir,"load", function() { 
			//alert(dir.getDistance().html);
			lesDistances[lesDistances.length] = dir.getDistance().html;
			//alert(lesDistances.length + " - " + element);
			if (lesDistances.length == element)
			{
				getShopsByPostal(startPostal);
			}
		});
		
		var gotDirections = false;
		
		if (!gotDirections) 
		{
			//premier = plus proche donc on pogne celui la !
			gotDirections = true;
			//this line works fine, just removed for improvement purposes !
			dir.load("from: " + customerlat + ", " + customerlng + " to: " + dealerlat + ", " + dealerlng);
		
		}
}

function create_gmarker( point, option, html )
{
    var gmarker = new GMarker(point, option);
    GEvent.addListener( gmarker, 'click', function( ) {
                gmarker.openInfoWindowHtml(html);
        }
    );
    return gmarker;
}

function makeMarker(dealer) {
	var point = new GLatLng(dealer.lat, dealer.lng);
	var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/mapfiles/marker" + dealer.letter + ".png");
	var options = { icon:icon, title:dealer.name };
	var marker = new GMarker(point, options);
	marker.dealer = dealer;
	dealer.marker = marker;
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(document.getElementById("info_" + dealer.id).innerHTML);
	});
	
	return marker;
}

function dir_load() {
	dir.getMarker(1).getIcon().image = lastDealer.marker.getIcon().image;
	setTimeout("updateMarkers();", 100);
}

function updateMarkers() {
	document.getElementById("directions").childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].src = lastDealer.marker.getIcon().image;
	document.getElementById("directions").childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML = lastDealer.name;
	dir.getMarker(1).getIcon().image = lastDealer.marker.getIcon().image;
}

function getDirections(obj) {
	lastDealer = dealers[obj.rel];
	dir.load("from: " + lat + ", " + lng + " to: " + dealers[obj.rel].lat + ", " + dealers[obj.rel].lng);
}	
function getDirectionsError(direction)
{
	var html = "We could not calculate direction from your location to this dealer";
	document.getElementById("Gdirection").innerHTML = html;
}

// Not using the destination directions markers so hide it.
function hideLastDirMarker(direction)
{
    var LastDirMarker = direction.getNumGeocodes()
    var marker = direction.getMarker(LastDirMarker - 1);
    if (marker != null)
        marker.hide();
    else
        alert("Marker is null");
} 
