//API SERVERS
var MQ_API_MAP_SERVER = "map.access.mapquest.com";
var MQ_API_GEOCODE_SERVER = "geocode.access.mapquest.com";
var MQ_API_SPATIAL_SERVER = "spatial.access.mapquest.com";
var MQ_API_ROUTE_SERVER = "route.access.mapquest.com";
var MQ_API_PATH = "mq";
var MQ_API_PORT = 80;

//PROXY
var PROXY_SERVER = "www.timhortons.com";
var PROXY_PATH = "locator/mq/JSReqHandler.php";
var PROXY_PORT = "";

//Tables
var TABLE_NAME = "MQA.MQ_34215_timhortons";
var RESULTS_PER_PAGE = 10;
var MAX_SEARCH_RESULTS = 30;

//CoverageName
var MQ_MAP_COV_NAME = "navt";
var MQ_GEOCODE_COV_NAME = "us_postal";

//Global Varables
var dRadius;
var sUnits;
var mqGeoAddress;
var mqAmbigLocationCollection;
var aSearchResults;
var sLanguage = "english";
var aOldSearchResults;


var iPageWidth = 900;


var STATES = new function(){
	this.FRENCH = new function(){
		this.CA = new function(){
			this.name = "Canada";
			this.AB = "AB - Alberta";
			this.BC = "BC - Colombie-Britannique";
			this.MB = "MB - Manitoba";
			this.NB = "NB - Nouveau-Brunswick";
			this.NL = "NL - Terre-Neuve & Labrador";
			this.NT = "NT - Territoires du Nord-Ouest";
			this.NS = "NS - Nouvelle-Écosse";
			this.ON = "ON - Ontario";
			this.PE = "PE - Île-du-Prince-Édouard";
			this.QC = "QC - Qu&eacute;bec";
			this.SK ="SK - Saskatchewan";
			this.YT = "YT - Yukon Territory";
		
		}
		this.US = new function(){
			this.name = "United States";
			this.CT = "CT - Connecticut";
			this.IN = "IN - Indiana";
			this.KY = "KY - Kentucky";
			this.MA = "MA - Massachusetts";
			this.ME = "ME - Maine";
			this.MI = "MI - Michigan";
			this.NY = "NY - New York";
			this.OH = "OH - Ohio";
			this.PA = "PA - Pennsylvanie";
			this.RI = "RI - Rhode Island";
			this.WV=  "WV - Virginie-Occidentale";
		}
	}
	this.ENGLISH = new function(){
		this.CA = new function(){
			this.name = "Canada";
			this.AB = "AB - Alberta";
			this.BC = "BC - British Columbia";
			this.MB = "MB - Manitoba";
			this.NB = "NB - New Brunswick";
			this.NL = "NL - Newfoundland & Labrador";
			this.NT = "NT - Northwest Territories";
			this.NS = "NS - Nova Scotia";
			this.ON = "ON - Ontario";
			this.PE = "PE - Prince Edward Island";
			this.QC = "QC - Qu&eacute;bec";
			this.SK ="SK - Saskatchewan";
			this.YT = "YT - Yukon Territory";
		
		}
		this.US = new function(){
			this.name = "United States";
			this.CT = "CT - Connecticut";
			this.IN = "IN - Indiana";
			this.KY = "KY - Kentucky";
			this.MA = "MA - Massachusetts";
			this.ME = "ME - Maine";
			this.MI = "MI - Michigan";
			this.NY = "NY - New York";
			this.OH = "OH - Ohio";
			this.PA = "PA - Pennsylvania";
			this.RI = "RI - Rhode Island";
			this.WV=  "WV - West Virginia";
		}
	}
	
	
	this.loadStates = function(sel){
		var states = false;
		switch(sLanguage){
			case "french":
				states = STATES.FRENCH;
				break;
			default:
				states = STATES.ENGLISH;
				break;
		} 
		
		
		for(var country in states){
			country = states[country];
			var oGroup = document.createElement('optgroup');
			oGroup.label = country.name;
			for(var state in country){
				if(state == "name")
					continue;
				var name = country[state];
				if(name.indexOf("&") >= -1 && name.indexOf(";") >= -1){
					var opt = document.createElement("option");
					opt.value = state;
					opt.innerHTML = name;
					DOMFunctions.appendOptionToSelect(oGroup, opt);
				}
				else {
					DOMFunctions.appendOptionToSelect(oGroup, DOMFunctions.getSelectOption(state, name));
				}
			}

			sel.appendChild(oGroup);
			

		}
	}
	
}


function getInfoTitleElement(text){
	var span = document.createElement("span");
	span.appendChild(document.createTextNode(text));
	return span;
}

function getButton(text, href){
	var a = document.createElement("a");
	a.className = "button";
	a.href = href;
	a.onclick = function(){this.blur();};
	var span = document.createElement("span");
	span.appendChild(document.createTextNode(text));
	a.appendChild(span);
	return a;
}

