function midCap(origStr) {
	return origStr.replace(/['-][a-z](?=[a-z])/g,toUpper);
	function toUpper() {
		return arguments[0].toUpperCase();
	}
}

function getDealerList() {
	$('#dealerListContainer').hide();
	if(typeof(_vis_opt_top_initialize) == "function") {_vis_opt_register_conversion(3,16);}
	
	var zipMatch = "";
	if ($('#bprZip').val().match(/[0-9]+/) != null) {
		zipMatch = $('#bprZip').val().match(/[0-9]+/)[0];
	}
	
	if (zipMatch.length) {
		dealerArgs = "bprZip=" + zipMatch;
	} else if ($.trim($('#dealerName').val()) != "") { 
		dealerArgs = "dealerName=" + $.trim($('#dealerName').val()); 		
	} else if (($.trim($('#city').val()) != "") && ($.trim($('#state').val()) != "") && ($("#city").val().toLowerCase() != "city") ) {
		dealerArgs = "city=" + $.trim($('#city').val()) + "&state=" + $.trim($('#state').val());
	} else {
		$("#fndDealerList").html("<div style='padding: 10px'>" + nsDataError + "</div>");
		$('#dealerListContainer').show();
		return;
	}
	
	// spinner
	// load up the spinner
	if (spinner === undefined) {
	    var spinner = new Spinner(opts).spin($("#findDealerSpinner")[0]);
	    $("#findDealerSpinner").data("spinner", spinner);
	}
	
	$("#fndRight").hide();

	dealerList = {};
	dealerArgs += "&dealerMax=12&filterEcom=false";
	dealerArgs += "&radius="+ $("#locRadius").val();
	$.get('/MMNA/findDealer.do', encodeURI(dealerArgs), function (data) {
		drawDealerList();
	}, "script");
	
	//add find a dealer results doubleclick tracker
	var axel = Math.random()+"";
	var a = axel * 10000000000000;	
	// updated dart 5.24.2011
	$('#findADealerResultView').append('<iframe src="http://fls.doubleclick.net/activityi;src=1033846;type=fy11c001;cat=fy11c486;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>')
}

function drawDealerList() {
	var spinner = $("#findDealerSpinner").data("spinner");
	if (spinner != undefined) {
	    spinner.stop();
	}
	
	// omniture event
	bubbleSequentialEvent(" var variables = [ {name: 'pageName', value: 'mc:vehicle:shop:find-dealer:results'}, {name: 'server', value: 'Mitsubishi Cars'}, {name: 'channel', value: 'vehicle'}, {name: 'eVar12', value: 'mc:vehicle:shop:find-dealer:results'}, {name: 'eVar28', value: ''}, {name: 'prop12', value: ''}, {name: 'prop19', value: 'mc:vehicle:shop:find-dealer:results'}, {name: 'prop20', value: 'shop'}, {name: 'prop21', value: 'find-dealer'}, {name: 'events', value: ''} ]");
	
	var dealerListBox = $("#fndDealerList");
	dealerListBox.html("");
	var dealerKeyList = new Array();
	var i = 0;

	//Write dealers keys into a list which we will iterate in a bit
	for (dealerKey in dealerList) {
		dealerKeyList[i] = dealerKey;
		i++;
	}
	
	//An error occured, no dealkerKey in dealerList
	if (i == 0) {
		dealerListBox.html("<div style='padding: 10px'>" + findDealerError + "</div>");
	} else {
		// no errors so update the zip code in the find directions form
		$("#dirZip").val($("#bprZip").val());
	}
	
	var maxDealers = 5;
	if (dealerKeyList.length < 5) { maxDealers = dealerKeyList.length }
	for ( i = 0 ; i < maxDealers ; i++) {
		if (dealerKeyList[i] != null) {
			dealer = dealerList[dealerKeyList[i]];
			var dlrname = midCap(dealer.name);
			
			var quickQuoteOmnitureString = "javascript: var s=s_gi(omnitureVehicleSuite);s.linkTrackVars='channel,server,eVar12,eVar28,prop12,prop19,prop20,prop21,events';s.linkTrackEvents='';s.pageName='mc:vehicle:shop:quick-quote';s.channel='vehicle';s.server='Mitsubishi Cars';s.eVar12='mc:vehicle:shop:quick-quote';s.eVar28='" + dlrname.replace("'","") + "';s.prop12='" + dlrname.replace("'","") + "';s.prop19='mc:vehicle:shop:quick-quote';s.prop20='shop';s.prop21='quick-quote';s.events='';s.tl(this);return true;";

			//with the dealerUrlTrue
			// commenting out omniture tagging
			//+ "\" target=\"_blank\"><b>"+ dlrname +"</b></a></b></div> <div id='dealerUrlFalse"+ dealer.id +"'><b>"+ dlrname +"</b></div> "+ dealer.address +"<br/>"+ dealer.city +" "+ dealer.state +" "+ dealer.zip +"<br/>"+ dealer.phone +"</div>     <span style='float: right; text-align: right;'>("+ dealer.miles +" miles)<br> <a onClick='selectDealer(\""+ dealer.id +"\");return false;' href='#'>"+ getMapCopy +"</a><br> <a onClick='selectDirectionDrawer(\""+ dealer.id +"\", \"true\");return false;' href='#'>"+ getDirectionsCopy +"</a><div id='quickQuoteLink"+ dealer.id +"'> <a onClick=\""+ quickQuoteOmnitureString +"\" href='/MMNA/jsp/quote.do?dealerId="+ dealer.id+"'>"+ quickQuoteCopy +"</a> <br></div> </span>     </div>";

			var dlString = "<div id='dealerItem"+ dealer.id +"' class='fndDealerItem'>     <div style='float: left;' id='diamondIcon"+ dealer.id +"'> <a href=\"#\" onClick=\"javascript:fancyPop('/MMNA/jsp/diamond.do',430,475); return false;\"> <img border='0' src='/MMNA/images/spacer.gif'></a></div>     <div style='position: absolute; left: 50px;'><div id='dealerUrlTrue"+ dealer.id +"'>"
			+ "<a href=\"http://"+ dealer.url +"\" class='dealerExitLink' id='dealerItem" + dlrname.replace("'","") + "'"
			+ "\" target=\"_blank\"><b>"+ dlrname +"</b></a></b></div> <div id='dealerUrlFalse"+ dealer.id +"'><b>"+ dlrname +"</b></div> "+ dealer.address +"<br/>"+ dealer.city +" "+ dealer.state +" "+ dealer.zip +"<br/>"+ dealer.phone +"</div>     <span style='float: right; text-align: right;'>";
						if (Number(dealer.miles) >= 0) {
				dlString += "("+ dealer.miles +" miles)<br>";
			}
			// added for bing
			dlString += " <input type=\"hidden\" name=\"bingDataName" + dealer.id + "\" id=\"bingDataName" + dealer.id + "\" value=\"" + dlrname + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataCity" + dealer.id + "\" id=\"bingDataCity" + dealer.id + "\" value=\"" + dealer.city + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataState" + dealer.id + "\" id=\"bingDataState" + dealer.id + "\" value=\"" + dealer.state + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataZip" + dealer.id + "\" id=\"bingDataZip" + dealer.id + "\" value=\"" + dealer.zip + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataAddress" + dealer.id + "\" id=\"bingDataAddress" + dealer.id + "\" value=\"" + dealer.address + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataLat" + dealer.id + "\" id=\"bingDataLat" + dealer.id + "\" value=\"" + dealer.latitude + "\">";
			dlString += " <input type=\"hidden\" name=\"bingDataLong" + dealer.id + "\" id=\"bingDataLong" + dealer.id + "\" value=\"" + dealer.longitude + "\">";
			
			dlString += "<a href='javascript:selectDealer(\""+ dealer.id +"\");closeDirections();'>"+ getMapCopy +"</a><br> <a href='javascript:selectDirections(\""+ dealer.id +"\");openDirections();'>"+ getDirectionsCopy +"</a><div id='quickQuoteLink"+ dealer.id +"'> <a onClick=\""+ quickQuoteOmnitureString +"\" href='/MMNA/jsp/quote.do?dealerId="+ dealer.id+"'>"+ quickQuoteCopy +"</a> <br></div> </span>     </div>";
			dealerListBox.append(dlString);
						
			//hide and show quickQuoteLink# divs and diamondDealer# divs
			if(dealer.ecommerce == false){
				$('#quickQuoteLink'+dealer.id).hide();
			}
			if(dealer.diamond == false){
				$('#diamondIcon'+dealer.id).hide();
			}
			if(dealer.url != "{dealer_url}"){
				$('#dealerUrlTrue'+dealer.id).show();
				$('#dealerUrlFalse'+dealer.id).hide();
			}
			else {
				$('#dealerUrlTrue'+dealer.id).hide();
				$('#dealerUrlFalse'+dealer.id).show();
			}
		}
	}
	// link binding
	$('.dealerExitLink').click ( function () {
		bubbleSequentialEvent(" var variables = [ {name: 'pageName', value: 'mc:vehicle:shop:find-dealer:results:exit'}, {name: 'server', value: 'Mitsubishi Cars'}, {name: 'channel', value: 'vehicle'}, {name: 'eVar12', value: 'mc:vehicle:shop:find-dealer:results:exit'}, {name: 'eVar28', value: '" + this.id.substr(10) + "'}, {name: 'prop19', value: 'mc:vehicle:shop:find-dealer:results:exit'}, {name: 'prop12', value: '" + this.id.substr(10) + "'}, {name: 'prop20', value: 'shop'}, {name: 'prop21', value: 'find-dealer'}, {name: 'events', value: 'event1,event16'} ]");
	});
	//show all the hiden divs
	$('#dealerListContainer').show();
}

/* select start point */
function selectAddress (index) {
	var result = bingService.getReliableResults (index);
	if (result) {
		$("#dirAddress").val(result.address);
		$("#dirCity").val(result.city);
		$("#dirZip").val(result.zip.substr(0,5));
		$("#dirState").val(result.state);
		
		bingService.selectLocation(index);
	}
}
/* data only */
function setDealer (dealerId) {
	var newLocationIndex = bingService.addDealership ({
		id: dealerId,
		name: $("#bingDataName" + dealerId).val(),
	    city: $("#bingDataCity" + dealerId).val(),
	    state: $("#bingDataState" + dealerId).val(),
	    zip: $("#bingDataZip" + dealerId).val(),
	    address: $("#bingDataAddress" + dealerId).val(),
	    latitude: $("#bingDataLat" + dealerId).val(),
	    longitude: $("#bingDataLong" + dealerId).val()
	});
	bingService.setView (newLocationIndex);
	$("#selectedDealerDrawer div").html(
		"<b>"+$("#bingDataName" + dealerId).val()+"</b><br>"+$("#bingDataAddress" + dealerId).val()+"<br>"
		+$("#bingDataCity" + dealerId).val()+", "+$("#bingDataState" + dealerId).val()+" "+$("#bingDataZip" + dealerId).val()
	);
}
/* select end point */
function selectDealer(dealerId) {
	resetMapDrawer();
	setDealer(dealerId);
	
	$("#fndRight").show();	
	closeDirections();
}
/* displays map after a dealer is selected */
function selectDirections (dealerId) {
	resetMapDrawer();
	setDealer(dealerId);
	$('#directionsLink img').attr("src", "/MMNA/bing/images/up_arrow.png");
	openDirections();
	$("#directionsDrawer").show(); $("#directionsLink span").html("View map");
	$("#fndRight").show();	
}

function resetMapDrawer () {
	$("#directionsForm input[type=text]").val(""); // clear form fields
	$("#dirState").selectedIndex = 0; // this won't work but it gets the point across
	$(".directionsError").hide(); // hide error messaging
	
	$("#itineraryDrawer").hide();
    $("#formDirectionsDrawer button.printDirections").hide();
    $("#formDirectionsDrawer button.submitThisForm").show();
    $("#clearLocation").hide();
    $("#itineraryScroll").hide();
    bingService.clearRoute();
    bingService.clearMap();
}

function closeDirections() {
	// slide up
	$('#directionsLink img').attr("src", "/MMNA/bing/images/down_arrow.png");
	$("#directionsDrawer").animate({height: "0px"}, {complete: function () { $("#directionsDrawer").hide(); $("#directionsLink span").html("Find directions to this dealer");  }});
	
}

function openDirections() {
	// slide down
	$('#directionsLink img').attr("src", "/MMNA/bing/images/up_arrow.png");
	$("#directionsDrawer").animate({height: "420px"}, {complete: function () { $("#directionsDrawer").show(); $("#directionsLink span").html("View map"); }});
	
}

function renderLocationSelect(loc) {
    return "<li class=\"locDescContainer\"><div>" + loc.address + "<br>" 
        + loc.city + ", " + loc.state + " " + loc.zip + "</div><div><a href=\"javascript:selectAddress(" + loc.index 
        + ")\" class=\"selectAddress\">Use this address <span>&gt;&gt;</span></a></div></li>";
}

function showItinerary() {
    $("#itineraryDrawer").show();
    $("#itineraryScroll").show();
    $("#formDirectionsDrawer button.printDirections").show();
    $("#formDirectionsDrawer button.submitThisForm").hide();
    $("#clearLocation").show();
}

function parseStartPoint (numResults) {
	$("#multipleLocationContainer").html("");
	if (numResults > 1) {
		// multiple results, display option list
		var resultList = bingService.getReliableResults();		
		for (x=0; x<resultList.length; x++) {
			$("#multipleLocationContainer").append(renderLocationSelect(resultList[x]));
			$("#selectLocationDrawer").show();
			$("#selectedDealerDrawer").hide();
		}		
	} else {
		if (numResults == 1) {
			// one result
			selectAddress(0);
			
			bingService.clearRoute();
			bingService.displayRoute({success: showItinerary});
			
			$("#selectedDealerDrawer").show();
			$("#selectLocationDrawer").hide();
			
		} else {
			// no results
			$("#searchError").show();
		}
	}
}

function findDirections() {
	var loc = new Location({
		state: $("#dirState").val(),
		zip: $("#dirZip").val(),
		city: $("#dirCity").val(),
		address: $("#dirAddress").val()
	});
	bingService.validateLocation (loc, parseStartPoint);
}

function viewTurnByTurn() {}

// global scope declaration
var opts = null;

$(document).ready( function () {
	bingService.init ({mapElement: "mapDrawer", itineraryElement: "itineraryContainer" , width: 520, height: 420});
	
	$("#directionsLink").click ( function () {
		var col = $('#directionsLink img[src$="down_arrow.png"]');
		if (col.length) {
			openDirections();
			bubbleSequentialEvent(" var variables = [ {name: 'pageName', value: 'Dealer Direction'}]");
	    } else {
	    	closeDirections();
	    	bubbleSequentialEvent(" var variables = [ {name: 'pageName', value: 'Dealer Map'}]");
	    }
		return false;
	});
	
	$("#getDirectionsButton").click ( function () {
		return false;
	});
	
	$(".printDirections").click ( function () {
		// could add a random axel here to force reload
		bubbleSequentialEvent(" var variables = [ {name: 'prop9', value: 'Print Directions'}]");
		$.get("/MMNA/bing/print_map.html", function (data) {
			// find the insert point
			var dealer = bingService.getDealer();
			var start = bingService.getStart();
			for (x in dealer) {
				data = data.replace("[DEALER." + x.toUpperCase() + "]", "\"" + dealer[x] + "\"");
			}
			
			for (x in start) {
				data = data.replace("[START." + x.toUpperCase() + "]", "\"" + start[x] + "\"");
			}
			
			var printWindow = window.open("",'Print Directions');
			var newDoc = printWindow.document.open();
			newDoc.write (data);
			newDoc.close();
		}, "html");
		return false;
	});
	
	// sliders
	$("#itineraryScroll").slider({
		orientation: "vertical",
		range: "min",
		min: 0,
		max: 100,
		value: 100,
		slide: function( event, ui ) {
		    var offset = 0;  /* include offset for IE here */
		    if (navigator.appName.search ("Internet Explorer") != -1) {
		    	offset = 150;
		    }
		    var newTopVal = (($("#itineraryDrawer").height() + offset) - $("#itineraryContainer").height()) * ((100 - ui.value) / 100);
	        var str = newTopVal.toString();
	        if (newTopVal > 0) {
	        	str = "-" + str;
	        }
		    $("#itineraryContainer").css ("top", str + "px");
		}
	});
	$("#dealerScrollPath").slider({
		orientation: "vertical",
		range: "min",
		min: 0,
		max: 100,
		value: 100,
		slide: function( event, ui ) {
		    var newTopVal = ($("#fndDealerList").height() - $("#scrollView").height()) * ((100 - ui.value) / 100);
	        var str = newTopVal.toString();
	        if (newTopVal > 0) {
	        	str = "-" + str;
	        }
		    $("#fndDealerList").css ("top", str + "px");
		}
	});
	
	$('input').keydown(function(e){
	    if (e.keyCode == 13) {
	    	return false;
	    }
	});
	
	// get spinner defaults	
	$.getJSON ("/MMNA/javascript/json/fx_spinner.json", function (data) {
		opts = data;
	});
	
	// clear input fields
	$("#fndLeft input[type=text]").val("");	
});