function findStore(){
	var sAddress = document.getElementById("txtAddress").value;
	var sCity = document.getElementById("txtCity").value;
	var sPostalCode = document.getElementById("txtPostalCode").value;
	var sel = document.getElementById("selStateProvince");
	var sStateProvince = sel.options[sel.selectedIndex].value;
	var sel = document.getElementById("selSearchradius");
	var sRadius = sel.options[sel.selectedIndex].value;
	dRadius = 0;
	if(sRadius.indexOf("km") >= 0){
		dRadius = parseFloat(sRadius.replace("km", ""));
		sUnits = "km";
	}
	else {
		dRadius = parseFloat(sRadius.replace("mi", ""));	
		sUnits = "mi";
	}
	
	if(StringFunctions.isBlank(sCity) && StringFunctions.isBlank(sStateProvince)){
		if(StringFunctions.isBlank(sPostalCode)){
			alert("Please enter a City/State or Postal Code!");
			return;
		}
	}
	
	var gExec = new MQExec(MQ_API_GEOCODE_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
	var mqAddress = new MQAddress();
	mqAddress.setStreet(sAddress);
	mqAddress.setCity(sCity);
	mqAddress.setState(sStateProvince);
	mqAddress.setPostalCode(sPostalCode);
	mqAddress.setCountry("US");
	if(sStateProvince == "AB" || sStateProvince == "BC" || sStateProvince == "MB" || sStateProvince == "NB"
		|| sStateProvince == "NL" || sStateProvince == "NT" || sStateProvince == "NS" || sStateProvince == "ON"
		|| sStateProvince == "PE" || sStateProvince == "QC" || sStateProvince == "SK" || sStateProvince == "YT"){
			mqAddress.setCountry("CA");
	}
	else {
		if(!StringFunctions.isBlank(sPostalCode)){
			if(isNaN(parseInt(sPostalCode))){
				mqAddress.setCountry("CA");		
			}
		}
	}
	
	
	var mqLocationCollection = new MQLocationCollection();
	gExec.geocode(mqAddress, mqLocationCollection);
	
	
	if(mqLocationCollection.getSize() == 0){
		showError("Address couldn't be found!", mqAddress);
		return;
	}
	else if(mqLocationCollection.getSize() > 1){
		showAmbigResults(mqLocationCollection);
		return;
	}
	else {
		search(mqLocationCollection.getAt(0));
		return;
	}
	
}

function findAmbigStore(){
	var sel = document.getElementById("selAmbig");
	var index = sel.selectedIndex;
	search(mqAmbigLocationCollection.getAt(index));
}

function showAmbigResults(mqLocationCollection){
	mqAmbigLocationCollection = mqLocationCollection;
	
	var div = document.getElementById("divContent");
	DOMFunctions.removeAllChildren(div);
	
	var tbl = document.createElement("table");
	tbl.cellPadding = 4;
	tbl.cellSpacing = 0;
	tbl.border = 0;
	
	var tr, td, sel;
	var trItt = 0;
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.appendChild(document.createTextNode("Found Multiple Results, Please select one."));
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	var sel = document.createElement("select");
	sel.id = "selAmbig";
	td.appendChild(sel);
	
	for(var i=0; i < mqAmbigLocationCollection.getSize(); i++){
		var loc = mqAmbigLocationCollection.getAt(i);
		var opt = DOMFunctions.getSelectOption(i, getAddressSingleLine(loc));
		DOMFunctions.appendOptionToSelect(sel, opt);
	}
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	var btn = DOMFunctions.createInputElement("image", "btnAmbig", "Find a Store");
	btn.src = "images/b_find.gif";
	btn.onclick = findAmbigStore;
	td.appendChild(btn);
	
	div.appendChild(tbl);
	
	
}

function sortByDistance(a, b){
	var d1 = parseFloat(a.distance);
	if(isNaN(d1))
		d1 = 0;
	var d2 = parseFloat(b.distance);
	if(isNaN(d2))
		d2 = 0;
	if(d1 > d2)
		return 1;
	else if(d1 < d2)
		return -1;
	else
		return 0;
}

function search(mqGAddress){
	mqGeoAddress = mqGAddress;
	
	var sExec = new MQExec(MQ_API_SPATIAL_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
	var aResults = new Array();
	if(mqGeoAddress.getResultCode().indexOf("A3") == 0){
		var dblq = new MQDBLayerQuery();
		dblq.setDBLayerName(TABLE_NAME);
		dblq.setExtraCriteria("State = '" + mqGeoAddress.getState() + "'");
		
		var scIds = new MQStringCollection();
		var scFields = new MQStringCollection();
		
		var rs = new MQRecordSet();
		
		sExec.getRecordInfo(scFields, dblq, rs, scIds);
		
		
		var sFields = rs.getFieldNames();
		while(!rs.isEOF()){
			var obj = new Object();
			
			for(var i=0; i < sFields.getSize(); i++){
				var name = sFields.getAt(i);
				obj[name] = rs.getField(name);
			}
			
			if(obj.N == ""){
				obj.N = "Tim Hortons";
			}
			
			
			var ll = new MQLatLng(parseFloat(obj.Lat), parseFloat(obj.Lng));
			obj.distance = ll.arcDistance(mqGeoAddress.getMQLatLng());
			
			aResults.push(obj);
		
			rs.moveNext();
		}
		
		aResults.sort(sortByDistance);
	}
	else {
		var rSearchCriteria = new MQRadiusSearchCriteria();
		if(sUnits == "km")
			rSearchCriteria.setRadius(parseFloat(dRadius) / 1.6);
		else
			rSearchCriteria.setRadius(dRadius);
		rSearchCriteria.setCenter(mqGeoAddress.getMQLatLng());
		rSearchCriteria.setMaxMatches(MAX_SEARCH_RESULTS);
		
		var dblq = new MQDBLayerQuery();
		dblq.setDBLayerName(TABLE_NAME);
		
		var dblqCollection = new MQDBLayerQueryCollection();
		dblqCollection.add(dblq);
		
		var fcResults = new MQFeatureCollection();
		
		sExec.search(rSearchCriteria, fcResults, "", dblqCollection, new MQFeatureCollection(), new MQDTCollection());
		
		if(fcResults.getSize() > 0){
			var scIds = new MQStringCollection();
			for(var i=0; i < fcResults.getSize(); i++){
				scIds.add(fcResults.getAt(i).getKey());
			}
			var scFields = new MQStringCollection();
			
			var rs = new MQRecordSet();
			
			sExec.getRecordInfo(scFields, dblq, rs, scIds);
			
			
			var sFields = rs.getFieldNames();
			while(!rs.isEOF()){
				var obj = new Object();
				
				for(var i=0; i < sFields.getSize(); i++){
					var name = sFields.getAt(i);
					obj[name] = rs.getField(name);
				}
				
				if(obj.N == ""){
					obj.N = "Tim Hortons";
				}
				
				var ll = new MQLatLng(parseFloat(obj.Lat), parseFloat(obj.Lng));
				obj.distance = ll.arcDistance(mqGeoAddress.getMQLatLng());
				
				aResults.push(obj);
			
				rs.moveNext();
			}
			aResults.sort(sortByDistance);
			
		}
	}
	showSearchResults(aResults);
	
}


function showPage(pg){
	var iStart = pg * RESULTS_PER_PAGE;
	var td = document.getElementById("tdNextPrevious");
	DOMFunctions.removeAllChildren(td);
	
	if(iStart > 0){
		switch(sLanguage){
			case "french":
				td.appendChild(getButton("< Précédent", "javascript:showPage(" + (pg - 1) + ")"));
				break;
			default:
				td.appendChild(getButton("< Prev", "javascript:showPage(" + (pg - 1) + ")"));
				break;
		}	
	}
	
	if(iStart + RESULTS_PER_PAGE < aSearchResults.length){			
		if(iStart > 0)
			td.appendChild(document.createTextNode(" "));
	
		switch(sLanguage){
			case "french":
				td.appendChild(getButton("Suivant >", "javascript:showPage(" + (pg + 1) + ")"));
				break;
			default:
				td.appendChild(getButton("Next >", "javascript:showPage(" + (pg + 1) + ")"));
				break;
		}
	
	}
	
	var tbl = document.getElementById("tblList");
	for(var i = tbl.rows.length - 1; i > 0; i--){
		tbl.deleteRow(i);
	}
	var trItt = 1;
	var td, tr;
	
	for(var i=iStart; i < aSearchResults.length && i < iStart + RESULTS_PER_PAGE; i++){
		var loc = aSearchResults[i];
		
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		
		var img = document.createElement("img");
		img.src = "images/icons/401_" + (i+1) + ".gif";
		td.appendChild(img);
		
		td = tr.insertCell(1);
		appendLocationToElement(loc, td, true);
		td.appendChild(document.createElement("br"));
		
	}

}

function showSearchResults(aResults){
	aSearchResults = aResults
	if(aSearchResults.length > 0 ){
		var divContent = document.getElementById("divContent");
		DOMFunctions.removeAllChildren(divContent);
		
		var pTbl = document.createElement("table");
		pTbl.cellPadding = "4";
		pTbl.cellSpacing = "0";
		divContent.appendChild(pTbl);
		var pTr, pTd;
		
		pTr = pTbl.insertRow(0);
		pTr.vAlign = "top";
		pTd = pTr.insertCell(0);
		pTd.width = "400px";
		
		var tbl = document.createElement("table");
		tbl.id = "tblList";
		pTd.appendChild(tbl);
		
		var divMap = document.createElement("div");
		divMap.style.height = "330px";
		divMap.style.width = "500px";
		pTd = pTr.insertCell(1);
		//pTd.style.height = divMap.style.height;
		pTd.appendChild(divMap);
		
		var subTable = document.createElement("table");
		pTd.appendChild(subTable);
		var sTr, sTd;
				
		sTr = subTable.insertRow(0);
		sTd = sTr.insertCell(0);
		
		switch(sLanguage){
			case "french":
				sTd.appendChild(getButton("Cherchez à nouveau", "?sLanguage=french"));
				break;
			default:
				sTd.appendChild(getButton("Search Again", "?sLanguage=english"));
				break;
		}
		
		if(aSearchResults.length > 10){
			sTr = subTable.insertRow(1);
			sTd = sTr.insertCell(0);
			sTd.id = "tdNextPrevious";
			
			switch(sLanguage){
				case "french":
					sTd.appendChild(getButton("Suivant >", "javascript:showPage(1)"));
					break;
				default:
					sTd.appendChild(getButton("Next >", "javascript:showPage(1)"));
					break;
			}
		
		}
		
		var pois = new MQPoiCollection();
		
		
		var tr,td, poi, mapicon;
		var trItt = 0;
		
		poi = new MQPoi(mqGeoAddress.getMQLatLng(), new MQMapIcon());

		switch(sLanguage){
			case "french":
				poi.setInfoTitleElement(getInfoTitleElement("Origine de la recherche"));
				break;
			default:
				poi.setInfoTitleElement(getInfoTitleElement("Search Origin"));
				break;
		}

		var span = document.createElement("span");
		getAddressElement(mqGeoAddress, span)
		poi.setInfoContentElement(span);
		pois.add(poi);
		

		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.colSpan = "2";
		
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Vous recherchiez:"));
				break;			
			default:	
				td.appendChild(document.createTextNode("You Searched From:"));
				break;
		}
			
		td.appendChild(document.createElement("br"));
		td.appendChild(document.createTextNode(getAddressString(mqGeoAddress)));
		td.appendChild(document.createElement("br"));
		td.appendChild(document.createElement("br"));
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Tim Hortons le plus proche de vous:"));
				break;			
			default:	
				td.appendChild(document.createTextNode("Tim Hortons closest to you:"));
				break;
		}

		for(var i=0; i < aSearchResults.length; i++){
			var loc = aSearchResults[i];
			
			var mapicon = new MQMapIcon();
			mapicon.setImage("images/icons/401_" + (i+1) + ".gif", 20, 20, true, false);
			
			var poi = new MQPoi(new MQLatLng(loc.Lat, loc.Lng), mapicon);
			poi.setInfoTitleElement(getInfoTitleElement(loc.N));
			var span = document.createElement("span");
			appendLocationToElement(loc, span, false);
			poi.setInfoContentElement(span);
			pois.add(poi);
			
			if( i < 10){
				tr = tbl.insertRow(trItt++);
				td = tr.insertCell(0);
				
				var img = document.createElement("img");
				img.src = "images/icons/401_" + (i+1) + ".gif";
				td.appendChild(img);
				
				td = tr.insertCell(1);
				appendLocationToElement(loc, td, true);
				td.appendChild(document.createElement("br"));
				
			}
			
		}
		var mqInit = new MQMapInit();
		mqInit.setBestFitRect(pois.getBoundingRect());
		var map = new MQTileMap(divMap, null, null, null, mqInit);		
		map.getInfoWindow().setMinWidth(150);

		//map.getDeclutter().setDeclutterMode(2);
		map.addControl(new MQLargeZoomControl(), new MQMapCornerPlacement(MQMapCorner.TOP_LEFT, new MQSize(3, 15)));
		
		map.replacePois(pois);
		
	}
	else {
		showError("No results could be found within " + dRadius + " " + sUnits, mqGeoAddress);
	}
}


function showError(msg, mqAddress){
	var div = document.getElementById("divContent");
	DOMFunctions.removeAllChildren(div);
	
	var tr, td, inpt;
	var trItt = 0
	var tbl = document.createElement("table");
	tbl.border="0";
	tbl.cellPadding="4"
	tbl.cellspacing="0";
	
	if(msg != ""){
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.colSpan = 2;
		td.appendChild(document.createTextNode(msg));
	}
	else {
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.colSpan = 2;
		
		switch(sLanguage){
		
			case "french":
				td.appendChild(document.createTextNode("Indiquez le plus de renseignements possible pour localiser les restaurants pr" + String.fromCharCode(232)  + "s de chez vous"));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				
				/*var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("Cliquer ici"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(" pour voir les "));
				var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("villes"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(" dans lesquelles se trouvent des restaurants "));
				var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("Tim Hortons"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(". "));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				*/
				
				var b = document.createElement("b");
				b.appendChild(document.createTextNode("Vous partez en voyage?  Référez-vous au système de "));
				var a = document.createElement("a");
				a.href = "javascript:showTripPlanner();";
				a.appendChild(document.createTextNode("planification de voyage Tim Hortons"));
				b.appendChild(a);
				td.appendChild(b);
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				break;
			default:
				td.appendChild(document.createTextNode("Enter as much of your location information as you can to find the stores nearest you."));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				
				/*var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("Click here"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(" to find "));
				var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("cities and towns"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(" where Tim Hortons stores are "));
				var a = document.createElement("a");
				a.href = "http://www.timhortons.com/en/about/locations.html";
				a.appendChild(document.createTextNode("located"));
				td.appendChild(a);
				td.appendChild(document.createTextNode(". "));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				*/
				
				var b = document.createElement("b");
				b.appendChild(document.createTextNode("Going on a trip? Check out the "));
				var a = document.createElement("a");
				a.href = "javascript:showTripPlanner();";
				a.appendChild(document.createTextNode("Tim Hortons Trip Planner"));
				b.appendChild(a);
				td.appendChild(b);
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createElement("br"));
				break;
		}
				
	}
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Adresse:"));
			break;
		default:
			td.appendChild(document.createTextNode("Street or Intersection:"));
			break;
	}
	td = tr.insertCell(1);
	inpt = DOMFunctions.createInputElement("text", "txtAddress", mqAddress.getStreet());
	inpt.size="30";
	inpt.maxLength="80";
	inpt.id="txtAddress"; 
	inpt.className = "inpt";
	td.appendChild(inpt);

	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Ville:"));
			break;
		default:
			td.appendChild(document.createTextNode("City:"));
			break;
	}
	
	td = tr.insertCell(1);
	inpt = DOMFunctions.createInputElement("text", "txtCity", mqAddress.getCity());
	inpt.size="30";
	inpt.maxLength="50";
	inpt.id="txtCity"; 
	inpt.className = "inpt";
	td.appendChild(inpt);


	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Province /" + String.fromCharCode(201) + "tat:"));
			break;
		default:
			td.appendChild(document.createTextNode("Province/State:"));
			break;
	}

	
	td = tr.insertCell(1);
	var sel = document.createElement("select");
	sel.name = "selStateProvince";
	sel.id = "selStateProvince";
	sel.className = "select";
	td.appendChild(sel);
	
	var opt = DOMFunctions.getSelectOption("", "");
	DOMFunctions.appendOptionToSelect(sel, opt);
	STATES.loadStates(sel);
	
	switch(mqAddress.getState()){
		case "AB":
			sel.selectedIndex = 2;
			break;
		case "BC":
			sel.selectedIndex = 3;
			break;
		case "MB":
			sel.selectedIndex = 4;
			break;
		case "NB":
			sel.selectedIndex = 5;
			break;
		case "NT":
			sel.selectedIndex = 6;
			break;
		case "NS":
			sel.selectedIndex = 7;
			break;
		case "ON":
			sel.selectedIndex = 8;
			break;
		case "PE":
			sel.selectedIndex = 9;
			break;
		case "QC":
			sel.selectedIndex = 10;
			break;
		case "SK":
			sel.selectedIndex = 11;
			break;
		case "YT":
			sel.selectedIndex = 12;
			break;
		case "CT":
			sel.selectedIndex = 14;
			break;
		case "KY":
			sel.selectedIndex = 15;
			break;
		case "MA":
			sel.selectedIndex = 16;
			break;
		case "ME":
			sel.selectedIndex = 17;
			break;
		case "MI":
			sel.selectedIndex = 18;
			break;
		case "NY":
			sel.selectedIndex = 19;
			break;
		case "OH":
			sel.selectedIndex = 20;
			break;
		case "PA":
			sel.selectedIndex = 21;
			break;
		case "RI":
			sel.selectedIndex = 22;
			break;
		case "WV":
			sel.selectedIndex = 23;
			break;
	}
				 
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Code postal"));
			break;
		default:
			td.appendChild(document.createTextNode("Postal/ZIP Code:"));
			break;
	}
	
	td = tr.insertCell(1);
	inpt = DOMFunctions.createInputElement("text", "txtPostalCode", mqAddress.getPostalCode());
	inpt.size="15";
	inpt.maxLength="10";
	inpt.id="txtPostalCode"; 
	inpt.className = "inpt";
	td.appendChild(inpt);				
	
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Rayon de recherche:"));
			break;
		default:
			td.appendChild(document.createTextNode("Search Radius:"));
			break;
	}
	
	td = tr.insertCell(1);
	sel = document.createElement("select");
	sel.id = "selSearchradius";
	sel.name = "selSearchradius";
	td.appendChild(sel);

	switch(sLanguage){
		case "french":
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1km" , "1 kilom" + String.fromCharCode(232) + "tre"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("5km", "5 kilom" + String.fromCharCode(232) + "tres"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("10km", "10 kilom" + String.fromCharCode(232) + "tres"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("30km", "30 kilom" + String.fromCharCode(232) + "tres"))
			break;
		default:
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1km" , "1 kilometre"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("5km", "5 kilometres"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("10km", "10 kilometres"))
			DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("30km", "30 kilometres"))
			break;
	}
	DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1mi", "1 mile"))
	DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("3mi", "3 miles"))
	DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("10mi", "10 miles"))
	DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("50mi", "50 miles"))
	
	sel.selectedIndex = 1;
	if(dRadius == 1 && sUnits == "km")
		sel.selectedIndex = 0;
	else if(dRadius == 5 && sUnits == "km")
		sel.selectedIndex = 1;
	else if(dRadius == 10 && sUnits == "km")
		sel.selectedIndex = 2;
	else if(dRadius == 30 && sUnits == "km")
		sel.selectedIndex = 3;
	else if(dRadius == 1 && sUnits == "mi")
		sel.selectedIndex = 4;
	else if(dRadius == 3 && sUnits == "mi")
		sel.selectedIndex = 5;
	else if(dRadius == 10 && sUnits == "mi")
		sel.selectedIndex = 6;
	else if(dRadius == 50 && sUnits == "mi")
		sel.selectedIndex = 7;
	
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.className = "bold";
	td.appendChild(document.createTextNode(" "));
	
	td = tr.insertCell(1);
	inpt = DOMFunctions.createInputElement("image", "txtFindStore", "Find a Store");
	switch(sLanguage){
		case "french":
			inpt.src = "images/fr_find.gif";
			break;
		default:
			inpt.src = "images/b_find.gif";
			break;
	}
	inpt.className = "inpt";
	inpt.onclick = findStore;
	td.appendChild(inpt);		

	div.appendChild(tbl);
	
	document.getElementById("txtAddress").focus();
}

function onPageLoad(){
	var request = new Querystring();
	if(request.get("sLanguage")){
		sLanguage = request.get("sLanguage").toLowerCase();
	}
	
	var img = document.getElementById("imgTitle");
	switch(sLanguage){
		case "french":
			img.src = "images/lefttitle_storelocator_fr.gif";
			break;
	}
	
	if(request.get("recordid")){
		getSingleResult(request.get("recordid"));
	}
	else if(request.get("trip")){
		showTripPlanner();
	}
	else {
		showError("", new MQAddress());
	}
}

function getSingleResult(recordid){
	var sExec = new MQExec(MQ_API_SPATIAL_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
	
	aSearchResults = new Array();
	var scIds = new MQStringCollection();
	var scFields = new MQStringCollection();
		
	var rs = new MQRecordSet();
	
	var dblq = new MQDBLayerQuery();
	dblq.setDBLayerName(TABLE_NAME);
	dblq.setExtraCriteria("RecordId = '" + recordid + "'");
		
	sExec.getRecordInfo(scFields, dblq, rs, scIds);
		
		
	var sFields = rs.getFieldNames();
	while(!rs.isEOF()){
		var obj = new Object();
		
		for(var i=0; i < sFields.getSize(); i++){
			var name = sFields.getAt(i);
			obj[name] = rs.getField(name);
		}
		
		if(obj.N == ""){
			obj.N = "Tim Hortons";
		}
		
		
		aSearchResults.push(obj);
	
		rs.moveNext();
	}
	
	if(aSearchResults.length > 0)
		getDetails(recordid, false, true);
	else
		showError("", new MQAddress());

}

// Details
	function getDetails(recordId, bIsDirections, bHideBackButton){
		var loc = null;
		for(var i=0; i < aSearchResults.length; i++){
			if(aSearchResults[i].RecordId == recordId){
				loc = aSearchResults[i];
				break;
			}
			
		}
	
		if(loc){
			var div = document.getElementById("divContent");
			DOMFunctions.removeAllChildren(div);
			
			var pTbl = document.createElement("table");
			pTbl.cellPadding = 4;
			pTbl.cellSpacing = 0;
			pTbl.style.width = iPageWidth + "px";
			div.appendChild(pTbl);
			var pTr, pTd;
			
			pTr = pTbl.insertRow(0);
			pTr.vAlign = "top";
			pTd = pTr.insertCell(0);
			pTd.width = "300px";
			
			var tbl = document.createElement("table");
			pTd.appendChild(tbl);
			
			var div = document.createElement("div");
			div.style.height = "330px";
			div.style.width = (iPageWidth - 300) + "px";
			pTd = pTr.insertCell(1);
			pTd.style.height = div.style.height;
			pTd.appendChild(div);
			
			var subTable = document.createElement("table");
			pTd.appendChild(subTable);
			var sTr, sTd;
					
			sTr = subTable.insertRow(0);
			sTd = sTr.insertCell(0);

			if(!bHideBackButton){
				switch(sLanguage){
					case "french":
						sTd.appendChild(getButton("Cherchez à nouveau", "?sLanguage=french"));
						break;
					default:
						sTd.appendChild(getButton("Search Again", "?sLanguage=english"));
						break;
				}
			}
					
			
			var map = new MQTileMap(div, 9 ,new MQLatLng(loc.Lat, loc.Lng));
			map.getInfoWindow().setMinWidth(150);
			map.addControl(new MQLargeZoomControl(), new MQMapCornerPlacement(MQMapCorner.TOP_LEFT, new MQSize(3, 15)));
			
			var tr,td, poi, mapicon;
			var trItt = 0;
	
			tr = tbl.insertRow(trItt++);
			td = tr.insertCell(0);
			td.colSpan = "2";
			
			if(!bHideBackButton){
				var href = ""
				if(bIsDirections){
					href = "javascript:route(false, true);";
				}
				else 
					href = "javascript:showSearchResults(aSearchResults);";
				switch(sLanguage){
					case "french":
						td.appendChild(getButton("< Retour", href));
						break;
					default:
						td.appendChild(getButton("< Back ", href));
						break;
				}
				td.appendChild(document.createElement("br"));
			}
			
			
			var poi = new MQPoi(new MQLatLng(loc.Lat, loc.Lng));
			if(loc.N != "")
				poi.setInfoTitleElement(getInfoTitleElement(loc.N));
			else 
				poi.setInfoTitleElement(getInfoTitleElement("Tim Hortons"));		
			
			var span = document.createElement("span");
			appendLocationToElementDetails(loc, span, false, true);
			poi.setInfoContentElement(span);
			map.addPoi(poi);
				
			tr = tbl.insertRow(trItt++);
			td = tr.insertCell(0);		
			appendLocationToElementDetails(loc, td, true);
			td.appendChild(document.createElement("br"));
			
			
		}
	}
	
	function printDetails(recordId){
		var loc = null;
		for(var i=0; i < aSearchResults.length; i++){
			if(aSearchResults[i].RecordId == recordId){
				loc = aSearchResults[i];
				break;
			}
			
		}
	
		if(loc){
			var url = "printdetails.html";
			url += "?address=" + escape(loc.address);
			url += "&city=" + escape(loc.city);
			url += "&state=" + escape(loc.state);
			url += "&postal=" + escape(loc.postal);
			url += "&user4=" + escape(loc.user4);
			url += "&user5=" + escape(loc.user5);
			url += "&country=" + escape(loc.country);
			url += "&Lat=" + loc.Lat;
			url += "&Lng=" + loc.Lng;
			url += "&N=" + escape(loc.N);
			url += "&sLanguage=" + sLanguage;
			window.open(url);
		}
	}
	
	function onPagePrintDetailsLoad(){
		var request = new Querystring();
		if(request.get("sLanguage"))
			sLanguage = request.get("sLanguage").toLowerCase();
		
		var loc = request.params;
		
		var div = document.getElementById("divContent");
		DOMFunctions.removeAllChildren(div);
		
		var pTbl = document.createElement("table");
		div.appendChild(pTbl);
		var pTr, pTd;
		
		pTr = pTbl.insertRow(0);
		pTr.vAlign = "top";
		pTd = pTr.insertCell(0);
		
		var tbl = document.createElement("table");
		pTd.appendChild(tbl);
		
		var div = document.createElement("div");
		div.style.height = "525px";
		div.style.width = "525px";
		
		pTr = pTbl.insertRow(1);
		pTd = pTr.insertCell(0);
		pTd.style.height = div.style.height;
		pTd.appendChild(div);
		
		var map = new MQTileMap(div, 7 , new MQLatLng(loc.Lat, loc.Lng));
		
		var tr,td, poi, mapicon;
		var trItt = 0;
	
		
		var poi = new MQPoi(new MQLatLng(loc.Lat, loc.Lng));
		map.addPoi(poi);
			
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);		
		appendLocationToElementDetails(loc, td, false);
		td.appendChild(document.createElement("br"));
	 
	}

//Driving Directions
	var origin, destination;
	function getDirections(recordId){
		var loc = null;
		for(var i=0; i < aSearchResults.length; i++){
			if(aSearchResults[i].RecordId == recordId){
				loc = aSearchResults[i];
				break;
			}
			
		}
	
		if(loc){
			origin = mqGeoAddress;
			destination = new MQGeoAddress();
			destination.setStreet(loc.address);
			destination.setCity(loc.city);
			destination.setState(loc.state);
			destination.setPostalCode(loc.postal);
			destination.setCountry(loc.country);
			destination.setMQLatLng(new MQLatLng(parseFloat(loc.Lat), parseFloat(loc.Lng)));
			destination.user4 = loc.user4;
			destination.user5 = loc.user5;
			
			route();
		}
	}
	
	function reverseDirections(){
		var tmp = origin;
		origin = destination;
		destination = tmp;
		route();
	}
	
	function printDirections(){
		var url = "printdirections.html";
		url += "?sUnits=" + sUnits;
		url += "&sLanguage=" + sLanguage;
		url += "&oAddress=" + escape(origin.getStreet());
		url += "&oCity=" + escape(origin.getCity());
		url += "&oState=" + escape(origin.getState());
		url += "&oPostal=" + escape(origin.getPostalCode());
		url += "&oCountry=" + escape(origin.getCountry());
		url += "&oLat=" + escape(origin.getMQLatLng().getLatitude());
		url += "&oLng=" + escape(origin.getMQLatLng().getLongitude());
		url += "&dAddress=" + escape(destination.getStreet());
		url += "&dCity=" + escape(destination.getCity());
		url += "&dState=" + escape(destination.getState());
		url += "&dPostal=" + escape(destination.getPostalCode());
		url += "&dCountry=" + escape(destination.getCountry());
		url += "&dLat=" + escape(destination.getMQLatLng().getLatitude());
		url += "&dLng=" + escape(destination.getMQLatLng().getLongitude());
		
		window.open(url);
	}
	
	function printDirectionsSearch(){
		var url = "printdirections.html";
		url += "?sUnits=" + sUnits;
		url += "&sLanguage=" + sLanguage;
		url += "&oAddress=" + escape(origin.getStreet());
		url += "&oCity=" + escape(origin.getCity());
		url += "&oState=" + escape(origin.getState());
		url += "&oPostal=" + escape(origin.getPostalCode());
		url += "&oCountry=" + escape(origin.getCountry());
		url += "&oLat=" + escape(origin.getMQLatLng().getLatitude());
		url += "&oLng=" + escape(origin.getMQLatLng().getLongitude());
		url += "&dAddress=" + escape(destination.getStreet());
		url += "&dCity=" + escape(destination.getCity());
		url += "&dState=" + escape(destination.getState());
		url += "&dPostal=" + escape(destination.getPostalCode());
		url += "&dCountry=" + escape(destination.getCountry());
		url += "&dLat=" + escape(destination.getMQLatLng().getLatitude());
		url += "&dLng=" + escape(destination.getMQLatLng().getLongitude());
		url += "&dRadius=" + dRadius;
		
		window.open(url);
	}
	
	function onPagePrintDirectionsLoad(){
		var request = new Querystring();
		
		origin = new MQGeoAddress();
		origin.setStreet(request.get("oAddress"));
		origin.setCity(request.get("oCity"));
		origin.setState(request.get("oState"));
		origin.setPostalCode(request.get("oPostal"));
		origin.setCountry(request.get("oCountry"));
		origin.setMQLatLng(new MQLatLng(request.get("oLat"), request.get("oLng")));

		destination = new MQGeoAddress();
		destination.setStreet(request.get("dAddress"));
		destination.setCity(request.get("dCity"));
		destination.setState(request.get("dState"));
		destination.setPostalCode(request.get("dPostal"));
		destination.setCountry(request.get("dCountry"));
		destination.setMQLatLng(new MQLatLng(request.get("dLat"), request.get("dLng")));
	
		sUnits = request.get("sUnits");
		sLanguage = request.get("sLanguage");
		
		iPageWidth = 720;
		
		if(request.get("dRadius")){
			dRadius = parseFloat(request.get("dRadius"));
			route(true, true);
		}
		else {
			route();
		}
		
	}
	
	function getRouteLine(rResults){
		var ll = new MQLatLngCollection();
		for(var i=0; i < rResults.getShapePoints().getSize(); i++){
			var sp = rResults.getShapePoints().getAt(i);
			ll.add(new MQLatLng(sp.getLatitude(), sp.getLongitude()));
		}
		var lPrimitive =  new MQLineOverlay();
		lPrimitive.setShapePoints(ll);
		lPrimitive.setColor("rgb(255, 0, 255)");
		lPrimitive.setFillColor("rgb(255, 0, 255)");
		lPrimitive.setBorderWidth(12);
		lPrimitive.setColorAlpha(.6);
		lPrimitive.setFillColorAlpha(1);
		return lPrimitive;
	}
	
	function getDirectionsPoi(mqAddress, iconImage){
	
		var mapIcon = null;
		if(iconImage){
			mapIcon = new MQMapIcon();
			mapIcon.setImage(iconImage, 37, 11, true, false);
		}
		var ll = mqAddress.getMQLatLng();
		var poi = new MQPoi(new MQLatLng(ll.getLatitude(), ll.getLongitude()), mapIcon);
		return poi;
	}
	
	function byGefId(a, b){
		var g1 = parseInt(a.gefid);
		if(isNaN(g1))
			g1 = 0;
		var g2 = parseInt(b.gefid);
		if(isNaN(g2))
			g2 = 0;
		return g1 - g2;
	}
	
	function route(bSuppressButton, bSearch){
		var mqRouteLocationCollection = new MQLocationCollection();
		mqRouteLocationCollection.add(origin);
		mqRouteLocationCollection.add(destination);
		
		var mqRouteOptions = new MQRouteOptions();
		mqRouteOptions.setMaxShapePointsPerManeuver(100);
		mqRouteOptions.setLanguage(sLanguage);
		
		var mExec = new MQExec(MQ_API_MAP_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
		var mqSessionId = mExec.createSessionEx(new MQSession());
		var mqRectLL = new MQRectLL();
		
		var rExec = new MQExec(MQ_API_ROUTE_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
		var mqRouteResults = new MQRouteResults();
		
		rExec.doRoute(mqRouteLocationCollection, mqRouteOptions, mqRouteResults, mqSessionId, mqRectLL);
		
		
		var img = document.getElementById("imgTitle");
		if(img){
			switch(sLanguage){
				case "french":
					if(bSearch)
						img.src = "images/lefttitle_alongyourway_fr.gif";
					else
						img.src = "images/lefttitle_directions_fr.gif";
					break;
				default:
					if(bSearch)
						img.src = "images/lefttitle_alongyourway.gif";
					else
						img.src = "images/lefttitle_directions.gif";
					break;
					break;
			}
		}
		

		aOldSearchResults = false;
		if(aSearchResults){
			aOldSearchResults = aSearchResults;
		}
		
		aSearchResults = new Array();
		if(bSearch){
			var sExec = new MQExec(MQ_API_SPATIAL_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);
			
			var sCriteria = new MQCorridorSearchCriteria();
			sCriteria.setMaxMatches(1000);
			sCriteria.setShapePoints(mqRouteResults.getShapePoints());
			if(sUnits == "km"){
				sCriteria.setCorridorWidth(dRadius, new MQDistanceUnits(0));
			}
			else {
				sCriteria.setCorridorWidth(dRadius, new MQDistanceUnits(1));
			}
			
			var dblq = new MQDBLayerQuery();
			dblq.setDBLayerName(TABLE_NAME);
			
			var dblqCollection = new MQDBLayerQueryCollection();
			dblqCollection.add(dblq);
			
			var fcResults = new MQFeatureCollection();
			
			sExec.search(sCriteria, fcResults, "", dblqCollection, new MQFeatureCollection(), new MQDTCollection());
			
			if(fcResults.getSize() > 0){
				var scIds = new MQStringCollection();
				for(var i=0; i < fcResults.getSize(); i++){
					scIds.add(fcResults.getAt(i).getKey());
				}
				var scFields = new MQStringCollection();
				
				var rs = new MQRecordSet();
				
				sExec.getRecordInfo(scFields, dblq, rs, scIds);
				
				
				var sFields = rs.getFieldNames();
				while(!rs.isEOF()){
					var obj = new Object();
					
					for(var i=0; i < sFields.getSize(); i++){
						var name = sFields.getAt(i);
						obj[name] = rs.getField(name);
					}
					
					if(obj.N == ""){
						obj.N = "Tim Hortons";
					}
					
					
					for(var i=0; i < fcResults.getSize(); i++){
						var f = fcResults.getAt(i);
						if(StringFunctions.trim(obj.I) == StringFunctions.trim(f.getKey())){
							obj.distance = f.getDistance();
							obj.gefid = f.getGEFID();
							break;
						}
					}
					
					if(!obj.distance){
						obj.distance = 0;
						obj.gefid = 0;
					}
					else {
						if(isNaN(parseInt(obj.gefid)))
							obj.gefid = 0;
					}
					
					aSearchResults.push(obj);
				
					rs.moveNext();
				}
				
				aSearchResults.sort(byGefId);
			}
		
		}
		
		
		
		
		var divContent = document.getElementById("divContent");
		DOMFunctions.removeAllChildren(divContent);
		
		
		var tbl = document.createElement("table");
		tbl.cellPadding = 4;
		tbl.cellSpacing = 0;
		tbl.border = 0;
		tbl.width = iPageWidth + "px";
		
		divContent.appendChild(tbl);
		
		var tr = tbl.insertRow(0);
		tr.vAlign = "top";
		var td = tr.insertCell(0);
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("DE:"));
				break;
			default:
				strong.appendChild(document.createTextNode("FROM:"));
				break;
		}
		td.appendChild(strong);
		td.appendChild(document.createElement("br"));
		var span = document.createElement("span");
		getAddressElement(origin, span);
		td.appendChild(span);
		var oDiv = document.createElement("div");
		td.appendChild(oDiv);
		oDiv.style.width = "198px";
		oDiv.style.height = "119px";
		var oMap = new MQTileMap(oDiv, 9, origin.getMQLatLng());
		switch(sLanguage){
			case "french":
				oMap.addPoi(getDirectionsPoi(origin, "images/fr_start.jpg"));
				break;				
			default:
				oMap.addPoi(getDirectionsPoi(origin, "images/start.gif"));
				break;
		}
		oMap.addRouteHighlight(mqRectLL, "http://" + MQ_API_MAP_SERVER + "/"+ MQ_API_PATH , mqSessionId, false);

		//var overlay = getRouteLine(mqRouteResults);
		//oMap.addOverlay(overlay);
		
		td = tr.insertCell(1);
		td.rowSpan = 2
		var mDiv = document.createElement("div");
		mDiv.style.height = "342px";
		mDiv.style.width = (iPageWidth - 220 ) +"px";
		td.appendChild(mDiv);
		
		var mqInit = new MQMapInit();
		mqInit.setBestFitRect(mqRectLL);
		var mMap = new MQTileMap(mDiv, null, null, null, mqInit);
		mMap.getInfoWindow().setMinWidth(150);
		mMap.addControl(new MQLargeZoomControl(), new MQMapCornerPlacement(MQMapCorner.TOP_LEFT, new MQSize(3, 15)));
		switch(sLanguage){
			case "french":
				mMap.addPoi(getDirectionsPoi(origin, "images/fr_start.jpg"));
				break;				
			default:
				mMap.addPoi(getDirectionsPoi(origin, "images/start.gif"));
				break;
		}
		switch(sLanguage){
			case "french":
				mMap.addPoi(getDirectionsPoi(destination, "images/fr_end.jpg"));
				break;				
			default:
				mMap.addPoi(getDirectionsPoi(destination, "images/end.gif"));
				break;
		}
		mMap.addRouteHighlight(mqRectLL, "http://" + MQ_API_MAP_SERVER + "/"+ MQ_API_PATH , mqSessionId, false);
		//var overlay = getRouteLine(mqRouteResults);
		//mMap.addOverlay(overlay);
		
		if(!bSuppressButton){
			
			var inpt = DOMFunctions.createInputElement("image", "btnPrint", "Print Directions");
			switch(sLanguage){
				case "french":
					inpt.src = "images/fr_print-directions.jpg";
					break;
				default:
					inpt.src = "images/print.gif";
					break;
			}
			if(bSearch)
				inpt.onclick = printDirectionsSearch;
			else
				inpt.onclick = printDirections;
			td.appendChild(inpt);
	
			var inpt = DOMFunctions.createInputElement("image", "btnReverse", "Reverse Directions");
			switch(sLanguage){
				case "french":
					inpt.src = "images/fr_reverse-directions.gif";
					break;
				default:
					inpt.src = "images/reverse.gif";
					break;
			}
			inpt.onclick = reverseDirections;
			td.appendChild(inpt);
			
			if(aOldSearchResults && !bSearch){
				var href = ""
				href = "javascript:showSearchResults(aOldSearchResults);";
				switch(sLanguage){
					case "french":
						td.appendChild(getButton("< Retour", href));
						break;
					default:
						td.appendChild(getButton("< Back ", href));
						break;
				}
			}
		}
		
		var tr = tbl.insertRow(1);
		tr.vAlign = "top";
		var td = tr.insertCell(0);
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("À:"));
				break;
			default:
				strong.appendChild(document.createTextNode("TO:"));
				break;
		}
		td.appendChild(strong);
		td.appendChild(document.createElement("br"));
		var span = document.createElement("span");
		getAddressElement(destination, span);
		td.appendChild(span);
		var dDiv = document.createElement("div");
		dDiv.style.width = "198px";
		dDiv.style.height = "119px";
		td.appendChild(dDiv);
		var dMap = new MQTileMap(dDiv, 9, destination.getMQLatLng());
		switch(sLanguage){
			case "french":
				dMap.addPoi(getDirectionsPoi(destination, "images/fr_end.jpg"));
				break;				
			default:
				dMap.addPoi(getDirectionsPoi(destination, "images/end.gif"));
				break;
		}
		dMap.addRouteHighlight(mqRectLL, "http://" + MQ_API_MAP_SERVER + "/"+ MQ_API_PATH , mqSessionId, false);
		//var overlay = getRouteLine(mqRouteResults);
		//dMap.addOverlay(overlay);
		
		var tr = tbl.insertRow(2);
		var td = tr.insertCell(0);
		td.colSpan = 2;
		
		var dTbl = document.createElement("table");
		dTbl.cellPadding = 4;
		dTbl.cellSpacing = 0;
		dTbl.border = 0;
		dTbl.style.width = iPageWidth + "px";
		td.appendChild(dTbl);
		
		var mqTrekRoute = mqRouteResults.getTrekRoutes().getAt(0);
		var mqManeuverCollection = mqTrekRoute.getManeuvers();
		
		var trItt = 0;
		var tr = dTbl.insertRow(trItt++);
		tr.className = "dir_" + (trItt % 2);
		var td = tr.insertCell(0);
		td.style.width = "40px";
		var img = document.createElement("img");
		switch(sLanguage){
			case "french":
				img.src = "images/fr_start.jpg";
				break;				
			default:
				img.src = "images/start.gif";
				break;
		}
		td.appendChild(img);
		var td = tr.insertCell(1);
		if(bSearch)
			td.colSpan = 3;
		else
			td.colSpan = 2;
		var strong = document.createElement("strong");
		strong.appendChild(document.createTextNode(getAddressString(origin)));
		td.appendChild(strong);
		
		var iCurrentResult = 0;
		var iCurrentShapePoints = 0;
		var iNum  = 1;
		for(var i=0; i < mqManeuverCollection.getSize(); i++){
			var tdItt = 0;
			var mqManeuver = mqManeuverCollection.getAt(i);
			
			var tr = dTbl.insertRow(trItt++);
			tr.style.marginBottom = "2px";
			tr.vAlign = "top";
			tr.className = "dir_" + (trItt % 2);
			var td = tr.insertCell(tdItt++);
			td.style.width = "40px";
			td.align = "right";
			var strong = document.createElement("strong");
			strong.appendChild(document.createTextNode((i+1) + ":"));
			td.appendChild(strong);
			
			
			if(bSearch){
				var td = tr.insertCell(tdItt++);
				td.style.width = "200px";
				var dMap = document.createElement("div");
				dMap.style.height = "119px";
				dMap.style.width = "198px";
				dMap.style.margin = "2px";
				td.appendChild(dMap);
				
				var pois = new MQPoiCollection();
				
				var sp = mqManeuver.getShapePoints();
				var mapicon = new MQMapIcon();
				mapicon.setImage("images/MQ00407.gif", 25, 25, true, false);
				var spoi = new MQPoi(sp.getAt(0), mapicon);
				spoi.setLabel((i+1) , "routelabel");
				pois.add(spoi);

				var mapicon = new MQMapIcon();
				mapicon.setImage("images/MQ00407.gif", 25, 25, true, false);
				var epoi = new MQPoi(sp.getAt(sp.getSize()-1), mapicon);
				epoi.setLabel((i+2) , "routelabel");
				pois.add(epoi);
				
				var mqInit = new MQMapInit();
				mqInit.setBestFitRect(pois.getBoundingRect());

				var tMap = new MQTileMap(dMap, null, null, null, mqInit);				
				tMap.addRouteHighlight(mqRectLL, "http://" + MQ_API_MAP_SERVER + "/"+ MQ_API_PATH , mqSessionId, false);
				
			
				var td = tr.insertCell(tdItt++);
				td.style.width = (iPageWidth - (200 + 40 + 125)) + "px";
			}
			else {
				var td = tr.insertCell(tdItt++);
				td.style.width = (iPageWidth - (40 + 125)) + "px";
			}
			td.appendChild(document.createTextNode(mqManeuver.getNarrative()));
			
			var td = tr.insertCell(tdItt++);
			td.style.width="125px";
			var n
			if(sUnits == "km"){
				n = new Number(parseFloat(mqManeuver.getDistance() * 1.6));
			}
			else {
				n = new Number(parseFloat(mqManeuver.getDistance()));
			}
			if(n.valueOf() < .01){
				td.appendChild(document.createTextNode("< 0.01"));
			}
			else {
				td.appendChild(document.createTextNode(n.toFixed(2)));			
			}
			if(sUnits == "km"){
				switch(sLanguage){
					case "french":
						td.appendChild(document.createTextNode(" kilomètres"));
						break;
					default:
						td.appendChild(document.createTextNode(" kilometers"));
						break;
				}
			}
			else
				td.appendChild(document.createTextNode(" miles"));
				
			if(bSearch){
				//Time
				var sTime = "";
				var iTime= mqManeuver.getTime();
				if(iTime > 3600){
					var h = iTime / 3600;
					iTime = iTime % 3600;
					if(h == 1)
						sTime += "1 hour ";
					else {
						var n = new Number(h);
						sTime += n.toFixed(0) + " hours ";
					}
				}
				
				if(iTime > 60){
					var m = iTime / 60;
					if(m == 1)
						sTime += "1 minute";
					else {
						var n = new Number(m);
						sTime += n.toFixed(0) + " minutes";
					}
				}
				else if(sTime == ""){
					sTime = "1 minute";
				}
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createTextNode(sTime));
			
			
				//Search Results
				if(iCurrentResult < aSearchResults.length){
					var tr = dTbl.insertRow(trItt++);
					tr.style.marginBottom = "2px";
					var td = tr.insertCell(0);
					
					var td = tr.insertCell(1);
					td.colSpan = 3
					td.align="right";
					var lTbl = document.createElement("table");
					lTbl.style.width = "400px";
					td.appendChild(lTbl);
					
					var lTrItt = 0;
					iCurrentShapePoints += mqManeuver.getShapePoints().getSize();
					var loc = aSearchResults[iCurrentResult];
					try{
						while(parseInt(loc.gefid) <= iCurrentShapePoints){
							
							var mapicon = new MQMapIcon();
							mapicon.setImage("images/icons/401_" + iNum + ".gif", 20, 20, true, false);
							
							var poi = new MQPoi(new MQLatLng(loc.Lat, loc.Lng), mapicon);
							poi.setInfoTitleElement(getInfoTitleElement(loc.N));
							var span = document.createElement("span");
							appendLocationToElement(loc, span, false, true);
							poi.setInfoContentElement(span);
							mMap.addPoi(poi);
							
							var lTr = lTbl.insertRow(lTrItt++);
							var lTd = lTr.insertCell(0);
							lTd.align = "left";
							lTd.style.width = "30px";
							
							var img = document.createElement("img");
							img.src = "images/icons/401_" + iNum + ".gif";
							lTd.appendChild(img);
							
							var lTd = lTr.insertCell(1);
							lTd.align = "left";
							appendLocationToElement(loc, lTd, true, true);
							lTd.appendChild(document.createElement("br"));
							
							iNum++;
							iCurrentResult++;
							loc = aSearchResults[iCurrentResult];
						}
					}catch(exc){}
				}
			}
			
			
		}
		
		var tr = dTbl.insertRow(trItt++);
		tr.className = "dir_" + (trItt % 2);
		var td = tr.insertCell(0);
		var img = document.createElement("img");
		switch(sLanguage){
			case "french":
				img.src = "images/fr_end.jpg";
				break;				
			default:
				img.src = "images/end.gif";
				break;
		}
		td.appendChild(img);
		var td = tr.insertCell(1);
		if(bSearch)
			td.colSpan = 3;
		else
			td.colSpan = 2;
		var strong = document.createElement("strong");
		strong.appendChild(document.createTextNode(getAddressString(destination)));
		td.appendChild(strong);
		
		var tr = dTbl.insertRow(trItt++);
		var td = tr.insertCell(0);
		if(bSearch)
			td.colSpan = 4;
		else
			td.colSpan = 3;
		
		var div = document.createElement("div");
		div.style.position = "absolute";
		td.appendChild(div);
		td.appendChild(document.createElement("br"));
		
		var span = document.createElement("span");
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("Temps de conduite approximatif: "));
				break;				
			default:
				strong.appendChild(document.createTextNode("Estimated Driving Time: "));
				break;
		}

		span.appendChild(strong);
		
		
		var sTime = "";
		var iTime= mqTrekRoute.getTime();
		if(iTime > 3600){
			var h = iTime / 3600;
			iTime = iTime % 3600;
			if(h == 1)
				sTime += "1 hour ";
			else {
				var n = new Number(h);
				sTime += n.toFixed(0) + " hours ";
			}
		}
		
		if(iTime > 60){
			var m = iTime / 60;
			if(m == 1)
				sTime += "1 minute";
			else {
				var n = new Number(m);
				sTime += n.toFixed(0) + " minutes";
			}
		}
		else if(sTime == ""){
			sTime = "1 minute";
		}
		span.appendChild(document.createTextNode(sTime));
		div.appendChild(span);
		
		var span = document.createElement("span");
		span.style.left = (iPageWidth - 225) + "px";
		span.style.width = "300px";
		span.style.position="absolute";
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("Distance totale: "));
				break;				
			default:
				strong.appendChild(document.createTextNode("Total Distance: "));
				break;
		}
		span.appendChild(strong);
		
		var n
		if(sUnits == "km"){
			n = new Number(parseFloat(mqTrekRoute.getDistance() * 1.6));
		}
		else {
			n = new Number(parseFloat(mqTrekRoute.getDistance()));
		}
		if(n.valueOf() < .01){
			span.appendChild(document.createTextNode("< 0.01"));
		}
		else {
			span.appendChild(document.createTextNode(n.toFixed(2)));			
		}
		if(sUnits == "km"){
			switch(sLanguage){
				case "french":
					span.appendChild(document.createTextNode(" kilomètres"));
					break;
				default:
					span.appendChild(document.createTextNode(" kilometers"));
					break;
			}
		}
		else
			span.appendChild(document.createTextNode(" miles"));
		div.appendChild(span);
	
		
		
			
		
	
	}
	
//Trip Planner
function routeOriginDestination(recordId){
		var loc = null;
		for(var i=0; i < aSearchResults.length; i++){
			if(aSearchResults[i].RecordId == recordId){
				loc = aSearchResults[i];
				break;
			}
			
		}
	
		if(loc){
			origin = mqGeoAddress;
			destination = new MQGeoAddress();
			destination.setStreet(loc.address);
			destination.setCity(loc.city);
			destination.setState(loc.state);
			destination.setPostalCode(loc.postal);
			destination.setCountry(loc.country);
			destination.setMQLatLng(new MQLatLng(parseFloat(loc.Lat), parseFloat(loc.Lng)));
			destination.user4 = loc.user4;
			destination.user5 = loc.user5;
			var lcO = new MQLocationCollection();
			var lcD = new MQLocationCollection();
			lcD.add(destination);
			
			var img = document.getElementById("imgTitle");
			if(img){
				switch(sLanguage){
					case "french":
						img.src = "images/lefttitle_directions_fr.gif";
						break;
					default:
						img.src = "images/lefttitle_directions.gif";
						break;
				}
			}
			
			showRouteOriginDestination(false, lcO, lcD, true);
		}
}

function showTripPlanner(){
	var img = document.getElementById("imgTitle");
	switch(sLanguage){
		case "french":
			img.src = "images/lefttitle_tripplanner_fr.gif";
			break;
		default:
			img.src = "images/lefttitle_tripplanner.gif";
			break;
	}
	showRouteOriginDestination();
}

var lcOriginAmbig, lcDestinationAmbig;
function showRouteOriginDestination(msg, lcOrigins, lcDestinations, bSuppressRadius){
	

	var mqOriginAddress = new MQAddress();
	if(!lcOrigins){
		lcOrigins = new MQLocationCollection();
		lcOrigins.add(new MQAddress());
	}
	else {
		if(lcOrigins.getSize() == 1){
			mqOriginAddress = lcOrigins.getAt(0);
		}
	}
	var mqDestinationAddress = new MQAddress();
	if(!lcDestinations){
		lcDestinations = new MQLocationCollection();
		lcDestinations.add(new MQAddress());
	}
	else {
		if(lcDestinations.getSize() == 1){
			mqDestinationAddress = lcDestinations.getAt(0);
		}
	}
	
	var div = document.getElementById("divContent");
	DOMFunctions.removeAllChildren(div);
	
	var tr, td, inpt;
	var trItt = 0
	var tbl = document.createElement("table");
	tbl.border="0";
	tbl.cellPadding="4"
	tbl.cellspacing="0";
	
	if(msg){
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.colSpan = 3;
		td.appendChild(document.createTextNode(msg));
	}
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.style.color = "red";
	td.className = "formLabels"
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("DE"));
			break;
		default:
			td.appendChild(document.createTextNode("START"));
			break;
	}
	
	tr = tbl.insertRow(trItt++);
	td.className = "bold";
	td = tr.insertCell(0);
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Adresse:"));
			break;
		default:
			td.appendChild(document.createTextNode("Street or Intersection:"));
			break;
	}
	
	
	tr = tbl.insertRow(trItt++);	
	td = tr.insertCell(0);
	
	if(lcOrigins.getSize() > 1){
		lcOriginAmbig = lcOrigins;
		var sel = document.createElement("select");
		sel.id = "selOriginAmbig";
		td.appendChild(sel);
		
		for(var i=0; i < lcOrigins.getSize(); i++){
			var loc = lcOrigins.getAt(i);
			var opt = DOMFunctions.getSelectOption(i, getAddressSingleLine(loc));
			DOMFunctions.appendOptionToSelect(sel, opt);
		}
	
	}
	else {
		lcOriginAmbig = false;
	
		inpt = DOMFunctions.createInputElement("text", "txtOrigAddress", mqOriginAddress.getStreet());
		inpt.size="30";
		inpt.maxLength="80";
		inpt.id="txtOrigAddress"; 
		inpt.className = "inpt";
		td.appendChild(inpt);
	
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.className = "bold";	
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Ville:"));
				break;
			default:
				td.appendChild(document.createTextNode("City:"));
				break;
		}
		
		td = tr.insertCell(1);
		td.className = "bold";
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Province /" + String.fromCharCode(201) + "tat:"));
				break;
			default:
				td.appendChild(document.createTextNode("Province/State:"));
				break;
		}
		
		td = tr.insertCell(2);
		td.className = "bold";
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Code postal"));
				break;
			default:
				td.appendChild(document.createTextNode("Postal/ZIP Code:"));
				break;
		}
	
	
		
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		inpt = DOMFunctions.createInputElement("text", "txtOrigCity", mqOriginAddress.getCity());
		inpt.size="30";
		inpt.maxLength="50";
		inpt.id="txtOrigCity"; 
		inpt.className = "inpt";
		td.appendChild(inpt);
	
		
		td = tr.insertCell(1);
		var sel = document.createElement("select");
		sel.name = "selOrigStateProvince";
		sel.id = "selOrigStateProvince";
		sel.className = "select";
		td.appendChild(sel);
		
		var opt = DOMFunctions.getSelectOption("", "");
		DOMFunctions.appendOptionToSelect(sel, opt);
		STATES.loadStates(sel);
		
		switch(mqOriginAddress.getState()){
			case "AB":
				sel.selectedIndex = 0;
				break;
			case "BC":
				sel.selectedIndex = 1;
				break;
			case "MB":
				sel.selectedIndex = 2;
				break;
			case "NB":
				sel.selectedIndex = 3;
				break;
			case "NL":
				sel.selectedIndex = 4;
				break;
			case "NT":
				sel.selectedIndex = 5;
				break;
			case "NS":
				sel.selectedIndex = 6;
				break;
			case "ON":
				sel.selectedIndex = 7;
				break;
			case "PE":
				sel.selectedIndex = 8;
				break;
			case "QC":
				sel.selectedIndex = 9;
				break;
			case "SK":
				sel.selectedIndex = 10;
				break;
			case "YT":
				sel.selectedIndex = 11;
				break;
			case "CT":
				sel.selectedIndex = 12;
				break;
			case "KY":
				sel.selectedIndex = 13;
				break;
			case "MA":
				sel.selectedIndex = 14;
				break;
			case "ME":
				sel.selectedIndex = 15;
				break;
			case "MI":
				sel.selectedIndex = 16;
				break;
			case "NY":
				sel.selectedIndex = 17;
				break;
			case "OH":
				sel.selectedIndex = 18;
				break;
			case "PA":
				sel.selectedIndex = 19;
				break;
			case "RI":
				sel.selectedIndex = 20;
				break;
			case "WV":
				sel.selectedIndex = 21;
				break;
		}
					 
		
		td = tr.insertCell(2);
		inpt = DOMFunctions.createInputElement("text", "txtOrigPostalCode", mqOriginAddress.getPostalCode());
		inpt.size="15";
		inpt.maxLength="10";
		inpt.id="txtOrigPostalCode"; 
		inpt.className = "inpt";
		td.appendChild(inpt);				
	}
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.colspan="3";
	td.className = "bold";
	td.appendChild(document.createTextNode(" "));
	
	//Destination
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.style.color = "red";
	td.className = "formLabels"
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("À"));
			break;
		default:
			td.appendChild(document.createTextNode("DESTINATION"));
			break;
	}
	
	tr = tbl.insertRow(trItt++);
	td.className = "bold";
	td = tr.insertCell(0);
	switch(sLanguage){
		case "french":
			td.appendChild(document.createTextNode("Adresse:"));
			break;
		default:
			td.appendChild(document.createTextNode("Street or Intersection:"));
			break;
	}
	
	
	tr = tbl.insertRow(trItt++);	
	td = tr.insertCell(0);
	if(lcDestinations.getSize() > 1){
		lcDestinationAmbig = lcDestinations;
		var sel = document.createElement("select");
		sel.id = "selDestinationAmbig";
		td.appendChild(sel);
		
		for(var i=0; i < lcDestinations.getSize(); i++){
			var loc = lcDestinations.getAt(i);
			var opt = DOMFunctions.getSelectOption(i, getAddressSingleLine(loc));
			DOMFunctions.appendOptionToSelect(sel, opt);
		}
	
	}
	else {
		lcDestinationAmbig = false;
		
		inpt = DOMFunctions.createInputElement("text", "txtDestAddress", mqDestinationAddress.getStreet());
		inpt.size="30";
		inpt.maxLength="80";
		inpt.id="txtDestAddress"; 
		inpt.className = "inpt";
		td.appendChild(inpt);
	
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.className = "bold";	
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Ville:"));
				break;
			default:
				td.appendChild(document.createTextNode("City:"));
				break;
		}
		
		td = tr.insertCell(1);
		td.className = "bold";
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Province /" + String.fromCharCode(201) + "tat:"));
				break;
			default:
				td.appendChild(document.createTextNode("Province/State:"));
				break;
		}
		
		td = tr.insertCell(2);
		td.className = "bold";
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Code postal"));
				break;
			default:
				td.appendChild(document.createTextNode("Postal/ZIP Code:"));
				break;
		}
	
	
		
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		inpt = DOMFunctions.createInputElement("text", "txtDestCity", mqDestinationAddress.getCity());
		inpt.size="30";
		inpt.maxLength="50";
		inpt.id="txtDestCity"; 
		inpt.className = "inpt";
		td.appendChild(inpt);
	
		
		td = tr.insertCell(1);
		var sel = document.createElement("select");
		sel.name = "selDestStateProvince";
		sel.id = "selDestStateProvince";
		sel.className = "select";
		td.appendChild(sel);
		
		var opt = DOMFunctions.getSelectOption("", "");
		DOMFunctions.appendOptionToSelect(sel, opt);
		STATES.loadStates(sel);
		
		switch(mqDestinationAddress.getState()){
			case "AB":
				sel.selectedIndex = 0;
				break;
			case "BC":
				sel.selectedIndex = 1;
				break;
			case "MB":
				sel.selectedIndex = 2;
				break;
			case "NB":
				sel.selectedIndex = 3;
				break;
			case "NL":
				sel.selectedIndex = 4;
				break;
			case "NT":
				sel.selectedIndex = 5;
				break;
			case "NS":
				sel.selectedIndex = 6;
				break;
			case "ON":
				sel.selectedIndex = 7;
				break;
			case "PE":
				sel.selectedIndex = 8;
				break;
			case "QC":
				sel.selectedIndex = 9;
				break;
			case "SK":
				sel.selectedIndex = 10;
				break;
			case "YT":
				sel.selectedIndex = 11;
				break;
			case "CT":
				sel.selectedIndex = 12;
				break;
			case "KY":
				sel.selectedIndex = 13;
				break;
			case "MA":
				sel.selectedIndex = 14;
				break;
			case "ME":
				sel.selectedIndex = 15;
				break;
			case "MI":
				sel.selectedIndex = 16;
				break;
			case "NY":
				sel.selectedIndex = 17;
				break;
			case "OH":
				sel.selectedIndex = 18;
				break;
			case "PA":
				sel.selectedIndex = 19;
				break;
			case "RI":
				sel.selectedIndex = 20;
				break;
			case "WV":
				sel.selectedIndex = 21;
				break;
		}
					 
		
		td = tr.insertCell(2);
		inpt = DOMFunctions.createInputElement("text", "txtDestPostalCode", mqDestinationAddress.getPostalCode());
		inpt.size="15";
		inpt.maxLength="10";
		inpt.id="txtDestPostalCode"; 
		inpt.className = "inpt";
		td.appendChild(inpt);				
	}
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	td.colspan="3";
	td.className = "bold";
	td.appendChild(document.createTextNode(" "));


	if(!bSuppressRadius){
		tr = tbl.insertRow(trItt++);
		td = tr.insertCell(0);
		td.className = "bold";
		td.colSpan="3";
		switch(sLanguage){
			case "french":
				td.appendChild(document.createTextNode("Rayon de recherche:"));
				break;
			default:
				td.appendChild(document.createTextNode("Distance to search from route:"));
				break;
		}
		
		sel = document.createElement("select");
		sel.id = "selSearchradius";
		sel.name = "selSearchradius";
		td.appendChild(sel);
	
		switch(sLanguage){
			case "french":
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption(".5km" , ".5 kilom" + String.fromCharCode(232) + "tres"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1km", "1 kilom" + String.fromCharCode(232) + "tre"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1.5km", "1.5 kilom" + String.fromCharCode(232) + "tres"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("2km", "2 kilom" + String.fromCharCode(232) + "tres"))
				break;
			default:
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption(".5km" , ".5 kilometres"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1km", "1 kilometre"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1.5km", "1.5 kilometres"))
				DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("2km", "2 kilometres"))
				break;
		}
		DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption(".5mi", ".5 miles"))
		DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1mi", "1 mile"))
		DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("1.5mi", "1.5 miles"))
		DOMFunctions.appendOptionToSelect(sel, DOMFunctions.getSelectOption("2mi", "2 miles"))
		
		sel.selectedIndex = 0;
		if(dRadius == 1 && sUnits == "km")
			sel.selectedIndex = 0;
		else if(dRadius == 5 && sUnits == "km")
			sel.selectedIndex = 1;
		else if(dRadius == 10 && sUnits == "km")
			sel.selectedIndex = 2;
		else if(dRadius == 1 && sUnits == "mi")
			sel.selectedIndex = 3;
		else if(dRadius == 3 && sUnits == "mi")
			sel.selectedIndex = 4;
		else if(dRadius == 10 && sUnits == "mi")
			sel.selectedIndex = 5;
		else if(dRadius == 50 && sUnits == "mi")
			sel.selectedIndex = 6;
	}
	
	
	tr = tbl.insertRow(trItt++);
	td = tr.insertCell(0);
	inpt = DOMFunctions.createInputElement("image", "txtFindStore", "Find a Store");
	switch(sLanguage){
		case "french":
			inpt.src = "images/fr_find.gif";
			break;
		default:
			inpt.src = "images/tripplanner_submit.gif";
			break;
	}
	inpt.className = "inpt";
	inpt.onclick = geocodeOrigDestTimeout;
	td.appendChild(inpt);		

	div.appendChild(tbl);
	
	document.getElementById("txtOrigAddress").focus();

}

function geocodeOrigDestTimeout(){
	setTimeout("geocodeOrigDest()", 200);
}

function geocodeOrigDest(){
	var sel = document.getElementById("selSearchradius");
	dRadius = 0;
	if(sel){
		var sRadius = sel.options[sel.selectedIndex].value;
		if(sRadius.indexOf("km") >= 0){
			dRadius = parseFloat(sRadius.replace("km", ""));
			sUnits = "km";
		}
		else {
			dRadius = parseFloat(sRadius.replace("mi", ""));	
			sUnits = "mi";
		}
	}
	

	
	var gExec = new MQExec(MQ_API_GEOCODE_SERVER, MQ_API_PATH, MQ_API_PORT, PROXY_SERVER, PROXY_PATH, PROXY_PORT);

	var mqOrigLocationCollection = new MQLocationCollection();
	var mqDestLocationCollection = new MQLocationCollection();
	if(lcOriginAmbig){
		var sel = document.getElementById("selOriginAmbig");
		mqOrigLocationCollection.add(lcOriginAmbig.getAt(sel.selectedIndex));
	}
	else {
		var sOrigAddress = document.getElementById("txtOrigAddress").value;
		var sOrigCity = document.getElementById("txtOrigCity").value;
		var sOrigPostalCode = document.getElementById("txtOrigPostalCode").value;
		var sel = document.getElementById("selOrigStateProvince");
		var sOrigStateProvince = sel.options[sel.selectedIndex].value;
		
		if(StringFunctions.isBlank(sOrigCity) || StringFunctions.isBlank(sOrigStateProvince)){
			if(StringFunctions.isBlank(sOrigPostalCode)){
				alert("Please enter an Origin City/State or Postal Code!");
				return;
			}
		}
			
		
		var mqOrigAddress = new MQAddress();
		mqOrigAddress.setStreet(sOrigAddress);
		mqOrigAddress.setCity(sOrigCity);
		mqOrigAddress.setState(sOrigStateProvince);
		mqOrigAddress.setPostalCode(sOrigPostalCode);
		mqOrigAddress.setCountry("US");
		if(sOrigStateProvince == "AB" || sOrigStateProvince == "BC" || sOrigStateProvince == "MB" || sOrigStateProvince == "NB"
			|| sOrigStateProvince == "NL" || sOrigStateProvince == "NT" || sOrigStateProvince == "NS" || sOrigStateProvince == "ON"
			|| sOrigStateProvince == "PE" || sOrigStateProvince == "QC" || sOrigStateProvince == "SK" || sOrigStateProvince == "YT"){
				mqOrigAddress.setCountry("CA");
		}
		else {
			if(!StringFunctions.isBlank(sOrigPostalCode)){
				if(isNaN(parseInt(sOrigPostalCode))){
					mqOrigAddress.setCountry("CA");		
				}
			}
		}
		
		
		gExec.geocode(mqOrigAddress, mqOrigLocationCollection);
	}
	if(lcDestinationAmbig){
		var sel = document.getElementById("selDestinationAmbig");
		mqDestLocationCollection.add(lcDestinationAmbig.getAt(sel.selectedIndex));
	}
	else {
	
		var sDestAddress = document.getElementById("txtDestAddress").value;
		var sDestCity = document.getElementById("txtDestCity").value;
		var sDestPostalCode = document.getElementById("txtDestPostalCode").value;
		var sel = document.getElementById("selDestStateProvince");
		var sDestStateProvince = sel.options[sel.selectedIndex].value;
		
		if(StringFunctions.isBlank(sDestCity) || StringFunctions.isBlank(sDestStateProvince)){
			if(StringFunctions.isBlank(sDestPostalCode)){
				alert("Please enter an Destination City/State or Postal Code!");
				return;
			}
		}

	
		
		var mqDestAddress = new MQAddress();
		mqDestAddress.setStreet(sDestAddress);
		mqDestAddress.setCity(sDestCity);
		mqDestAddress.setState(sDestStateProvince);
		mqDestAddress.setPostalCode(sDestPostalCode);
		mqDestAddress.setCountry("US");
		if(sDestStateProvince == "AB" || sDestStateProvince == "BC" || sDestStateProvince == "MB" || sDestStateProvince == "NB"
			|| sDestStateProvince == "NL" || sDestStateProvince == "NT" || sDestStateProvince == "NS" || sDestStateProvince == "ON"
			|| sDestStateProvince == "PE" || sDestStateProvince == "QC" || sDestStateProvince == "SK" || sDestStateProvince == "YT"){
				mqDestAddress.setCountry("CA");
		}
		else {
			if(!StringFunctions.isBlank(sDestPostalCode)){
				if(isNaN(parseInt(sDestPostalCode))){
					mqDestAddress.setCountry("CA");		
				}
			}
		}
		
		
		
		gExec.geocode(mqDestAddress, mqDestLocationCollection);
	}
	
	if(mqOrigLocationCollection.getSize() == 0 || mqDestLocationCollection.getSize() == 0){	
		mqOrigLocationCollection.removeAll();
		mqOrigLocationCollection.add(mqOrigAddress);
		mqDestLocationCollection.removeAll();
		mqDestLocationCollection.add(mqDestAddress);
		showRouteOriginDestination("Address couldn't be found!", mqOrigLocationCollection, mqDestLocationCollection);
		return;
	}
	else if(mqDestLocationCollection.getSize() > 1 || mqOrigLocationCollection.getSize() > 1){
		showRouteOriginDestination("Mutliple addresses found!", mqOrigLocationCollection, mqDestLocationCollection);
		return;
	}
	else {
		origin = mqOrigLocationCollection.getAt(0);
		destination = mqDestLocationCollection.getAt(0);
		route(false, dRadius > 0);
		return;
	}
}

//Helper functions
function appendLocationToElement(location, htmlElement, bShowName, bIsDirections){
	var a = document.createElement("a");
	a.href = "javascript:getDetails(\"" + location.RecordId + "\", " + bIsDirections + ");";
	if(bShowName){
		var strong = document.createElement("strong");
		strong.appendChild(document.createTextNode(location.N));
		a.appendChild(strong);
	}
	else {
		switch(sLanguage){
			case "french":
				a.appendChild(document.createTextNode("Afficher carte"));
				break;
			default:
				a.appendChild(document.createTextNode("Show Map"));
				break;
		}
	}
	htmlElement.appendChild(a);
	htmlElement.appendChild(document.createElement("br"));
	
	//Address
	htmlElement.appendChild(document.createTextNode(location.address));
	htmlElement.appendChild(document.createElement("br"));
	
	//City/State/Zip
	htmlElement.appendChild(document.createTextNode(location.city));
	htmlElement.appendChild(document.createTextNode(" "));
	htmlElement.appendChild(document.createTextNode(location.state));
	htmlElement.appendChild(document.createTextNode(", "));
	htmlElement.appendChild(document.createTextNode(location.postal));
	htmlElement.appendChild(document.createElement("br"));
	
	//Tel
	htmlElement.appendChild(document.createTextNode("Tel: "));
	htmlElement.appendChild(document.createTextNode(location.user4));
	htmlElement.appendChild(document.createElement("br"));
	
	//Tim Card
	if(location.user5.toUpperCase() == "TRUE"){
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("Carte Tim Express acceptée"));
				break;
			default:
				strong.appendChild(document.createTextNode("Accepts Quickpay Tim Card"));
				break;
		}
		htmlElement.appendChild(strong);
		htmlElement.appendChild(document.createElement("br"));
	
	}
	
	//Distance
	var n;
	if(sUnits == "km")
		n = new Number(location.distance * 1.6);
	else
		n = new Number(location.distance);
	htmlElement.appendChild(document.createTextNode(n.toFixed(2)));
	if(sUnits == "km"){
		switch(sLanguage){
			case "french":
				htmlElement.appendChild(document.createTextNode(" kilomètres"));
				break;
			default:
				htmlElement.appendChild(document.createTextNode(" kilometers"));
				break;
		}
	}
	else
		htmlElement.appendChild(document.createTextNode(" miles"));
	htmlElement.appendChild(document.createElement("br"));
	
	var a = document.createElement("a");
	if(bIsDirections){
		a.href = "javascript:routeOriginDestination(\"" + location.RecordId + "\");";
	}
	else {
		a.href = "javascript:getDirections(\"" + location.RecordId + "\");";
	}
	switch(sLanguage){
		case "french":
			a.appendChild(document.createTextNode("Comment s'y rendre en auto"));
			break;
		default:
			a.appendChild(document.createTextNode("Driving Directions"));
			break;
	}

	htmlElement.appendChild(a);
	htmlElement.appendChild(document.createElement("br"));
	
}


function appendLocationToElementDetails(location, htmlElement, bShowPrint, bHideName){
	
	if(!bHideName && location.N != ""){
		var strong = document.createElement("strong");
		strong.appendChild(document.createTextNode(location.N));
		htmlElement.appendChild(strong);
		htmlElement.appendChild(document.createElement("br"));
	}
	//Address
	htmlElement.appendChild(document.createTextNode(location.address));
	htmlElement.appendChild(document.createElement("br"));
	
	//City/State/Zip
	htmlElement.appendChild(document.createTextNode(location.city));
	htmlElement.appendChild(document.createTextNode(" "));
	htmlElement.appendChild(document.createTextNode(location.state));
	htmlElement.appendChild(document.createTextNode(", "));
	htmlElement.appendChild(document.createTextNode(location.postal));
	htmlElement.appendChild(document.createElement("br"));
	
	//Tel
	htmlElement.appendChild(document.createTextNode("Tel: "));
	htmlElement.appendChild(document.createTextNode(location.user4));
	htmlElement.appendChild(document.createElement("br"));
	
	//Tim Card
	if(location.user5.toUpperCase() == "TRUE"){
		var strong = document.createElement("strong");
		switch(sLanguage){
			case "french":
				strong.appendChild(document.createTextNode("Carte Tim Express acceptée"));
				break;
			default:
				strong.appendChild(document.createTextNode("Accepts Quickpay Tim Card"));
				break;
		}
		htmlElement.appendChild(strong);
		htmlElement.appendChild(document.createElement("br"));
	
	}
	
	if(bShowPrint){
		var a = document.createElement("a");
		a.href = "javascript:printDetails(\"" + location.RecordId + "\");";
		switch(sLanguage){
			case "french":
				a.appendChild(document.createTextNode("Imprimez cette carte"));
				break;
			default:
				a.appendChild(document.createTextNode("Print This Map"));
				break;
		}
		htmlElement.appendChild(a);
		htmlElement.appendChild(document.createElement("br"));
	}
	
}

function getAddressSingleLine(mqAddress){
	var bAddSpace = false;
	var str = "";
	if(!StringFunctions.isBlank(mqAddress.getStreet())){
		str = mqAddress.getStreet();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getCity())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getCity();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getCounty())){
		if(bAddSpace)
			str += " "
		str += "(" + mqAddress.getCounty() + ")";
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getState())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getState();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getPostalCode())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getPostalCode();
		bAddSpace = true;
	}
	return str;

}

function getAddressString(mqAddress){
	var bAddSpace = false;
	var str = "";
	if(!StringFunctions.isBlank(mqAddress.getStreet())){
		str = mqAddress.getStreet();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getCity())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getCity();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getState())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getState();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getPostalCode())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getPostalCode();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getCountry())){
		if(bAddSpace)
			str += " "
		str += mqAddress.getCountry();
		bAddSpace = true;
	}
	
	if(mqAddress.user1){
		if(bAddSpace)
			str += " "
		str += mqAddress.getCountry();
		bAddSpace = true;
	}
	return str;

}

function getAddressElement(mqAddress, htmlElement){
	var bAddSpace = false;
	var str = "";
	
	
	if(!StringFunctions.isBlank(mqAddress.getStreet())){
		htmlElement.appendChild(document.createTextNode(mqAddress.getStreet()));
		htmlElement.appendChild(document.createElement("br"));
	}
	var sCityStatePostal = "";
	if(!StringFunctions.isBlank(mqAddress.getCity())){
		sCityStatePostal += mqAddress.getCity();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getState())){
		if(bAddSpace)
			sCityStatePostal += " "
		sCityStatePostal += mqAddress.getState();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getPostalCode())){
		if(bAddSpace)
			sCityStatePostal += " "
		sCityStatePostal += mqAddress.getPostalCode();
		bAddSpace = true;
	}
	if(!StringFunctions.isBlank(mqAddress.getCountry())){
		if(bAddSpace)
			sCityStatePostal += " "
		sCityStatePostal += mqAddress.getCountry();
		bAddSpace = true;
	}
	if(sCityStatePostal != ""){	
		htmlElement.appendChild(document.createTextNode(sCityStatePostal));
		htmlElement.appendChild(document.createElement("br"));
	}
		
	if(mqAddress.user4){
		htmlElement.appendChild(document.createTextNode("Tel: " + mqAddress.user4));
		htmlElement.appendChild(document.createElement("br"));
	}
	return str;

}
